diff --git a/Makefile b/Makefile index e9527e5..a38da81 100644 --- a/Makefile +++ b/Makefile @@ -21,11 +21,11 @@ clean: TEST_FLAGS := -lgtest -lpthread -fsanitize=address -fno-omit-frame-pointer test: mkdir -p bin - g++ -g -Wall -Wno-deprecated-declarations $(SRC_NO_MAIN) tests/tests.cpp -I include -o bin/run_tests $(TEST_FLAGS) -lssl -lcrypto + g++ -g -Wall -Wno-deprecated-declarations $(SRC_NO_MAIN) tests/tests.cpp -I include -o bin/run_tests $(TEST_FLAGS) -lssl -lcrypto -DSHRINCS_L ./bin/run_tests BENCH_FLAGS := -lgtest -lpthread benchmark: mkdir -p bin - g++ -O3 -Wall -Wno-deprecated-declarations $(SRC_NO_MAIN) tests/bench.cpp -I include -o bin/bench $(BENCH_FLAGS) -lssl -lcrypto + g++ -O3 -Wall -Wno-deprecated-declarations $(SRC_NO_MAIN) tests/bench.cpp -I include -o bin/bench $(BENCH_FLAGS) -lssl -lcrypto -DSHRINCS_L ./bin/bench \ No newline at end of file diff --git a/include/fors_c.h b/include/fors_c.h index 2c634e9..4dc691b 100644 --- a/include/fors_c.h +++ b/include/fors_c.h @@ -16,11 +16,11 @@ using namespace HASH; namespace FORS_C { uint32_t extract_bits(const unsigned char* message, uint32_t start_bit_idx, uint32_t bits_amount); void fors_msg_to_indices(const unsigned char* message, uint32_t* out_buffer); - uint32_t fors_grind(const unsigned char* message, const unsigned char* sk_prf, const unsigned char* pk_seed, const unsigned char* pk_root, unsigned char* adrs, uint32_t* out, unsigned char* digest_out, unsigned char* r_out); + uint32_t fors_grind(const unsigned char* message, uint32_t message_len, const unsigned char* sk_prf, const unsigned char* pk_seed, const unsigned char* pk_root, unsigned char* adrs, uint32_t* out, unsigned char* digest_out, unsigned char* r_out); unsigned char* fors_sk_gen(const unsigned char* sk_seed, SHA256_CTX hash_ctx, unsigned char* adrs, uint32_t tree_idx, uint32_t leaf_idx); unsigned char* fors_treehash(const unsigned char* sk_seed, SHA256_CTX hash_ctx, unsigned char* adrs, uint32_t tree_idx, uint32_t target_height, uint32_t start_idx); unsigned char* fors_auth_path(const unsigned char* sk_seed, SHA256_CTX hash_ctx, unsigned char* adrs, uint32_t tree_idx, uint32_t leaf_idx); - unsigned char* fors_sign(const unsigned char* message, const unsigned char* sk_seed, const unsigned char* sk_prf, const unsigned char* pk_seed, const unsigned char* pk_root, SHA256_CTX hash_ctx, unsigned char* adrs, unsigned char* digest_out); + unsigned char* fors_sign(const unsigned char* message, uint32_t message_len, const unsigned char* sk_seed, const unsigned char* sk_prf, const unsigned char* pk_seed, const unsigned char* pk_root, SHA256_CTX hash_ctx, unsigned char* adrs, unsigned char* digest_out); unsigned char* fors_pk_from_sig(const unsigned char* sig, uint32_t indices[K], SHA256_CTX hash_ctx, unsigned char* adrs); } diff --git a/include/shrincs.h b/include/shrincs.h index 5fbcdbd..c8db390 100644 --- a/include/shrincs.h +++ b/include/shrincs.h @@ -43,11 +43,11 @@ namespace SHRINCS { void shrincs_key_gen(PublicKey& out_pk, SecretKey& out_sk, State& out_state); void shrincs_restore(const unsigned char* seed, PublicKey& out_pk, SecretKey& out_sk, State& out_state); - unsigned char* shrincs_sign_stateful(const unsigned char* message, SecretKey& sk, State& state); - unsigned char* shrincs_sign_stateless(const unsigned char* message, SecretKey& sk); - bool shrincs_verify_stateful(const unsigned char* message, const unsigned char* sig, uint32_t sig_len, PublicKey& pk); - bool shrincs_verify_stateless(const unsigned char* message, const unsigned char* sig, PublicKey& pk); - bool shrincs_verify(const unsigned char* message, const unsigned char* sig, uint32_t sig_len, PublicKey& pk); + unsigned char* shrincs_sign_stateful(const std::vector message, SecretKey& sk, State& state); + unsigned char* shrincs_sign_stateless(const std::vector message, SecretKey& sk); + bool shrincs_verify_stateful(const std::vector message, const unsigned char* sig, uint32_t sig_len, PublicKey& pk); + bool shrincs_verify_stateless(const std::vector message, const unsigned char* sig, PublicKey& pk); + bool shrincs_verify(const std::vector message, const unsigned char* sig, uint32_t sig_len, PublicKey& pk); } #endif \ No newline at end of file diff --git a/include/uxmss.h b/include/uxmss.h index 02d053e..524cbd8 100644 --- a/include/uxmss.h +++ b/include/uxmss.h @@ -10,8 +10,8 @@ namespace UXMSS unsigned char* uxmss_treehash(const unsigned char* sk_seed, SHA256_CTX hash_ctx, unsigned char* adrs, uint32_t level); unsigned char* uxmss_root(const unsigned char* sk_seed, SHA256_CTX hash_ctx, unsigned char* adrs); unsigned char* uxmss_auth_path(const unsigned char* sk_seed, SHA256_CTX hash_ctx, unsigned char* adrs, uint32_t q); - unsigned char* uxmss_pk_from_sig(const unsigned char* wots_sig, const unsigned char* auth, const unsigned char* message, const unsigned char* pk_seed, const unsigned char* pk_root, SHA256_CTX hash_ctx, unsigned char* adrs, uint32_t q); - unsigned char* uxmss_sign(const unsigned char* message, const unsigned char* sk_seed, const unsigned char* sk_prf, const unsigned char* pk_seed, const unsigned char* pk_root, SHA256_CTX hash_ctx, unsigned char* adrs, uint32_t q); + unsigned char* uxmss_pk_from_sig(const unsigned char* wots_sig, const unsigned char* auth, const unsigned char* message, uint32_t message_len, const unsigned char* pk_seed, const unsigned char* pk_root, SHA256_CTX hash_ctx, unsigned char* adrs, uint32_t q); + unsigned char* uxmss_sign(const unsigned char* message, uint32_t message_len, const unsigned char* sk_seed, const unsigned char* sk_prf, const unsigned char* pk_seed, const unsigned char* pk_root, SHA256_CTX hash_ctx, unsigned char* adrs, uint32_t q); } #endif \ No newline at end of file diff --git a/include/wots_c.h b/include/wots_c.h index 2f5983b..f2e7abc 100644 --- a/include/wots_c.h +++ b/include/wots_c.h @@ -20,8 +20,8 @@ namespace WOTS_C void base_w(const unsigned char* message, unsigned char* out_buffer); void chain(const unsigned char* m, uint32_t start, uint32_t steps, SHA256_CTX hash_ctx, unsigned char* adrs, unsigned char* out); unsigned char* wots_pk_gen(const unsigned char* sk_seed, SHA256_CTX hash_ctx, unsigned char* adrs, uint32_t keypair, bool sf); - uint32_t wots_grind(const unsigned char* message, const unsigned char* pk_seed, unsigned char* adrs, uint32_t keypair, unsigned char* msg_out, bool sf); - bool wots_digest(const unsigned char* message, const unsigned char* pk_seed, uint32_t ctr, unsigned char* adrs, uint32_t keypair, unsigned char* msg_out, bool sf); + uint32_t wots_grind(const unsigned char* message, uint32_t message_len, const unsigned char* pk_seed, unsigned char* adrs, uint32_t keypair, unsigned char* msg_out, bool sf); + bool wots_digest(const unsigned char* message, uint32_t message_len, const unsigned char* pk_seed, uint32_t ctr, unsigned char* adrs, uint32_t keypair, unsigned char* msg_out, bool sf); unsigned char* wots_sign(const unsigned char* message, uint32_t message_len, const unsigned char* sk_seed, const unsigned char* sk_prf, const unsigned char* pk_seed, const unsigned char* pk_root, SHA256_CTX hash_ctx, unsigned char* adrs, uint32_t keypair, bool sf, bool is_internal); unsigned char* wots_pk_from_sig(const unsigned char* sig, const unsigned char* message, uint32_t message_len, const unsigned char* pk_seed, const unsigned char* pk_root, SHA256_CTX hash_ctx, unsigned char* adrs, uint32_t keypair, bool sf, bool is_internal); } diff --git a/kat/kat_gen_fail.cpp b/kat/kat_gen_fail.cpp index 5dfff8a..d6657d8 100644 --- a/kat/kat_gen_fail.cpp +++ b/kat/kat_gen_fail.cpp @@ -231,8 +231,8 @@ int main() unsigned char seed_alt[3*N]; randombytes(seed_alt, 3*N); - unsigned char* msg = new unsigned char[mlen]; - randombytes(msg, mlen); + std::vector msg = std::vector(mlen); + randombytes(msg.data(), mlen); //Wrong message for (int ci = 0; ci < N_CORRUPTIONS; ++ci) @@ -244,8 +244,9 @@ int main() uint32_t slen = sf_siglen(1); uint32_t off; unsigned char mask; - unsigned char* bad_msg = corrupt_within(msg, mlen, off, mask); - if(memcmp(bad_msg, msg, mlen) == 0) fprintf(stderr, "WARN: identical messages\n"); + unsigned char* bad_msg_ptr = corrupt_within(msg.data(), mlen, off, mask); + std::vector bad_msg = std::vector(bad_msg_ptr, bad_msg_ptr + mlen); + if(memcmp(bad_msg.data(), msg.data(), mlen) == 0) fprintf(stderr, "WARN: identical messages\n"); if (off < 32) fprintf(stderr, "INFO: corruption within first 32 bytes at byte=%u\n", off); @@ -258,11 +259,10 @@ int main() "SHRINCS-%s stateful wrong-msg byte=%u mask=0x%02x mlen=%zu", VARIANT_NAME, off, mask, mlen); write_fail_record(f, count++, lbl, seed, - mlen, msg, pk, sk, sig, slen, - "msg corrupted", bad_msg, mlen, ok); + mlen, msg.data(), pk, sk, sig, slen, + "msg corrupted", bad_msg.data(), mlen, ok); if (ok) fprintf(stderr, "WARN [%s]: expected Fail, got Pass\n", lbl); delete[] sig; - delete[] bad_msg; } { @@ -271,7 +271,8 @@ int main() unsigned char* sig = shrincs_sign_stateless(msg, sk); uint32_t off; unsigned char mask; - unsigned char* bad_msg = corrupt_within(msg, mlen, off, mask); + unsigned char* bad_msg_ptr = corrupt_within(msg.data(), mlen, off, mask); + std::vector bad_msg = std::vector(bad_msg_ptr, bad_msg_ptr + mlen); if (off < 32) fprintf(stderr, "INFO: corruption within first 32 bytes at byte=%u\n", off); else @@ -284,11 +285,10 @@ int main() "SHRINCS-%s stateless wrong-msg byte=%u mask=0x%02x mlen=%zu", VARIANT_NAME, off, mask, mlen); write_fail_record(f, count++, lbl, seed, - mlen, msg, pk, sk, sig, SL_SIZE, - "msg corrupted", bad_msg, mlen, ok); + mlen, msg.data(), pk, sk, sig, SL_SIZE, + "msg corrupted", bad_msg.data(), mlen, ok); if (ok) fprintf(stderr, "WARN [%s]: expected Fail, got Pass\n", lbl); delete[] sig; - delete[] bad_msg; } } @@ -315,7 +315,7 @@ int main() "SHRINCS-%s stateful wrong-pk ci=%d mlen=%zu", VARIANT_NAME, ci, mlen); write_fail_record(f, count++, lbl, seed, - mlen, msg, pk, sk, sig, slen, + mlen, msg.data(), pk, sk, sig, slen, "pk corrupted", pk2_bytes, 2*N, ok); if (ok) fprintf(stderr, "WARN [%s]: expected Fail, got Pass\n", lbl); delete[] sig; @@ -343,7 +343,7 @@ int main() "SHRINCS-%s stateless wrong-pk ci=%d mlen=%zu", VARIANT_NAME, ci, mlen); write_fail_record(f, count++, lbl, seed, - mlen, msg, pk, sk, sig, SL_SIZE, + mlen, msg.data(), pk, sk, sig, SL_SIZE, "pk corrupted", pk2_bytes, 2*N, ok); if (ok) fprintf(stderr, "WARN [%s]: expected Fail, got Pass\n", lbl); delete[] sig; @@ -372,7 +372,7 @@ int main() "SHRINCS-%s stateful corrupted-sig byte=%u mask=0x%02x mlen=%zu", VARIANT_NAME, off, mask, mlen); write_fail_record(f, count++, lbl, seed, - mlen, msg, pk, sk, sig, slen, + mlen, msg.data(), pk, sk, sig, slen, "sig corrupted", bad, slen, ok); if (ok) fprintf(stderr, "WARN [%s]: expected Fail, got Pass\n", lbl); delete[] bad; @@ -398,7 +398,7 @@ int main() "SHRINCS-%s stateless corrupted-sig byte=%u mask=0x%02x mlen=%zu", VARIANT_NAME, off, mask, mlen); write_fail_record(f, count++, lbl, seed, - mlen, msg, pk, sk, sig, SL_SIZE, + mlen, msg.data(), pk, sk, sig, SL_SIZE, "sig corrupted", bad, SL_SIZE, ok); if (ok) fprintf(stderr, "WARN [%s]: expected Fail, got Pass\n", lbl); delete[] bad; @@ -419,7 +419,7 @@ int main() "SHRINCS-%s cross-type stateless-sig-as-stateful mlen=%zu", VARIANT_NAME, mlen); write_fail_record(f, count++, lbl, seed, - mlen, msg, pk, sk, sig, SL_SIZE, + mlen, msg.data(), pk, sk, sig, SL_SIZE, "sig corrupted (truncated to MAX_SF_SIZE)", sig, MAX_SF_SIZE, ok); if (ok) fprintf(stderr, "WARN [%s]: expected Fail, got Pass\n", lbl); delete[] sig; @@ -439,11 +439,9 @@ int main() snprintf(lbl, sizeof(lbl), "SHRINCS-%s stateful invalid-state (valid=false) mlen=%zu", VARIANT_NAME, mlen); - write_throw_record(f, count++, lbl, seed, mlen, msg, pk, sk, threw); + write_throw_record(f, count++, lbl, seed, mlen, msg.data(), pk, sk, threw); if (!threw) fprintf(stderr, "WARN [%s]: expected throw, did not throw\n", lbl); } - - delete[] msg; } // Counter exhausted (once, outside message loop) @@ -451,8 +449,8 @@ int main() unsigned char seed[3*N]; randombytes(seed, 3*N); - unsigned char msg[32] = {}; - randombytes(msg,32); + std::vector msg = std::vector(32); + randombytes(msg.data(),32); PublicKey pk; SecretKey sk; State st; keygen(seed, pk, sk, st); @@ -473,7 +471,7 @@ int main() snprintf(lbl, sizeof(lbl), "SHRINCS-%s stateful counter-exhausted q > HSF+1=%u", VARIANT_NAME, HSF + 1); - write_throw_record(f, count++, lbl, seed, 32, msg, pk, sk, threw); + write_throw_record(f, count++, lbl, seed, 32, msg.data(), pk, sk, threw); if (!threw) fprintf(stderr, "WARN [%s]: expected throw, did not throw\n", lbl); } diff --git a/kat/kat_gen_pass.cpp b/kat/kat_gen_pass.cpp index a24ca51..c3eabb9 100644 --- a/kat/kat_gen_pass.cpp +++ b/kat/kat_gen_pass.cpp @@ -110,7 +110,8 @@ static void write_record(FILE* f, int count, const char* label, static void advance_to(SecretKey& sk, State& st, uint32_t target_q) { - unsigned char dummy[32] = {}; + std::vector dummy = std::vector(32, 0); + while (st.q < target_q - 1) { unsigned char* tmp = shrincs_sign_stateful(dummy, sk, st); delete[] tmp; @@ -161,8 +162,8 @@ int main() unsigned char seed[3*N]; randombytes(seed, 3*N); - unsigned char* msg = new unsigned char[mlen]; - randombytes(msg, mlen); + std::vector msg = std::vector(mlen); + randombytes(msg.data(), mlen); { PublicKey pk; SecretKey sk; State st; @@ -180,7 +181,7 @@ int main() char lbl[128]; snprintf(lbl, sizeof(lbl), "SHRINCS-%s stateless mlen=%zu", VARIANT_NAME, mlen); - write_record(f, count++, lbl, seed, mlen, msg, pk, sk, sig, SL_SIZE, ok); + write_record(f, count++, lbl, seed, mlen, msg.data(), pk, sk, sig, SL_SIZE, ok); delete[] sig; } @@ -207,11 +208,9 @@ int main() snprintf(lbl, sizeof(lbl), "SHRINCS-%s stateful q=%u mlen=%zu", VARIANT_NAME, target_q, mlen); - write_record(f, count++, lbl, seed, mlen, msg, pk, sk, sig, slen, ok); + write_record(f, count++, lbl, seed, mlen, msg.data(), pk, sk, sig, slen, ok); delete[] sig; } - - delete[] msg; } fprintf(f, "# Total records: %d\n", count); diff --git a/kat/truncation_bug_demo.cpp b/kat/truncation_bug_demo.cpp index 5c47a6a..c22b3a7 100644 --- a/kat/truncation_bug_demo.cpp +++ b/kat/truncation_bug_demo.cpp @@ -117,8 +117,8 @@ int main() unsigned char seed[3*N]; randombytes(seed, 3*N); - unsigned char* msg = new unsigned char[mlen]; - randombytes(msg, mlen); + std::vector msg = std::vector(mlen); + randombytes(msg.data(), mlen); { PublicKey pk; SecretKey sk; State st; @@ -128,7 +128,8 @@ int main() uint32_t off_before; unsigned char mask_before; random_offset_in(0, 32, off_before, mask_before); - unsigned char* bad_before = corrupt_at(msg, mlen, off_before, mask_before); + unsigned char* bad_before_ptr = corrupt_at(msg.data(), mlen, off_before, mask_before); + std::vector bad_before = std::vector(bad_before_ptr, bad_before_ptr + mlen); bool ok_before = false; try { ok_before = shrincs_verify(bad_before, sig, slen, pk); } @@ -137,14 +138,15 @@ int main() char lbl[128]; snprintf(lbl, sizeof(lbl), "stateful q = 1 corrupt before byte32 mlen=%zu", mlen); - write_record(f, count++, lbl, seed, mlen, msg, pk, sig, slen, - bad_before, off_before, mask_before, ok_before); + write_record(f, count++, lbl, seed, mlen, msg.data(), pk, sig, slen, + bad_before.data(), off_before, mask_before, ok_before); if (ok_before) fprintf(stderr, "Unexpected Pass: corruption before byte 32 was ignored.\n"); uint32_t off_after; unsigned char mask_after; random_offset_in(32, mlen, off_after, mask_after); - unsigned char* bad_after = corrupt_at(msg, mlen, off_after, mask_after); + unsigned char* bad_after_ptr = corrupt_at(msg.data(), mlen, off_after, mask_after); + std::vector bad_after = std::vector(bad_after_ptr, bad_after_ptr + mlen); bool ok_after = false; try { ok_after = shrincs_verify(bad_after, sig, slen, pk); } @@ -152,16 +154,14 @@ int main() snprintf(lbl, sizeof(lbl), "stateful q = 1 corrupt after byte32 mlen=%zu", mlen); - write_record(f, count++, lbl, seed, mlen, msg, pk, sig, slen, - bad_after, off_after, mask_after, ok_after); + write_record(f, count++, lbl, seed, mlen, msg.data(), pk, sig, slen, + bad_after.data(), off_after, mask_after, ok_after); if (ok_after) fprintf(stderr, "Bug confirmation: stateful corruption at byte=%u (after 32) " "was not detected. mlen=%zu\n", off_after, mlen); delete[] sig; - delete[] bad_before; - delete[] bad_after; } { @@ -171,7 +171,8 @@ int main() uint32_t off_before; unsigned char mask_before; random_offset_in(0, 32, off_before, mask_before); - unsigned char* bad_before = corrupt_at(msg, mlen, off_before, mask_before); + unsigned char* bad_before_ptr = corrupt_at(msg.data(), mlen, off_before, mask_before); + std::vector bad_before = std::vector(bad_before_ptr, bad_before_ptr + mlen); bool ok_before = false; try { ok_before = shrincs_verify(bad_before, sig, SL_SIZE, pk); } @@ -180,14 +181,15 @@ int main() char lbl[128]; snprintf(lbl, sizeof(lbl), "stateless corrupt before byte32 mlen=%zu", mlen); - write_record(f, count++, lbl, seed, mlen, msg, pk, sig, SL_SIZE, - bad_before, off_before, mask_before, ok_before); + write_record(f, count++, lbl, seed, mlen, msg.data(), pk, sig, SL_SIZE, + bad_before.data(), off_before, mask_before, ok_before); if (ok_before) fprintf(stderr, "Unexpected Pass: corruption before byte 32 was ignored.\n"); uint32_t off_after; unsigned char mask_after; random_offset_in(32, mlen, off_after, mask_after); - unsigned char* bad_after = corrupt_at(msg, mlen, off_after, mask_after); + unsigned char* bad_after_ptr = corrupt_at(msg.data(), mlen, off_after, mask_after); + std::vector bad_after = std::vector(bad_after_ptr, bad_after_ptr + mlen); bool ok_after = false; try { ok_after = shrincs_verify(bad_after, sig, SL_SIZE, pk); } @@ -195,19 +197,15 @@ int main() snprintf(lbl, sizeof(lbl), "stateless corrupt after byte32 mlen=%zu", mlen); - write_record(f, count++, lbl, seed, mlen, msg, pk, sig, SL_SIZE, - bad_after, off_after, mask_after, ok_after); + write_record(f, count++, lbl, seed, mlen, msg.data(), pk, sig, SL_SIZE, + bad_after.data(), off_after, mask_after, ok_after); if (ok_after) fprintf(stderr, "Bug confirmation: stateless corruption at byte=%u (after 32) " "was not detected! mlen=%zu\n", off_after, mlen); delete[] sig; - delete[] bad_before; - delete[] bad_after; } - - delete[] msg; } return 0; diff --git a/src/fors_c.cpp b/src/fors_c.cpp index c8a89eb..f322760 100644 --- a/src/fors_c.cpp +++ b/src/fors_c.cpp @@ -45,7 +45,7 @@ namespace FORS_C { } } - uint32_t fors_grind(const unsigned char* message, const unsigned char* sk_prf, const unsigned char* pk_seed, const unsigned char* pk_root, unsigned char* adrs, uint32_t* out, unsigned char* digest_out, unsigned char* r_out) + uint32_t fors_grind(const unsigned char* message, uint32_t message_len, const unsigned char* sk_prf, const unsigned char* pk_seed, const unsigned char* pk_root, unsigned char* adrs, uint32_t* out, unsigned char* digest_out, unsigned char* r_out) { SHA256_CTX ctx; SHA256_Init(&ctx); @@ -61,13 +61,13 @@ namespace FORS_C { for (uint32_t ctr = 0; ctr < UINT32_MAX; ctr++) { - prf_msg(sk_prf, pk_seed, opt_rand, message, 32, true, ctr, R_LEN, r_out); + prf_msg(sk_prf, pk_seed, opt_rand, message, message_len, true, ctr, R_LEN, r_out); auto ctx_ = sha256_add_to_ctx(ctx, adrs, 32); ctx_ = sha256_add_to_ctx(ctx_, r_out, R_LEN); ctx_ = sha256_add_to_ctx(ctx_, pk_seed, N); ctx_ = sha256_add_to_ctx(ctx_, pk_root, N); - ctx_ = sha256_add_to_ctx(ctx_, message, 32); + ctx_ = sha256_add_to_ctx(ctx_, message, message_len); sha256_finalize_32(ctx_, res); fors_msg_to_indices(res, tmp_indices); @@ -149,14 +149,14 @@ namespace FORS_C { return auth; } - unsigned char* fors_sign(const unsigned char* message, const unsigned char* sk_seed, const unsigned char* sk_prf, const unsigned char* pk_seed, const unsigned char* pk_root, SHA256_CTX hash_ctx, unsigned char* adrs, unsigned char* digest_out) + unsigned char* fors_sign(const unsigned char* message, uint32_t message_len, const unsigned char* sk_seed, const unsigned char* sk_prf, const unsigned char* pk_seed, const unsigned char* pk_root, SHA256_CTX hash_ctx, unsigned char* adrs, unsigned char* digest_out) { unsigned char* sig = new unsigned char[FORS_SIGN_LEN]; unsigned char* r = new unsigned char[R_LEN]; uint32_t indices[K]; - fors_grind(message, sk_prf, pk_seed, pk_root, adrs, indices, digest_out, r); + fors_grind(message, message_len, sk_prf, pk_seed, pk_root, adrs, indices, digest_out, r); memcpy(sig, r, R_LEN); uint32_t offset = R_LEN; diff --git a/src/shrincs.cpp b/src/shrincs.cpp index 2fb1919..e649945 100644 --- a/src/shrincs.cpp +++ b/src/shrincs.cpp @@ -95,7 +95,7 @@ namespace SHRINCS { delete[] pk_sf; } - unsigned char* shrincs_sign_stateful(const unsigned char* message, SecretKey& sk, State& state) + unsigned char* shrincs_sign_stateful(const std::vector message, SecretKey& sk, State& state) { if (!state.valid) { throw std::runtime_error("Invalid state"); @@ -117,7 +117,7 @@ namespace SHRINCS { hash_ctx = sha256_add_to_ctx(hash_ctx, adrs, 32); hash_ctx = sha256_add_to_ctx(hash_ctx, adrs, 16); - auto uxmss_sig = UXMSS::uxmss_sign(message, sk.seed.data(), sk.prf.data(), sk.pk.seed.data(), sk.pk.root.data(), hash_ctx, adrs, q); + auto uxmss_sig = UXMSS::uxmss_sign(message.data(), message.size(), sk.seed.data(), sk.prf.data(), sk.pk.seed.data(), sk.pk.root.data(), hash_ctx, adrs, q); state.q = q; state.valid = true; @@ -135,7 +135,7 @@ namespace SHRINCS { return sig; } - unsigned char* shrincs_sign_stateless(const unsigned char* message, SecretKey& sk) + unsigned char* shrincs_sign_stateless(const std::vector message, SecretKey& sk) { unsigned char* adrs = new unsigned char[32](); @@ -149,7 +149,7 @@ namespace SHRINCS { unsigned char* digest = new unsigned char[32]; - auto fors_sig = FORS_C::fors_sign(message, sk.seed.data(), sk.prf.data(), sk.pk.seed.data(), sk.pk.root.data(), hash_ctx, adrs, digest); + auto fors_sig = FORS_C::fors_sign(message.data(), message.size(), sk.seed.data(), sk.prf.data(), sk.pk.seed.data(), sk.pk.root.data(), hash_ctx, adrs, digest); uint32_t indices[K]; FORS_C::fors_msg_to_indices(digest, indices); @@ -202,7 +202,7 @@ namespace SHRINCS { return sig; } - bool shrincs_verify_stateful(const unsigned char* message, const unsigned char* sig, uint32_t sig_len, PublicKey& pk) + bool shrincs_verify_stateful(const std::vector message, const unsigned char* sig, uint32_t sig_len, PublicKey& pk) { unsigned char* adrs = new unsigned char[32](); unsigned char* sl = new unsigned char[N]; @@ -237,7 +237,7 @@ namespace SHRINCS { { try { - auto sf = UXMSS::uxmss_pk_from_sig(uxmss_sig, uxmss_sig + WOTS_SIGN_LEN, message, pk.seed.data(), pk.root.data(), hash_ctx, adrs, last_sf_level ? HSF + j : q_raw); + auto sf = UXMSS::uxmss_pk_from_sig(uxmss_sig, uxmss_sig + WOTS_SIGN_LEN, message.data(), message.size(), pk.seed.data(), pk.root.data(), hash_ctx, adrs, last_sf_level ? HSF + j : q_raw); unsigned char* root = new unsigned char[N]; setTypeAndClear(adrs, ROOT); @@ -269,7 +269,7 @@ namespace SHRINCS { return false; } - bool shrincs_verify_stateless(const unsigned char* message, const unsigned char* sig, PublicKey& pk) + bool shrincs_verify_stateless(const std::vector message, const unsigned char* sig, PublicKey& pk) { unsigned char* adrs = new unsigned char[32](); unsigned char* sf = new unsigned char[N]; @@ -302,7 +302,7 @@ namespace SHRINCS { ctx = sha256_add_to_ctx(ctx, r, R_LEN); ctx = sha256_add_to_ctx(ctx, pk.seed.data(), N); ctx = sha256_add_to_ctx(ctx, pk.root.data(), N); - ctx = sha256_add_to_ctx(ctx, message, 32); + ctx = sha256_add_to_ctx(ctx, message.data(), message.size()); unsigned char* digest = new unsigned char[32]; sha256_finalize_32(ctx, digest); @@ -390,7 +390,7 @@ namespace SHRINCS { return is_valid; } - bool shrincs_verify(const unsigned char* message, const unsigned char* sig, uint32_t sig_len, PublicKey& pk) + bool shrincs_verify(const std::vector message, const unsigned char* sig, uint32_t sig_len, PublicKey& pk) { if (sig_len <= MAX_SF_SIZE) { diff --git a/src/uxmss.cpp b/src/uxmss.cpp index b1463dd..ef0ee3a 100644 --- a/src/uxmss.cpp +++ b/src/uxmss.cpp @@ -81,11 +81,11 @@ namespace UXMSS return auth; } - unsigned char* uxmss_pk_from_sig(const unsigned char* wots_sig, const unsigned char* auth, const unsigned char* message, const unsigned char* pk_seed, const unsigned char* pk_root, SHA256_CTX hash_ctx, unsigned char* adrs, uint32_t q) + unsigned char* uxmss_pk_from_sig(const unsigned char* wots_sig, const unsigned char* auth, const unsigned char* message, uint32_t message_len, const unsigned char* pk_seed, const unsigned char* pk_root, SHA256_CTX hash_ctx, unsigned char* adrs, uint32_t q) { setLayerAddress(adrs, 0); setTreeAddress(adrs, 0, 0); - auto node = wots_pk_from_sig(wots_sig, message, 32, pk_seed, pk_root, hash_ctx, adrs, q, true, false); + auto node = wots_pk_from_sig(wots_sig, message, message_len, pk_seed, pk_root, hash_ctx, adrs, q, true, false); setTypeAndClear(adrs, SF_TREE); if (q <= HSF) @@ -129,11 +129,11 @@ namespace UXMSS return node; } - unsigned char* uxmss_sign(const unsigned char* message, const unsigned char* sk_seed, const unsigned char* sk_prf, const unsigned char* pk_seed, const unsigned char* pk_root, SHA256_CTX hash_ctx, unsigned char* adrs, uint32_t q) + unsigned char* uxmss_sign(const unsigned char* message, uint32_t message_len, const unsigned char* sk_seed, const unsigned char* sk_prf, const unsigned char* pk_seed, const unsigned char* pk_root, SHA256_CTX hash_ctx, unsigned char* adrs, uint32_t q) { setLayerAddress(adrs, 0); setTreeAddress(adrs, 0, 0); - auto wots_sig = wots_sign(message, 32, sk_seed, sk_prf, pk_seed, pk_root, hash_ctx, adrs, q, true, false); + auto wots_sig = wots_sign(message, message_len, sk_seed, sk_prf, pk_seed, pk_root, hash_ctx, adrs, q, true, false); auto auth = uxmss_auth_path(sk_seed, hash_ctx, adrs, q); if (q > HSF) diff --git a/src/wots_c.cpp b/src/wots_c.cpp index 73efb3f..d479fd9 100644 --- a/src/wots_c.cpp +++ b/src/wots_c.cpp @@ -91,7 +91,7 @@ namespace WOTS_C return res; } - uint32_t wots_grind(const unsigned char* message, const unsigned char* pk_seed, unsigned char* adrs, uint32_t keypair, unsigned char* msg_out, bool sf) + uint32_t wots_grind(const unsigned char* message, uint32_t message_len, const unsigned char* pk_seed, unsigned char* adrs, uint32_t keypair, unsigned char* msg_out, bool sf) { SHA256_CTX ctx; SHA256_Init(&ctx); @@ -108,7 +108,7 @@ namespace WOTS_C setKeyPairAddress(adrs, keypair); ctx = sha256_add_to_ctx(ctx, adrs, 32); ctx = sha256_add_to_ctx(ctx, pk_seed, N); - ctx = sha256_add_to_ctx(ctx, message, N); + ctx = sha256_add_to_ctx(ctx, message, message_len); unsigned char res[N]; unsigned char tmp_msg[L]; @@ -135,7 +135,7 @@ namespace WOTS_C throw std::runtime_error("Unnable to find valid wots message digest"); } - bool wots_digest(const unsigned char* message, const unsigned char* pk_seed, uint32_t ctr, unsigned char* adrs, uint32_t keypair, unsigned char* msg_out, bool sf) + bool wots_digest(const unsigned char* message, uint32_t message_len, const unsigned char* pk_seed, uint32_t ctr, unsigned char* adrs, uint32_t keypair, unsigned char* msg_out, bool sf) { SHA256_CTX ctx; SHA256_Init(&ctx); @@ -152,7 +152,7 @@ namespace WOTS_C setKeyPairAddress(adrs, keypair); ctx = sha256_add_to_ctx(ctx, adrs, 32); ctx = sha256_add_to_ctx(ctx, pk_seed, N); - ctx = sha256_add_to_ctx(ctx, message, N); + ctx = sha256_add_to_ctx(ctx, message, message_len); uint32_t ctr_be = htonl(ctr); ctx = sha256_add_to_ctx(ctx, reinterpret_cast(&ctr_be), 4); @@ -212,7 +212,7 @@ namespace WOTS_C } unsigned char msg[L]; - uint32_t ctr = wots_grind(digest, pk_seed, adrs, keypair, msg, sf); + uint32_t ctr = wots_grind(digest, N, pk_seed, adrs, keypair, msg, sf); memcpy(sig, r, R_LEN); uint32_t offset = R_LEN; @@ -293,7 +293,7 @@ namespace WOTS_C } unsigned char msg[L]; - bool valid = wots_digest(digest, pk_seed, ctr, adrs, keypair, msg, sf); + bool valid = wots_digest(digest, N, pk_seed, ctr, adrs, keypair, msg, sf); if (!valid) { diff --git a/tests/bench.cpp b/tests/bench.cpp index 95a3728..c7e1fc7 100644 --- a/tests/bench.cpp +++ b/tests/bench.cpp @@ -72,7 +72,7 @@ int main() // print_hex(sk.prf.data(), N); // print_hex(sk.seed.data(), N); - unsigned char* message = new unsigned char[32](); + std::vector message = std::vector(32, 0); // hexStringToBytes("8a276ceb95d10ed7705c9e25c9987cb4b1eaf73bcae7f922058c4e46e906a778", message); diff --git a/tests/tests.cpp b/tests/tests.cpp index 0681c33..d60640a 100644 --- a/tests/tests.cpp +++ b/tests/tests.cpp @@ -4,7 +4,7 @@ using namespace SHRINCS; TEST(WOTSTest, SignVerify) { - unsigned char* message = new unsigned char[32](); + std::vector message = std::vector(32, 0); unsigned char sk_seed[N]; unsigned char sk_prf[N]; @@ -19,21 +19,20 @@ TEST(WOTSTest, SignVerify) { hash_ctx = sha256_add_to_ctx(hash_ctx, adrs, 32); hash_ctx = sha256_add_to_ctx(hash_ctx, adrs, 16); - auto signature = WOTS_C::wots_sign(message, 32, sk_seed, sk_prf, pk_seed, pk_root, hash_ctx, adrs, 10, true, false); - auto pkey = WOTS_C::wots_pk_from_sig(signature, message, 32, pk_seed, pk_root, hash_ctx, adrs, 10, true, false); + auto signature = WOTS_C::wots_sign(message.data(), message.size(), sk_seed, sk_prf, pk_seed, pk_root, hash_ctx, adrs, 10, true, false); + auto pkey = WOTS_C::wots_pk_from_sig(signature, message.data(), message.size(), pk_seed, pk_root, hash_ctx, adrs, 10, true, false); auto ex_pkey = WOTS_C::wots_pk_gen(sk_seed, hash_ctx, adrs, 10, true); EXPECT_TRUE((memcmp(pkey, ex_pkey, N) == 0)); delete[] adrs; - delete[] message; delete[] signature; delete[] pkey; delete[] ex_pkey; } TEST(XMSSTest, SignVerify) { - unsigned char* message = new unsigned char[32](); + std::vector message = std::vector(32, 0); unsigned char sk_seed[N]; unsigned char sk_prf[N]; @@ -48,21 +47,20 @@ TEST(XMSSTest, SignVerify) { hash_ctx = sha256_add_to_ctx(hash_ctx, adrs, 32); hash_ctx = sha256_add_to_ctx(hash_ctx, adrs, 16); - auto signature = XMSS::xmss_sign(message, sk_seed, sk_prf, pk_seed, pk_root, hash_ctx, adrs, H_PRIME, 2); - auto pkey = XMSS::xmss_pk_from_sig(signature, signature + WOTS_SIGN_LEN, message, pk_seed, pk_root, hash_ctx, adrs, H_PRIME, 2); + auto signature = XMSS::xmss_sign(message.data(), sk_seed, sk_prf, pk_seed, pk_root, hash_ctx, adrs, H_PRIME, 2); + auto pkey = XMSS::xmss_pk_from_sig(signature, signature + WOTS_SIGN_LEN, message.data(), pk_seed, pk_root, hash_ctx, adrs, H_PRIME, 2); auto root = XMSS::xmss_root(sk_seed, hash_ctx, adrs, H_PRIME); EXPECT_TRUE((memcmp(pkey, root, N) == 0)); delete[] adrs; - delete[] message; delete[] signature; delete[] pkey; delete[] root; } TEST(UXMSSTest, SignVerify) { - unsigned char* message = new unsigned char[32](); + std::vector message = std::vector(32, 0); unsigned char sk_seed[N]; unsigned char sk_prf[N]; @@ -77,14 +75,13 @@ TEST(UXMSSTest, SignVerify) { hash_ctx = sha256_add_to_ctx(hash_ctx, adrs, 32); hash_ctx = sha256_add_to_ctx(hash_ctx, adrs, 16); - auto signature = UXMSS::uxmss_sign(message, sk_seed, sk_prf, pk_seed, pk_root, hash_ctx, adrs, 2); - auto pkey = UXMSS::uxmss_pk_from_sig(signature, signature + WOTS_SIGN_LEN, message, pk_seed, pk_root, hash_ctx, adrs, 2); + auto signature = UXMSS::uxmss_sign(message.data(), message.size(), sk_seed, sk_prf, pk_seed, pk_root, hash_ctx, adrs, 2); + auto pkey = UXMSS::uxmss_pk_from_sig(signature, signature + WOTS_SIGN_LEN, message.data(), message.size(), pk_seed, pk_root, hash_ctx, adrs, 2); auto root = UXMSS::uxmss_root(sk_seed, hash_ctx, adrs); EXPECT_TRUE((memcmp(pkey, root, N) == 0)); delete[] adrs; - delete[] message; delete[] signature; delete[] pkey; delete[] root; @@ -110,7 +107,7 @@ TEST(SHRINCSTest, StatefulSignVerify) { shrincs_key_gen(pk, sk, state); - unsigned char* message = new unsigned char[32](); + std::vector message = std::vector(32, 0); auto signature = shrincs_sign_stateful(message, sk, state); auto is_valid = shrincs_verify(message, signature, WOTS_SIGN_LEN + state.q * N + N, pk); @@ -157,15 +154,12 @@ TEST(SHRINCSTest, StatefulSignVerify) { { signature = shrincs_sign_stateful(message, sk, state); delete[] signature; - delete[] message; EXPECT_TRUE(false); } catch(const std::exception& e) { // ... } - - delete[] message; } TEST(SHRINCSTest, StatelessSignVerify) { @@ -175,14 +169,13 @@ TEST(SHRINCSTest, StatelessSignVerify) { shrincs_key_gen(pk, sk, state); - unsigned char* message = new unsigned char[32](); + std::vector message = std::vector(32, 0); auto signature = shrincs_sign_stateless(message, sk); bool is_valid = shrincs_verify(message, signature, N + FORS_SIGN_LEN + XMSS_SIGN_LEN * D, pk); EXPECT_TRUE(is_valid); - delete[] message; delete[] signature; } diff --git a/truncation_bug_demo.txt b/truncation_bug_demo.txt index 42318c2..05d3547 100644 --- a/truncation_bug_demo.txt +++ b/truncation_bug_demo.txt @@ -8,7 +8,7 @@ seed = 15a8ad9818574431848cc37828c4a4316669010d1f83a93e92dc5a2e9be2eef mlen = 64 msg = 6825df7a8e5bc1f73cabc772b4955c9f124e253db47bfc2731c6c9ca6294991f418a1cb391a0398d9b31e628bbff6f724271f63e1cd7c9cd3575ef1321e08c71 pk = b7ece05a8f21240cd77f58eb89f430c6f130590bb854945d20477526f99c9cde -sig = 7e7de0cf7317ff88ce073acb14194ea648400df0b9b87400d82e9c487aaf3574589a16c4561155987b74de4905dca3d300000280a9a4edccb869b95a8e91b40265b9d74b3292383f09c88315c539f9af1d73c467afe87fbc9f9c547fdba6b0a84d71b43017fb79a7f2ee5d738546a5e2d7ad17e7b9aa2c79d60ee153968137e2ce8e9125671cbf9492063fbba78ee8a1bb53197a1d2f74efc142e01090604c12e114e331c89b13b446d351d989d7bbe05e88d4b4ad0f5d6229a57aaa5d42ca2ce30cf2d7369dfdd7c80d481ef867e66c22aefd556d8d2179090aea694294a65fc9568fcf057f408393495162794e2a16572f45a4706eaea89f122e17d0d49cb1c9b2dc121eba8b63949141906bc55ed7138c4fdfd6d44c9935ca99455748dd2c8ad25cf7cdd26a2eb1e5c48d159bfb52d0e6e9a6714211e7417a5bca167674c7dc09b4e9 +sig = 7e7de0cf7317ff88ce073acb14194ea68093fbb39439b3fa5310634946253a80d3b4e0cb4c496fcc7dae539a3c7150f9000002f9c9e27143f03d43d25c4e19fa069d298864552b39d47f0d048714e441a1e834aac2417dec2d6ed23e133807f697a1b205ab27cd50cb43e6f33d519f16a510b2ca835e98e6a2da543e24f6c151857654858ac484c9d4160356c162a234fbec768105ae458a87e994850da1d58c6469479a3a3ad89798dd29135ae1e702c1e181b6496211d4dc28cd5d6d266f958b42b210229d950603a42d9e5dd5d3cb71f734da47cbf0a73b9f27a1a4eb73301e70740ec17f6611706439cf3e963fc778d6cfe485884d0658edf369ca9940c9067a8a7f031aab342aa2cbb3dc57e0040e84e056f6a01f95245e6463e58a105a3fb367d3ea454462aac8a5bde6067fa2081ceb23714211e7417a5bca167674c7dc09b4e9 siglen = 324 corrupt_offset = 17 corrupt_mask = 0x4f @@ -21,12 +21,12 @@ seed = 15a8ad9818574431848cc37828c4a4316669010d1f83a93e92dc5a2e9be2eef mlen = 64 msg = 6825df7a8e5bc1f73cabc772b4955c9f124e253db47bfc2731c6c9ca6294991f418a1cb391a0398d9b31e628bbff6f724271f63e1cd7c9cd3575ef1321e08c71 pk = b7ece05a8f21240cd77f58eb89f430c6f130590bb854945d20477526f99c9cde -sig = 7e7de0cf7317ff88ce073acb14194ea648400df0b9b87400d82e9c487aaf3574589a16c4561155987b74de4905dca3d300000280a9a4edccb869b95a8e91b40265b9d74b3292383f09c88315c539f9af1d73c467afe87fbc9f9c547fdba6b0a84d71b43017fb79a7f2ee5d738546a5e2d7ad17e7b9aa2c79d60ee153968137e2ce8e9125671cbf9492063fbba78ee8a1bb53197a1d2f74efc142e01090604c12e114e331c89b13b446d351d989d7bbe05e88d4b4ad0f5d6229a57aaa5d42ca2ce30cf2d7369dfdd7c80d481ef867e66c22aefd556d8d2179090aea694294a65fc9568fcf057f408393495162794e2a16572f45a4706eaea89f122e17d0d49cb1c9b2dc121eba8b63949141906bc55ed7138c4fdfd6d44c9935ca99455748dd2c8ad25cf7cdd26a2eb1e5c48d159bfb52d0e6e9a6714211e7417a5bca167674c7dc09b4e9 +sig = 7e7de0cf7317ff88ce073acb14194ea68093fbb39439b3fa5310634946253a80d3b4e0cb4c496fcc7dae539a3c7150f9000002f9c9e27143f03d43d25c4e19fa069d298864552b39d47f0d048714e441a1e834aac2417dec2d6ed23e133807f697a1b205ab27cd50cb43e6f33d519f16a510b2ca835e98e6a2da543e24f6c151857654858ac484c9d4160356c162a234fbec768105ae458a87e994850da1d58c6469479a3a3ad89798dd29135ae1e702c1e181b6496211d4dc28cd5d6d266f958b42b210229d950603a42d9e5dd5d3cb71f734da47cbf0a73b9f27a1a4eb73301e70740ec17f6611706439cf3e963fc778d6cfe485884d0658edf369ca9940c9067a8a7f031aab342aa2cbb3dc57e0040e84e056f6a01f95245e6463e58a105a3fb367d3ea454462aac8a5bde6067fa2081ceb23714211e7417a5bca167674c7dc09b4e9 siglen = 324 corrupt_offset = 57 corrupt_mask = 0x96 msg corrupted = 6825df7a8e5bc1f73cabc772b4955c9f124e253db47bfc2731c6c9ca6294991f418a1cb391a0398d9b31e628bbff6f724271f63e1cd7c9cd35e3ef1321e08c71 -result = Pass +result = Fail count = 2 label = stateless corrupt before byte32 mlen=64 @@ -34,7 +34,7 @@ seed = 15a8ad9818574431848cc37828c4a4316669010d1f83a93e92dc5a2e9be2eef mlen = 64 msg = 6825df7a8e5bc1f73cabc772b4955c9f124e253db47bfc2731c6c9ca6294991f418a1cb391a0398d9b31e628bbff6f724271f63e1cd7c9cd3575ef1321e08c71 pk = b7ece05a8f21240cd77f58eb89f430c6f130590bb854945d20477526f99c9cde -sig = a687f0a5cf919c763f25c2bd30a84c6bb3704f0978ec790591615c64c6ff437d309292ffbe2683693bab4205a08a039cb67496915ffdf1fb8059c10648b61f75d6ae5c0a4a8401fdd708404809369c893b4639bf5f2fb277d842e7a800dc9a6a661d3bc5107190f7a700aa5bfa9ff195833b9c2e6f087ee68d1af93a069c6f402aee7e1af7a5d3b150f8f282fd0e768783e1537e2acca454a1f4135ced9613ecfe47d47f530e3a0a0bed2cae3f4b214a7436587998727405a2d0de45fcf9836736f2663af0185774336f354c71836ed990ab8098e5738c67766d9057b16eb3c0288499860e59839b552b830fe610ec7db02a1eff084b76a1a214a0a01377bcff873b6792bff776f783949356d4b6507448290baa89169021cdba4cc82246d51efb689afa8292a633f2601f7f1c3a3055065934da6e525280db257327b20a3644d2c8ec3f5b7fd3fc6bb80feb66f4a17c096f93b48f54bcbf18007423c59f8bc7e1136679a14f7f4809e3d868982376d4a486ba2f91849636aedfacc3026a18601f9605bdec71e83b536a119a44d501e2b61acd99d2d570487eb0ddea71cb98dd89d5950f910ecc3f9282693fad535af77c0d8162908228bc2ece8ddfe2a71e74a821f23ebc7ea678f59875cc8ee01cce0450e4475c3010fa5c8dc04ad578a3703986861fbc8a628ee5a0c96a350a72ff4e16a8afb74383ff686bb852b562b1b2ac91aecb583140359872f6cdcf9160dc7c78aae89d07fb85b622e5621c9816764052c3a7ac0f85ded0b60e6f97722fb94098ef0ae67c6814693b4189596e9a32148c17e0e3f1262285a34c7959aa222e3a542353b0d7a9b70d80e9db86e7c615fa2db8aac89ebded95036f47decbb9d9bf14b0da265325ed9b9397eae1eec433bd686b9fa36d89ee8ba6f48322938ebbd563e48d5c84e515343a5af2462e9850bc708c682efab8f2fd31394a1fdc1e0a681d5dafbf6402b85112af87d60ae8a00da5338e761d43d04dc94f36ee6e5c14798e605da664c488631c87d96e51d68f0f143e144a474f60528989f7acf04f51ccddb599c16e06432cb7ed288dc5833ca926e7ecd396c8162e1c9606fab54044673e71b593aec976ec925494985da9fba11705ca366dd035ca0b70cec2fe76a9a187211654e7d56791c53396894d4f64c8c1c9814a97d3417ffd4a69b600f95cf5f93b1c13385507f325d799195c4c79db2e30ae0399cc65c392ca212aabcde885e5f826e06b8b6c6ea3d7fb6af263426b2ba71e92634ccce7a11b017876c13732a5c465c920949e8061482cdba1fe2eab3dd5a1c1de11c7e1ee6ddbf7c6c7eccff6f62cc70ec797d897d5cf45ac71e554e78892fe11eb63c6e5cb3715c4100091d41912df1930fcff5cce4ec1956cfb150bfd67831039dfc57122f78bbd7b7ea4374896bbb710590ded5e9dde96d03e016f9c3509e0e69618b940dec9372d24a91d133d6d31da566333051e3df916b78c8e7c88fbba48fe6f191557b661a01d08e2400153cc392984ff1610cd8eb277ae5c1c3cbb771e91bb742fff81b9e1de43de822148fd5bd3f323e56d880519d1feb8cda152b7c9513cbe250092afa32e65781034d6d73d82de5ac4e0e416bb1daa0bf16e82694d9bfe30b402bf85bd0a69e7426d7806be1cfb842f9c8b3f62794cff8dec2cc63f9eea042602f6a08c756263249abb1d4def0f3f9b4437fe15e3d3af796499e17c21cdc60e90cfcb5603e81c35add3539d2b5629eea00234b0a61e41526dd97323c55e72213ea481d0949ef66acd0c5c1530a54902413eaa779813658d3f34f41cfcdbc10b7538855d1e396964630323bf0a02c92fdcfd4cfdf42c0d9a421dabe02d9cf8829f947c6f25c607760c551aabea542ae1cf055f537076374ef566286ea8585b0b2e52f49a6c42c54680b86d23a13cdfd5dcbf317f79704cbe7e3c9595cc7a2db4a17f69f6218d8bc1e53388e69a6c863e1314ee26fecd0402bba4507451f88817c4f3e2f4a42e7a2d02afceafc3b6a13875f5c518f22e871f97db8edfe8995319e779884ab7f149823720eaaf286fe03cb8b2c8209c017f6b174014a532fe3890a547dbb8b5ada294837f9a8c057b286c1d5ca44155a62bf16d30066ef9dcea509cae7f65682ab2c61f4763f552e4a62955150439f73034958a8766a76b09ba2d2306fc35ca59081c0349881021076d62425fa2e98141835518629715f6624ad762c1e2f143b5cd1d7b8deb49b1b2ab09ac422aeb394a945a0d55e3686eeeff0cca2f47af952069347abfa3fb8a4b0234d648a0f6a2b24805f1382f7b51a01aea7f9d32f04f2150ff2de9856983d69524b265b693fd7b6cae1eb731ba431afee133227443c885364aae723176d7e371c1a14bd04bec77b7593ef52a97e6ce4d40d54e0e00e087a8382da937cb3cf603a03c5c590309966abc4e1701efa75a9703876c81dd99f0fa16f18456cc33c220b8302d66aedcc3c6c48e710c257bb7c80c4a03257c65f860241afbceff92c0ab823476763585c637ebd58c43343b35893a510286a15a9166ba5c9e2c2baf56f4a336a2387263f90f93cfd019d04568a6e94042f421acd9d73db3982c6cbae4ba810b95d6234576e7165a694e8aea534af346a5c38f87b15f66ed15ebfd4a6a2905b62d2ea73e80d252ddd74061c2998c24c9b208fea98518c6bc54a2d3168e2eaadfa2c85368000001541340db3fd3ba49ccc168ca5a71d4a9279bf02be512b64b9901c8d8dc403bd0cd852c904210106884185f9c71d120f043d1eb12fd4a600fb70dd32e1813f3b90951202f839b1525dbf9024d829e14637e37c4e8313433e2b5015ac19d3b5ce335ad36d3035f01ae008e4608f0f16daa0ee861213e5bd783b2dcdb50bf67466b4ffff4a536c05257a86e99347b3cbd34bb95132ef3065a0d0e6d7e4fc061e54875cb80ac1ee9998a20ec5f5c1544155fc6673d216ec1b06201dbc8569e433a487fa68447c70751e7a240cd597719c3c030ceef64d4ae4c6df975d688a158e121bbd0dbc05e9670a62a3c402b806a5104f04ea6bb10bcc2ca4585853e1f786a0006f0805f3e146855d9416e96fcdf44f9732f3777a6297198f02867c33861de551a36559ddcb1e1ba289ce7560082614bcdc1ff165c3c151b17a96bd9037d8a506f4e935c8d1762a8ff2a52814eae8795b1b782fb818cd1eaf18a5b8c33378c4e8aca316292836cbb6792f933983749d6d74d8bd3e6d283ed8e0128d435db6aa2363a3de9ed7145009518ba2f555ec03e225057e51d9b8bb1a86f6438774d1938c72e085dbb9816372d04bcefbda6d3c9ed0c2faec2f5e3f2a5a70f243c95221d597e5ec3603cf54b13538be33b08fab785682c71730e2d1c6a3c749cda02722288000004fdd0123e1739cae48999408e388443b75890fe542c4a604525956f11fcb0fa087d05ec270255333b880c7bbc50fcad427107cb365e025a04502240f356004a7b9e1ae81cc58df98a3196834070fb61acb40d25c6935935c9e336106017cae7f8e67087e9e08d5979a93744af193267dcf29b98ca7de4b219abc4a2118423261255bc7c11870ae5f25689a9bff8ce7e032d0ece86420e0c030eca541a0d7b93aa8ff9846af7bca39607f5dee4e341c73dc6f31885dc068c2f66730dc0d15890f70cb78f57571e3dd136ef60e64c341cbe89f68c5656d0839b880ead0dcc906c8060d0ac6d5bacd899860d1b8504c9f8ebf5cea4ad1ab218dc12a187cf39ad406ef8251a418793fdd27d14d5013aa4e9f755c06e3b8e3cc5f500ff06728ead18c7ac2354126810a50ab6680f141e93b7a79e8d482e7845f7d2f13e29deef0928e6ae05a866da20699bffa7feae851a2cc81a233ab874db0afbb6131ec99458508cf235d4da0d7083143fb992e8635d4cdf088cc4d298dfb1ab146f9b3d07af5480c696de2ec5de426db9a7d06f631b0a96c083dcc3b9116b30296791f84e06a7cb0be86f487e8a1aea9795ffe5d2c67beba28e8ffdad83a698b11c9f46c125af26fd +sig = a687f0a5cf919c763f25c2bd30a84c6b8b03168fd117197092bbc096fc781494af345deffa00c16c6e746f0ba78dc6fe57fa08e4551ba08dec5cf14126ea8afa754815b7160773dc5b3ec3c4adb8ec17fc61f8bb1ab30f721c31a40bc95690135124bb2720a384d430c4d31441e12c042742e3ba622a90577c78d38928120e1066d90e328080204020006809a9b307112fe2cfaf543a3639ad253e02b907dcc2313f2977ed395a5170afbad7057ad163f0ae6dc21dafcead7ccd950275a81b48f02ec03b371bc329002f0cd4c61f46ea7ac2c059ef99774d9ad5748f03f197bd8bfb938f30cbda8225a8e36676836c9e5004b698c9326231390ab8424d7539e6600964e05d36dc2e054cff4eb39937990373d46e8ac25bdb8e393f42194ec3e2e54f2e2eef98a5406576a113796cfe28a042dc1729e0cd51701943b5b6e25c19da9b39a93c484e94e0aadd8870873632ab7c7310975b4d7cdd42d0d4853aa2d13708514b7711c4b07cf10d2768a6a9d936fd7950d941822e67db4ce996955bfd9401e416b8c43c1843e05d1f23b31b6bb61acd99d2d570487eb0ddea71cb98dd73607fce8eb845f8f99548e1f7659655f22723512e5dcafe70543de0c36cb14ab5f2a2e641ab412eecb448c4346b5c5795476a74beb5dd45826d045b80b77b3a312fcd98ab12d4a549809831c6fff6209b0207bf6bf11142eb1cc9b0ef5271f141be97bf289c3b1eabc75f0974863a95628a92fa890429ae71ba3931d62cd32ddc90e07ddab9a10b1ded3049cbb834a184b4102b57fc4cc8f35841eb23cf482b6aa93aed7cc939021e9b22517208cd1415b2a643cdd8688f8ea4f942960583304bc8066f78cfaae02020d446c6bf8db5358970c41b653b7732de80680d42317082fee2584f389d1df7acbf15f0ada4c4075ce3865c5b54519320bd0ed1a4b62f2e6f7aedcaa4dfb47bdcb094e144e8879365b0437da82b5bc4f369c88621400e6ac4c9ed997567f55b1226eebffb8ddeefa40904f293b00184dd7ea046d08455ce23d888d5a909894cc594f5004e8cad3a7e7b1ba1f4672bd2451e73331fcdcaa926e7ecd396c8162e1c9606fab540448af0715ec0c762db11cc95dd93915c3deadb5d70258febe19a1c16cd9b1dd39fb9d319aaaba6fe40dc527d43121843fd62e4caff09ed51e832c929aeb679ed61348c1c1d3ef781c01fcc167db8d266db6277fda88cbd014a963d79123396fabe8875d59df4ddd92538c3a70c470852bb2782f41ad044d91ede23b57060e846001c9239ff47e782198c919ba127424b54df071a7d8879547969a3cff3f3aae4c9f4b5d31ced3ca30ee122860329a7e2e5e580494b6a2e445992d2fe431ad7cc77826f81f1ebbf777b9392a817c9a8ad03eecd794cf12f22661074363fdd9c51e9bb1371b1a7102c085296e2202a158cc87e2ecb724364129d382e4eaa1e075a45bed51d04d4c0ea9805de1ff15afcf7fce0d0b7604e1d7ae6e65d306e33f4b99dc79a6264abc83770dd06a4682271e045d640c4d5e843f8ece316f0f0e2d07e7866ef3de57d1687b1db88c6e124c03744f307963642d4bdf9d06624b47b4f7747a7ebda7adb009565119bf5e2b099dc4766eaa392e765eb4afc7b1423e3360c4330903e1b7a36b81ccfe4fa206b3321241c60a50cac08665043f84b4cd54fd7b421efafb3f5c1cc25d09f9341841869bfbc584d032c5d344c14cc2d5c9a9ca3ba87f62999a6fe303a85b044b401ab4a5fe02c64ddfeaef8ec943fce9ff92320f1bbda77b9779224a43e5edafbd17618b90e7994a49e1e5912ddc709e7750c1551a35d4c02966b3739a77681802ba58f1ec849dfa643f7e6658145f6323e15f30bbe34edf4ac302a50da0b2bf89496ad5ded0a5b935d5d87f0461f349d11081f77b38d93249c8083813ce53690fce4b51e32f600d55b83ac92c0d3c5b590788249cc9577f0e6a82de4b14b21a30fe1957ce93501979938b4b637810f4eac75fb3a8a80d09cb045f46f0b0ab7bb95190397795441d792e815de41b0b65fa9297566f149823720eaaf286fe03cb8b2c8209c017f6b174014a532fe3890a547dbb8b5ada294837f9a8c057b286c1d5ca44155a62bf16d30066ef9dcea509cae7f656841adef85fd91d76605bb0f14a4c838bf950a0802ab489dbb7b5ba31d3af438c3ef77544ccaeebb448d8b2c63bbe30335d63a04fe1a88ca28c57cef98f7e2bc58c0406d8f3991dbb99d63eec312de670aca7dfda1c87cfc85e45e48667b4440c18ab81715a071e1d929603203c596a0c9e44f7043964e6da25dac303dda5c877428270717e7c1f95591f9bf768ec7aa90da41d1cd158ad68b87e23c1b8174b85835e7339c8a017792535f08bcd673ed4bbbaec62340ba7d21ca47f622a66cc52eedf1f5a81b1632f3b84d00cfde9fa32827d3643d3c747d1b0225641cf36edd3bd3b0f6ceb1a0cfaaa848ccb9a3b7d4e32dcae7a3dbbce7900bbf616322c6729af3b0a8f1cf2ef1ebd5a0b1e3538cf15d428b6e36effafc6a5b58deddddfb39f6f7923ecd56cc2c2890944bc03f8002f2ed1a30714c77f5ca21df3ea25f838acbd95d391bc39ba622f8528c229abdf68a7f56b88c2c0df45fba21c18333c1e77cb15f66ed15ebfd4a6a2905b62d2ea73e9803b76f5e851feba726dc1907e18771862406dabf18e648481ecadbae399d91000002db71173bf14420ab45d438747dd6c6def9dede2ac785589217eadc62f3d2dd9fdb87fcfe6f127e196780a7c1180f7475f11090bd4c14f9898a254e91338754f94e52c39fc81324086cc0504a0194cc308633806e5955b9a999e62849b5bf82bcc349fc69ef193939c290c322656c9ab7a3855e088e82d066d66a5a58c09fad3fb79aca244bf9cc939017da790080837b79b58b97225ceec65b3e08a91ee5f6faeeb4a3335802ab1430d52b7f9ede8bb2b81184eaef22a2e6646cf4d81140d75a4c5fbe3f08b96f6beac7379c249b4be22ac49dc78b60ed48a714376b1747d2f894587fa9692dbb1203138fc248d652fedbfea2706a22f2899b905f5c6836ebd217dde6ea0c61d31ff17044baa88feb5e923415bcf164b475b612a1fa41c9c2b19eb0352e1107160284d62fee74a43f3f65bcf081a18c89a7b9087d8224b88ad577466e7a67c88fcffdeb3b8681c4daa8e6d0ff3c85965f2e5476fb07554cfec06e225185313e108e65ef664e44ddcf1251e8dc60669170552be70cf9a5b58c3843dcffa01dbb9309b27cb714109847f3daa48b5e0e47072711b1de54fea63c1f2366e293db4f2e1e97dfc185473c969d09314417295b3a338c23b5baf4fbde657d8efe65aabd52ab740dbc4f7f8814cbc85fc5e42c257966d7ca7a4ad09a331e880000006253d9fe78b84237f9370903767e187ac0f78ae7472f0f3fa3973c604b14142690866de23e7fcdfb89e75fcd895c7c500efbde4fed4e4b0135378b01eae0545fd098c65552e46eba0407a7789c9f238495ceb92ec5831b689e0fe33caa638f180e0eb97297db67a7268b89dd3e7a2dde0e6159a28dcd11955c3463a380710768c65b8f89826dee6f29f6b32f793605f2ee690cdd4102f20332089e01986a2e66b5cff29ad789bbee70abce7adca72f8816a877414ad5adee65ec92f365d4c35f480bb0e3d3d0bebedacd32bb507e1afb979f3224edc9c913cc0dadaad3b4c0aa95e098755ae6ffe9e2a8ee015d360a1fd25f1888c93d2e4a5bba84eac8b8060fae02ce0e3046f37262c82035ca465f2ebeb6e88f7ae87bbed50bd36872fa8e0bf6ab4aa0a7352fc8757af832e46e00681ba3044f5cf46a37f33a8e07234907b01de0f4f2254e07d5556f534862d93b96850c76f13abc519dddb4898cd9706327ca99a9cd3167ad185b08817277ec8a59cf8cc4d298dfb1ab146f9b3d07af5480c696de2ec5de426db9a7d06f631b0a96c083dcc3b9116b30296791f84e06a7cb0be86f487e8a1aea9795ffe5d2c67beba28e8ffdad83a698b11c9f46c125af26fd siglen = 2856 corrupt_offset = 0 corrupt_mask = 0xc3 @@ -47,12 +47,12 @@ seed = 15a8ad9818574431848cc37828c4a4316669010d1f83a93e92dc5a2e9be2eef mlen = 64 msg = 6825df7a8e5bc1f73cabc772b4955c9f124e253db47bfc2731c6c9ca6294991f418a1cb391a0398d9b31e628bbff6f724271f63e1cd7c9cd3575ef1321e08c71 pk = b7ece05a8f21240cd77f58eb89f430c6f130590bb854945d20477526f99c9cde -sig = a687f0a5cf919c763f25c2bd30a84c6bb3704f0978ec790591615c64c6ff437d309292ffbe2683693bab4205a08a039cb67496915ffdf1fb8059c10648b61f75d6ae5c0a4a8401fdd708404809369c893b4639bf5f2fb277d842e7a800dc9a6a661d3bc5107190f7a700aa5bfa9ff195833b9c2e6f087ee68d1af93a069c6f402aee7e1af7a5d3b150f8f282fd0e768783e1537e2acca454a1f4135ced9613ecfe47d47f530e3a0a0bed2cae3f4b214a7436587998727405a2d0de45fcf9836736f2663af0185774336f354c71836ed990ab8098e5738c67766d9057b16eb3c0288499860e59839b552b830fe610ec7db02a1eff084b76a1a214a0a01377bcff873b6792bff776f783949356d4b6507448290baa89169021cdba4cc82246d51efb689afa8292a633f2601f7f1c3a3055065934da6e525280db257327b20a3644d2c8ec3f5b7fd3fc6bb80feb66f4a17c096f93b48f54bcbf18007423c59f8bc7e1136679a14f7f4809e3d868982376d4a486ba2f91849636aedfacc3026a18601f9605bdec71e83b536a119a44d501e2b61acd99d2d570487eb0ddea71cb98dd89d5950f910ecc3f9282693fad535af77c0d8162908228bc2ece8ddfe2a71e74a821f23ebc7ea678f59875cc8ee01cce0450e4475c3010fa5c8dc04ad578a3703986861fbc8a628ee5a0c96a350a72ff4e16a8afb74383ff686bb852b562b1b2ac91aecb583140359872f6cdcf9160dc7c78aae89d07fb85b622e5621c9816764052c3a7ac0f85ded0b60e6f97722fb94098ef0ae67c6814693b4189596e9a32148c17e0e3f1262285a34c7959aa222e3a542353b0d7a9b70d80e9db86e7c615fa2db8aac89ebded95036f47decbb9d9bf14b0da265325ed9b9397eae1eec433bd686b9fa36d89ee8ba6f48322938ebbd563e48d5c84e515343a5af2462e9850bc708c682efab8f2fd31394a1fdc1e0a681d5dafbf6402b85112af87d60ae8a00da5338e761d43d04dc94f36ee6e5c14798e605da664c488631c87d96e51d68f0f143e144a474f60528989f7acf04f51ccddb599c16e06432cb7ed288dc5833ca926e7ecd396c8162e1c9606fab54044673e71b593aec976ec925494985da9fba11705ca366dd035ca0b70cec2fe76a9a187211654e7d56791c53396894d4f64c8c1c9814a97d3417ffd4a69b600f95cf5f93b1c13385507f325d799195c4c79db2e30ae0399cc65c392ca212aabcde885e5f826e06b8b6c6ea3d7fb6af263426b2ba71e92634ccce7a11b017876c13732a5c465c920949e8061482cdba1fe2eab3dd5a1c1de11c7e1ee6ddbf7c6c7eccff6f62cc70ec797d897d5cf45ac71e554e78892fe11eb63c6e5cb3715c4100091d41912df1930fcff5cce4ec1956cfb150bfd67831039dfc57122f78bbd7b7ea4374896bbb710590ded5e9dde96d03e016f9c3509e0e69618b940dec9372d24a91d133d6d31da566333051e3df916b78c8e7c88fbba48fe6f191557b661a01d08e2400153cc392984ff1610cd8eb277ae5c1c3cbb771e91bb742fff81b9e1de43de822148fd5bd3f323e56d880519d1feb8cda152b7c9513cbe250092afa32e65781034d6d73d82de5ac4e0e416bb1daa0bf16e82694d9bfe30b402bf85bd0a69e7426d7806be1cfb842f9c8b3f62794cff8dec2cc63f9eea042602f6a08c756263249abb1d4def0f3f9b4437fe15e3d3af796499e17c21cdc60e90cfcb5603e81c35add3539d2b5629eea00234b0a61e41526dd97323c55e72213ea481d0949ef66acd0c5c1530a54902413eaa779813658d3f34f41cfcdbc10b7538855d1e396964630323bf0a02c92fdcfd4cfdf42c0d9a421dabe02d9cf8829f947c6f25c607760c551aabea542ae1cf055f537076374ef566286ea8585b0b2e52f49a6c42c54680b86d23a13cdfd5dcbf317f79704cbe7e3c9595cc7a2db4a17f69f6218d8bc1e53388e69a6c863e1314ee26fecd0402bba4507451f88817c4f3e2f4a42e7a2d02afceafc3b6a13875f5c518f22e871f97db8edfe8995319e779884ab7f149823720eaaf286fe03cb8b2c8209c017f6b174014a532fe3890a547dbb8b5ada294837f9a8c057b286c1d5ca44155a62bf16d30066ef9dcea509cae7f65682ab2c61f4763f552e4a62955150439f73034958a8766a76b09ba2d2306fc35ca59081c0349881021076d62425fa2e98141835518629715f6624ad762c1e2f143b5cd1d7b8deb49b1b2ab09ac422aeb394a945a0d55e3686eeeff0cca2f47af952069347abfa3fb8a4b0234d648a0f6a2b24805f1382f7b51a01aea7f9d32f04f2150ff2de9856983d69524b265b693fd7b6cae1eb731ba431afee133227443c885364aae723176d7e371c1a14bd04bec77b7593ef52a97e6ce4d40d54e0e00e087a8382da937cb3cf603a03c5c590309966abc4e1701efa75a9703876c81dd99f0fa16f18456cc33c220b8302d66aedcc3c6c48e710c257bb7c80c4a03257c65f860241afbceff92c0ab823476763585c637ebd58c43343b35893a510286a15a9166ba5c9e2c2baf56f4a336a2387263f90f93cfd019d04568a6e94042f421acd9d73db3982c6cbae4ba810b95d6234576e7165a694e8aea534af346a5c38f87b15f66ed15ebfd4a6a2905b62d2ea73e80d252ddd74061c2998c24c9b208fea98518c6bc54a2d3168e2eaadfa2c85368000001541340db3fd3ba49ccc168ca5a71d4a9279bf02be512b64b9901c8d8dc403bd0cd852c904210106884185f9c71d120f043d1eb12fd4a600fb70dd32e1813f3b90951202f839b1525dbf9024d829e14637e37c4e8313433e2b5015ac19d3b5ce335ad36d3035f01ae008e4608f0f16daa0ee861213e5bd783b2dcdb50bf67466b4ffff4a536c05257a86e99347b3cbd34bb95132ef3065a0d0e6d7e4fc061e54875cb80ac1ee9998a20ec5f5c1544155fc6673d216ec1b06201dbc8569e433a487fa68447c70751e7a240cd597719c3c030ceef64d4ae4c6df975d688a158e121bbd0dbc05e9670a62a3c402b806a5104f04ea6bb10bcc2ca4585853e1f786a0006f0805f3e146855d9416e96fcdf44f9732f3777a6297198f02867c33861de551a36559ddcb1e1ba289ce7560082614bcdc1ff165c3c151b17a96bd9037d8a506f4e935c8d1762a8ff2a52814eae8795b1b782fb818cd1eaf18a5b8c33378c4e8aca316292836cbb6792f933983749d6d74d8bd3e6d283ed8e0128d435db6aa2363a3de9ed7145009518ba2f555ec03e225057e51d9b8bb1a86f6438774d1938c72e085dbb9816372d04bcefbda6d3c9ed0c2faec2f5e3f2a5a70f243c95221d597e5ec3603cf54b13538be33b08fab785682c71730e2d1c6a3c749cda02722288000004fdd0123e1739cae48999408e388443b75890fe542c4a604525956f11fcb0fa087d05ec270255333b880c7bbc50fcad427107cb365e025a04502240f356004a7b9e1ae81cc58df98a3196834070fb61acb40d25c6935935c9e336106017cae7f8e67087e9e08d5979a93744af193267dcf29b98ca7de4b219abc4a2118423261255bc7c11870ae5f25689a9bff8ce7e032d0ece86420e0c030eca541a0d7b93aa8ff9846af7bca39607f5dee4e341c73dc6f31885dc068c2f66730dc0d15890f70cb78f57571e3dd136ef60e64c341cbe89f68c5656d0839b880ead0dcc906c8060d0ac6d5bacd899860d1b8504c9f8ebf5cea4ad1ab218dc12a187cf39ad406ef8251a418793fdd27d14d5013aa4e9f755c06e3b8e3cc5f500ff06728ead18c7ac2354126810a50ab6680f141e93b7a79e8d482e7845f7d2f13e29deef0928e6ae05a866da20699bffa7feae851a2cc81a233ab874db0afbb6131ec99458508cf235d4da0d7083143fb992e8635d4cdf088cc4d298dfb1ab146f9b3d07af5480c696de2ec5de426db9a7d06f631b0a96c083dcc3b9116b30296791f84e06a7cb0be86f487e8a1aea9795ffe5d2c67beba28e8ffdad83a698b11c9f46c125af26fd +sig = a687f0a5cf919c763f25c2bd30a84c6b8b03168fd117197092bbc096fc781494af345deffa00c16c6e746f0ba78dc6fe57fa08e4551ba08dec5cf14126ea8afa754815b7160773dc5b3ec3c4adb8ec17fc61f8bb1ab30f721c31a40bc95690135124bb2720a384d430c4d31441e12c042742e3ba622a90577c78d38928120e1066d90e328080204020006809a9b307112fe2cfaf543a3639ad253e02b907dcc2313f2977ed395a5170afbad7057ad163f0ae6dc21dafcead7ccd950275a81b48f02ec03b371bc329002f0cd4c61f46ea7ac2c059ef99774d9ad5748f03f197bd8bfb938f30cbda8225a8e36676836c9e5004b698c9326231390ab8424d7539e6600964e05d36dc2e054cff4eb39937990373d46e8ac25bdb8e393f42194ec3e2e54f2e2eef98a5406576a113796cfe28a042dc1729e0cd51701943b5b6e25c19da9b39a93c484e94e0aadd8870873632ab7c7310975b4d7cdd42d0d4853aa2d13708514b7711c4b07cf10d2768a6a9d936fd7950d941822e67db4ce996955bfd9401e416b8c43c1843e05d1f23b31b6bb61acd99d2d570487eb0ddea71cb98dd73607fce8eb845f8f99548e1f7659655f22723512e5dcafe70543de0c36cb14ab5f2a2e641ab412eecb448c4346b5c5795476a74beb5dd45826d045b80b77b3a312fcd98ab12d4a549809831c6fff6209b0207bf6bf11142eb1cc9b0ef5271f141be97bf289c3b1eabc75f0974863a95628a92fa890429ae71ba3931d62cd32ddc90e07ddab9a10b1ded3049cbb834a184b4102b57fc4cc8f35841eb23cf482b6aa93aed7cc939021e9b22517208cd1415b2a643cdd8688f8ea4f942960583304bc8066f78cfaae02020d446c6bf8db5358970c41b653b7732de80680d42317082fee2584f389d1df7acbf15f0ada4c4075ce3865c5b54519320bd0ed1a4b62f2e6f7aedcaa4dfb47bdcb094e144e8879365b0437da82b5bc4f369c88621400e6ac4c9ed997567f55b1226eebffb8ddeefa40904f293b00184dd7ea046d08455ce23d888d5a909894cc594f5004e8cad3a7e7b1ba1f4672bd2451e73331fcdcaa926e7ecd396c8162e1c9606fab540448af0715ec0c762db11cc95dd93915c3deadb5d70258febe19a1c16cd9b1dd39fb9d319aaaba6fe40dc527d43121843fd62e4caff09ed51e832c929aeb679ed61348c1c1d3ef781c01fcc167db8d266db6277fda88cbd014a963d79123396fabe8875d59df4ddd92538c3a70c470852bb2782f41ad044d91ede23b57060e846001c9239ff47e782198c919ba127424b54df071a7d8879547969a3cff3f3aae4c9f4b5d31ced3ca30ee122860329a7e2e5e580494b6a2e445992d2fe431ad7cc77826f81f1ebbf777b9392a817c9a8ad03eecd794cf12f22661074363fdd9c51e9bb1371b1a7102c085296e2202a158cc87e2ecb724364129d382e4eaa1e075a45bed51d04d4c0ea9805de1ff15afcf7fce0d0b7604e1d7ae6e65d306e33f4b99dc79a6264abc83770dd06a4682271e045d640c4d5e843f8ece316f0f0e2d07e7866ef3de57d1687b1db88c6e124c03744f307963642d4bdf9d06624b47b4f7747a7ebda7adb009565119bf5e2b099dc4766eaa392e765eb4afc7b1423e3360c4330903e1b7a36b81ccfe4fa206b3321241c60a50cac08665043f84b4cd54fd7b421efafb3f5c1cc25d09f9341841869bfbc584d032c5d344c14cc2d5c9a9ca3ba87f62999a6fe303a85b044b401ab4a5fe02c64ddfeaef8ec943fce9ff92320f1bbda77b9779224a43e5edafbd17618b90e7994a49e1e5912ddc709e7750c1551a35d4c02966b3739a77681802ba58f1ec849dfa643f7e6658145f6323e15f30bbe34edf4ac302a50da0b2bf89496ad5ded0a5b935d5d87f0461f349d11081f77b38d93249c8083813ce53690fce4b51e32f600d55b83ac92c0d3c5b590788249cc9577f0e6a82de4b14b21a30fe1957ce93501979938b4b637810f4eac75fb3a8a80d09cb045f46f0b0ab7bb95190397795441d792e815de41b0b65fa9297566f149823720eaaf286fe03cb8b2c8209c017f6b174014a532fe3890a547dbb8b5ada294837f9a8c057b286c1d5ca44155a62bf16d30066ef9dcea509cae7f656841adef85fd91d76605bb0f14a4c838bf950a0802ab489dbb7b5ba31d3af438c3ef77544ccaeebb448d8b2c63bbe30335d63a04fe1a88ca28c57cef98f7e2bc58c0406d8f3991dbb99d63eec312de670aca7dfda1c87cfc85e45e48667b4440c18ab81715a071e1d929603203c596a0c9e44f7043964e6da25dac303dda5c877428270717e7c1f95591f9bf768ec7aa90da41d1cd158ad68b87e23c1b8174b85835e7339c8a017792535f08bcd673ed4bbbaec62340ba7d21ca47f622a66cc52eedf1f5a81b1632f3b84d00cfde9fa32827d3643d3c747d1b0225641cf36edd3bd3b0f6ceb1a0cfaaa848ccb9a3b7d4e32dcae7a3dbbce7900bbf616322c6729af3b0a8f1cf2ef1ebd5a0b1e3538cf15d428b6e36effafc6a5b58deddddfb39f6f7923ecd56cc2c2890944bc03f8002f2ed1a30714c77f5ca21df3ea25f838acbd95d391bc39ba622f8528c229abdf68a7f56b88c2c0df45fba21c18333c1e77cb15f66ed15ebfd4a6a2905b62d2ea73e9803b76f5e851feba726dc1907e18771862406dabf18e648481ecadbae399d91000002db71173bf14420ab45d438747dd6c6def9dede2ac785589217eadc62f3d2dd9fdb87fcfe6f127e196780a7c1180f7475f11090bd4c14f9898a254e91338754f94e52c39fc81324086cc0504a0194cc308633806e5955b9a999e62849b5bf82bcc349fc69ef193939c290c322656c9ab7a3855e088e82d066d66a5a58c09fad3fb79aca244bf9cc939017da790080837b79b58b97225ceec65b3e08a91ee5f6faeeb4a3335802ab1430d52b7f9ede8bb2b81184eaef22a2e6646cf4d81140d75a4c5fbe3f08b96f6beac7379c249b4be22ac49dc78b60ed48a714376b1747d2f894587fa9692dbb1203138fc248d652fedbfea2706a22f2899b905f5c6836ebd217dde6ea0c61d31ff17044baa88feb5e923415bcf164b475b612a1fa41c9c2b19eb0352e1107160284d62fee74a43f3f65bcf081a18c89a7b9087d8224b88ad577466e7a67c88fcffdeb3b8681c4daa8e6d0ff3c85965f2e5476fb07554cfec06e225185313e108e65ef664e44ddcf1251e8dc60669170552be70cf9a5b58c3843dcffa01dbb9309b27cb714109847f3daa48b5e0e47072711b1de54fea63c1f2366e293db4f2e1e97dfc185473c969d09314417295b3a338c23b5baf4fbde657d8efe65aabd52ab740dbc4f7f8814cbc85fc5e42c257966d7ca7a4ad09a331e880000006253d9fe78b84237f9370903767e187ac0f78ae7472f0f3fa3973c604b14142690866de23e7fcdfb89e75fcd895c7c500efbde4fed4e4b0135378b01eae0545fd098c65552e46eba0407a7789c9f238495ceb92ec5831b689e0fe33caa638f180e0eb97297db67a7268b89dd3e7a2dde0e6159a28dcd11955c3463a380710768c65b8f89826dee6f29f6b32f793605f2ee690cdd4102f20332089e01986a2e66b5cff29ad789bbee70abce7adca72f8816a877414ad5adee65ec92f365d4c35f480bb0e3d3d0bebedacd32bb507e1afb979f3224edc9c913cc0dadaad3b4c0aa95e098755ae6ffe9e2a8ee015d360a1fd25f1888c93d2e4a5bba84eac8b8060fae02ce0e3046f37262c82035ca465f2ebeb6e88f7ae87bbed50bd36872fa8e0bf6ab4aa0a7352fc8757af832e46e00681ba3044f5cf46a37f33a8e07234907b01de0f4f2254e07d5556f534862d93b96850c76f13abc519dddb4898cd9706327ca99a9cd3167ad185b08817277ec8a59cf8cc4d298dfb1ab146f9b3d07af5480c696de2ec5de426db9a7d06f631b0a96c083dcc3b9116b30296791f84e06a7cb0be86f487e8a1aea9795ffe5d2c67beba28e8ffdad83a698b11c9f46c125af26fd siglen = 2856 corrupt_offset = 38 corrupt_mask = 0xeb msg corrupted = 6825df7a8e5bc1f73cabc772b4955c9f124e253db47bfc2731c6c9ca6294991f418a1cb391a0d28d9b31e628bbff6f724271f63e1cd7c9cd3575ef1321e08c71 -result = Pass +result = Fail count = 4 label = stateful q = 1 corrupt before byte32 mlen=80 @@ -60,7 +60,7 @@ seed = ba1a55f28b16ad7afea353b93df04ccb93d513a3c43aef24897f9280a56838e mlen = 80 msg = 521c05c196bf2c2d343c389f429ec6f7b8a48fb3b34be604979e4cf1d398fc8106f2bd21acb61b9f9c404fa26ad2ab2b05d70863d2e99531962c2140a422ee89f74310d880feac61466197c8b2b6d0b8 pk = b2bb17a1ef058137c627fd20ada19608a3aa2fa36fcc467ac1c7923406507aad -sig = 14c8ddf9755ff091cf5cbc80e03e437288598a9a8a869795bfd9b2657cbfa280a641e68d78c558a4b01bc3db1988ff65000002efdb8c00e89ead44a89cf8474e3018beb6a9b0cfd9d4e68748db08a6053a550161ed8381c0b49e87ae50ecf71146758d72ecef7dd9d0766c60223d68b99e0e4c629a5efbe599d525f10af604770574aadf65845194b56a868a3c2fffc82f2ad63ee618864e96517935d2bf5628f3827dd22630d7b28300bd2c2acd5763d12230412f0d20e5c44abbc0f030b6b42e32a44e9180fadca62c958267c7f298d4ad6c2d1f78568097a27be705ca39652d262545712b7235c5f93a3993ab981dea4231f680e0a4216803fb9341d426481c3b289021ba53ba23398e8906ae8c8e4571f41f2d30da28542dc930b48e8851fe2fe1d36c27adc0a7a8f6464aaedb67850ffaa68caed87df07d00bc6ae73a0df73e3493 +sig = 14c8ddf9755ff091cf5cbc80e03e437228b4fb8c7ed6c6b5e14055f1f690a8acf170b4e65e2739a8c646837d2be0d2210000027f858906dc1682f4952a5043cd43accc029d012ee56e9d167b0c3fd7c955576ac17ba26e90b2c7fd25f3078cbe10e506ff349766d92607a2f9dfd6c3621493134230367d9d419ab768fe30207b41e30177a8d5465fa1229e9f05ee9d837b3c1321729fd5304d9a1c6cb8d956ef34f29bc393e9d1a9bae2b5cdd30a073c844b513fc5cc8121e293ef72966046603a44a08ea98c021335249147432be99d49bd2329bd6af1bd84b1baadd86d668c2d1c1daff092ac7f53e2d0e09219582b564a234def69301a299537396ea09afff9b31baa2e13c92a70ac4d6fc5b378691f39f53d0cf780bce32c8055f038d8feeb831fc28b3f9731dca90ffb8f04c2ef4f1300bd8caed87df07d00bc6ae73a0df73e3493 siglen = 324 corrupt_offset = 19 corrupt_mask = 0x2f @@ -73,12 +73,12 @@ seed = ba1a55f28b16ad7afea353b93df04ccb93d513a3c43aef24897f9280a56838e mlen = 80 msg = 521c05c196bf2c2d343c389f429ec6f7b8a48fb3b34be604979e4cf1d398fc8106f2bd21acb61b9f9c404fa26ad2ab2b05d70863d2e99531962c2140a422ee89f74310d880feac61466197c8b2b6d0b8 pk = b2bb17a1ef058137c627fd20ada19608a3aa2fa36fcc467ac1c7923406507aad -sig = 14c8ddf9755ff091cf5cbc80e03e437288598a9a8a869795bfd9b2657cbfa280a641e68d78c558a4b01bc3db1988ff65000002efdb8c00e89ead44a89cf8474e3018beb6a9b0cfd9d4e68748db08a6053a550161ed8381c0b49e87ae50ecf71146758d72ecef7dd9d0766c60223d68b99e0e4c629a5efbe599d525f10af604770574aadf65845194b56a868a3c2fffc82f2ad63ee618864e96517935d2bf5628f3827dd22630d7b28300bd2c2acd5763d12230412f0d20e5c44abbc0f030b6b42e32a44e9180fadca62c958267c7f298d4ad6c2d1f78568097a27be705ca39652d262545712b7235c5f93a3993ab981dea4231f680e0a4216803fb9341d426481c3b289021ba53ba23398e8906ae8c8e4571f41f2d30da28542dc930b48e8851fe2fe1d36c27adc0a7a8f6464aaedb67850ffaa68caed87df07d00bc6ae73a0df73e3493 +sig = 14c8ddf9755ff091cf5cbc80e03e437228b4fb8c7ed6c6b5e14055f1f690a8acf170b4e65e2739a8c646837d2be0d2210000027f858906dc1682f4952a5043cd43accc029d012ee56e9d167b0c3fd7c955576ac17ba26e90b2c7fd25f3078cbe10e506ff349766d92607a2f9dfd6c3621493134230367d9d419ab768fe30207b41e30177a8d5465fa1229e9f05ee9d837b3c1321729fd5304d9a1c6cb8d956ef34f29bc393e9d1a9bae2b5cdd30a073c844b513fc5cc8121e293ef72966046603a44a08ea98c021335249147432be99d49bd2329bd6af1bd84b1baadd86d668c2d1c1daff092ac7f53e2d0e09219582b564a234def69301a299537396ea09afff9b31baa2e13c92a70ac4d6fc5b378691f39f53d0cf780bce32c8055f038d8feeb831fc28b3f9731dca90ffb8f04c2ef4f1300bd8caed87df07d00bc6ae73a0df73e3493 siglen = 324 corrupt_offset = 41 corrupt_mask = 0x28 msg corrupted = 521c05c196bf2c2d343c389f429ec6f7b8a48fb3b34be604979e4cf1d398fc8106f2bd21acb61b9f9c684fa26ad2ab2b05d70863d2e99531962c2140a422ee89f74310d880feac61466197c8b2b6d0b8 -result = Pass +result = Fail count = 6 label = stateless corrupt before byte32 mlen=80 @@ -86,7 +86,7 @@ seed = ba1a55f28b16ad7afea353b93df04ccb93d513a3c43aef24897f9280a56838e mlen = 80 msg = 521c05c196bf2c2d343c389f429ec6f7b8a48fb3b34be604979e4cf1d398fc8106f2bd21acb61b9f9c404fa26ad2ab2b05d70863d2e99531962c2140a422ee89f74310d880feac61466197c8b2b6d0b8 pk = b2bb17a1ef058137c627fd20ada19608a3aa2fa36fcc467ac1c7923406507aad -sig = 0d5cf0e170d3bb08aadab64bc4295ac9603d3fb02f9a8b97f8f10d9bcbf5d377abbc793733efe958b88ba9652e27ded91bb8e739464efde46e972c67f25c933fe35a39153c0dc82e4f15277528eb0e65450867051f030f96d87c8b96c86834db72831f3d85e5b0afac99fbd31641e58d1a409ae7be4e51b7ae3d62d0a0371e59f233729faf9e6a576f3a787823e3f674635c86be85d3d954d9bf7efcfce92e08f39a8c7c6d9ba55586f7c7da1990efefd515dc3e13d2ee867fd60456710adf53f0f0d1c1203bfc4db902f899f5bb5b4a64d700836201f9e7158cce15303cba318759234cd4dc5182ac0026233dedc9dfc41a87d5a1c019c991b4bb654f64506ee6b8781aaa933af4e0cd01a3b5a143a2260574ffdcd29fbe5f9504197422583ce7139c9093c6a33778e73546cbc2eded7a1934e80ae5214c73650deaf15386a34694164ac9b78cfbcce85fbd055fae16c4095f910e4db40a9f3f15a3f9237cd929ddd7d2dd4353b92b2cf6c0aa7820f28f4e5e9083df088df00de66ac14c8e7b57c112efacbb0b297a75121a8a5a6ce92493d1988edee68123b2213a99fb9ede1a37fef162ed99e002a8c737b477d8d8ef84310338ae202acbb4bebb8d3c780269f5f25cf9c6103a5a8182cb54d3e052533ac540cf31e38113634c171a4983bfcb8edfc21da0644b89a8b779d86e051ab920dbe9e3764bf5ec63fce05f8cdad485ff28daeddac94c2e9abf537062fe290926c6c37b26877de9394a9e497fdc479699e6959fc4ca0de8f87aabb5412599f130f1127e1166d52fb251804762dc23c113d04f5613d51216fbba6e7cc461c58c012d2f76a6aba6316cab59379eaec9fea9182d6feb800631b380c68f2c21e27b979d107ee2fe3e2ab740340851ec93428b496bf55ab5d5efb73bc73b60d1809bd2b8e4e5f7a6bd6d66af57c8593cfb2f1b36528defa4f74452482e648253a29900875f4422f94ad476ca915acf1c6aa2ea9daddbb28b7e4259b3fb5465f78393e03278591312c7e9ddcc347cb0e1ae2701f3060fd412be7c8a197eff11632d4b5ef7a39146faf2f939270450dea24c3a42a757dfc2a91a18d4bb662dbbbf3453c8d35f3cc1683f075d5f3aa88c5d350da54135136ab3a8153fe1e58e19bf82995f0994f5baa75c149337e8885c046bb9b32e83058efc1b4cbccb87d355e7467f5338564ae2c2fc2c288f201a3f2972fdb7b0f4882f772d882738f3b410e132a90f0d641b3009e39d373fcb29d2cc5cbe536ab3a829dd7b5460550d0e5fab6d6bc4fd8f2c5bb1f65425d31a7067cb0fe078a5a15ad90c11e944fd11ea96989e53d84c20bfe315deb6fdaf340f751742ef4569f356e91bb98e861d3b78d5612b2b23e746cd957d9a032eb9b764880d7960c6cf0c16d0415f5819f8852031f65ca4a06fd45795e8fea6fc907b1672a52dabf2e84b6d59f1eacf98917033100971972a46a50b8d4c1e13af351eafd59afd742f70798c5c82485b4e008b57ed5e5ab17c206e91674e2e666ea6031b6ce5a7d1436f149c0b96796084e6fed4bdccbdaae6d93602250168ec6a02047aff32e016fa2f6061621bf2b82cbaa13269f5dcf43819f40c9453a06d8b92ae309bbefed11120a549f83ef7017e39fb69e6aba55cd3326d65ad190207765401d76d84b1d9e6f5c485c9116382df067873e3ae0af8d6945274f3721e9a88e10c5983b7420bb93b42c1914143715153f4fa1a384777582fc79abade0d51ff4064ba267ef651016efaf59055613d378a98906c383c2d62caabb5e0a2ce78b4e61a5dbcdfe514bb0841a580c00997cabacb1e46ce4b6e437ae6e60509d501758ce6aca94a8a4b22c99a4d5871500e192f059d93e1d0a52ed1d5be78d96cc0da2a65ab92dabafe9ae3679b029db5bf84b2d74779bbbb47b3f6952cdbe8597c50406e20643077d56060b138288fd30d9ce22938be7ee614c8a663f264883e375fabe97f6b62bf9baa63f733bb60d47305150aa379559f65624d7825292b6d236ca9ceb929de9cc0d9f1af6250f8ae9ee5344a425b93808ac74fbd1149441799bbbd5d2cf9ae6982f65409fc2753ad85c9b802047fa37b34ec0c041e4fc20656842d005276ba52a4246b9996a87b6c6971d10b8e94e5cd88bb80e353f7f7775f1201577048fc9163645abee252806b71f4711526d809739e370bf5b7cec4cd628761be199fbb36734fb0e4d755640c1f10bc8f9bf563eb03d5c18ee0951cefffe62bb4640450917256a631232e8ccdeeffe7f13329f67f1dce11691f806d0c437b4c242466bb5b21b89a9998b41f9762c5489b5c2e841ca092fb6dcf4bd8c2a791f46aab3ad6f1d71ec2dbac7b3ac964aace03ec9b372cd60a3c1cfd7a92069a2a20da602bd993a8049d17e7786cdd60ad5570bb3cda0e89d9272850d6fa435e1b849ec938187c676ad6d8bf84075e50c2e233d6bb865d772a6f5541fc87c29e5b336df658d72de59d9ade00a656ccacf2497a1fb901a606223eb5e80636865caed5b849d32e31b114f206b2f2ce1ae2010f418f5b3500da3e40bfe0c544bf8a7065fb25498b1db8937178b2bee8ba935653f9fbcc4e58c2433f796525062f0ed2fe24eecf6d2268f74e543b72bf0a66ac107ddb1ec7e1d4a64d038eb7b2635b47e314c21cac17c9b9dc29b27e47c5c4a48cc9be2bfb79d190e122c5b931d7368ae576c70734e6000003380d15e406ffb2cb85a61ddbaad69a171455857483a18cfba07650b9b1e8157f74d9b864c309d9793d86747f430e7608a0c11e3b4057e28c14968e0a64a393b72f626616cb6373246b8857846c568b4be45314e69d6c76885cc6db671cba8f86a437fbfb773346a6dec1728cdf0d1debb8feb6af1e044c3ae92256528954eb82287dda842b1710f19dd2ca4ac8175557044c4e5ba334bd4560bf018b20bd946ddab686f23cdda7c5f6033cb51fff614f666b8bec114474f7c2ad64fbe2e59afcc60699d125611043a9f9db00766842f660d3871b12b885b46034b395fc70c7c554fe3d20662f1af90ece411945af061074a59e67c8ba21341aa061bc89680aabe9d9a38456fc7c74bcc62565aae3662f864d272cb503a792fce2917f88981acece124432f4e62edca02e94f031d3072637ea851e556e80eebb27071eacf8b4c46ea2a861931f2fb81c0bded344938dcf52670df8a92419f3ba1c8bf2b3b111828eb9bbfee3d8ae7fcbd4544a95114a39b7ffa20169422877aa5f4da7f40a222f10c933af22d4cd35491fd0d5dd5522934a701c758dfa1500ecdb9e5265638390589aabf40dbd48b29570221d8d54095441fe951546ef4b0639c452c9dffdab1f923b8f98bff31013c9e2707f5f5841b7f168598b359372e173cc67d2247a161a8800000126bd1c5094814cbe5ce33c4c95bc27c906cef96b32369cd279f6c9df2e838c96393b0a6a4c555f185e1120d518db98e744795a0c918b055f150e9c19a25cf430095a3490f30b1f7eab7c84c390ca8467f810a0d780c41ed0d375d077f2a59b79985834f4e2b0bc6ee82bc18441bba54db8f7e1daeb87aa96a1fe6dcfbe8824d880d1d3e7547136b1af115a5469deaaa58a54f13e426f95d5032b548a475e6c875c9e57e4b1c0bb36603533faedd4114e2af72832549892a28f814521f77cb407797a0e1bae9d525248f52d43a5d0dcf63e60284b7cc34f8fb39cd669e0e718f1a1a5d7c40d0a46017677856a57f8713ae54e04c5a3ddb9589e933fae337b0ceacb4a825a90baacd909b10b022c5de5bc51ddd35167fcae9a7963078c12dbde90f28744e35207e0b820d776feea6ed03a194f6f932dfea5c1c7e39e7787572876880b67a59589d265e503097835d9be6448b39cc5d16c176c9a1696d7c117924b20535ce0f4b89809fb32f0980bb1541297103315e7e5b3506ec6b7666073c8956d0c43652fbbd61bdb7a1bc91f4bfef4a0c685985e69fd4995363cc40771c3c6705a324a80da9fdac6d0af0e49d7761ad8f36bb29e2c9f4f2dea20f1ec5a707cb4 +sig = 0d5cf0e170d3bb08aadab64bc4295ac93faf8d7d188b316a89def420fcb4a79355685fbe456cbce5e48ddde09947f6e9729c1b6678727004c56a42342ef9e2ba6ca1d640d27a2e31f3db7b64b79f94352d806f7e23e393e739dca7228f0bc5b3442df61cdec85b92f5fe778d6884a6b041a208a24773b41d284b55e4182bb07512b6854a3ad4d5a0319970c3debee953c380dbd82f7adc9829a72debb4e01c16595067d28f9d5c32fefd8f64e0ee480a72a1b400dff8717e2c7ee708eb71e27be6317ca108b74cc7ee3a83d252dc9c333ef008d7e2744d3cbf6231234693b46f4388acd6fe3ef2567f62479c8f375324a058775052908568d723244ad39c1a173548601f6b17b7453473bec6b716649a3f01c1ebb300efde072c94a2ac849dc2fa3903b45eee099411c285be9467f790789e7107c95b8e0f9efb33f5293505025141ee6e6ae0e28bdee2ef6575bd21f60b80bd89fff512689c4284da3fbfb5dfd596c43ec7ab112e147ffd4b65d592872ed24b6fb821e45f7d6a5921989ffbe9fe4218cdb92bc1d5472db6577a2ee1d7e9e179926f3a0783da1096c0d1177a6937537dc868cac3f7f02d1a3934ed7bb6bf5287f2435dc891acadc45e079d49f8e329026c03ad991249e26558042964d47827aa4733da53b2566de541337419cf42821dd05a09feb2006f4c06200adda5ca52de85e6fae28740029e99ed63ec9eaf9cbb17992941ae209c84839f49fa9df5c9b170c964616bdfd692c2c4a50800257148746daf1f3f9b3cbab89af5b4dd14fa2eda758f9e21e2dd0e2bf72c73b187788c4139fc311b94cd6ca37849676815453bfda6ba5faa6144550bcdaf7a97020e40198443d7430b970156f968a5dd2a8a33b1c9616385c5d3acbb7c9a89a24ec3f345d3c2df57e1605a720a7d53d6c0256c73aaac8466b58650670c103b40d6870516ea19685b1cabc209a79aea0b747d5df21127221f0f5846006b5bfdc06c5154b6f50bf5da7449a2579aa7e0601ebfe3448d69a07f4bb53f97a824c1e6311af2e138fb007673722252b291b765c84a20d317b4ac40b008735d32be4c353a42a757dfc2a91a18d4bb662dbbbf341cc8ac3be3a181998e51de623b7992b086e9fa5052805f7b53e583da76d7a9c627a884b647b628f9bd27044cc13db62acc08e04d04f8efb9c5463f800b9c322c041622bd5ffeed3476b7d1ebc3231b55d9f4c6d438eef30bf04ad6237c850444e290e8eab0470765f56f8294729eda27fd3dd24a8c8e0b7e4db0ce00deecacf8416e203cd039dbaa131150e095f60fb465f27a9b9779844922fd9c8d4aaedccdead319ab0c1d3bc8819cbf0629e3f7d2582ee988a122c9c7f50017d1bf9fb4e28a0674dae44e969d32cd7b9380d6b8d5a8fda1d8f346672de9d79e858d739655f15a02ac579ccc614d8772e39f121d0d79cf5e25e3e3cdc049bcf12017ac9a98fc1f569c77c916b40a1f4d0ac5456b77f504c1e0259f42680b73fa59d174c040294ca662dab4a4a97eda18454c0a0c98614e03049648843c6492d7a9f8cfaabd28a6bc6c58443a45cf130fade916bbbe1782d337a8e1c8cfad5a77febb0f946a1f55216b717f29b782c0f1ad6330480eb6215ea72d9f1bff7c776e4ca1b2d87fe41f17446d1760e479e19734ac7ff555a07263b7dbcaf856e5b068e9d3053b1c270c5fb3d7b88c7c42ea57d887ddadf998c650e1bd9f4deb858ca2007aafe70cc0c723f88fad7f300637feb40b28e8df93db97ddc018fc381ea2a2e70d144026339ef449c6eafa8f74174724f5c8a57ab2e05226bb066336cdcaea825c97e454c941463b65ee6c3b2887dde82e930fa82ac70b5dd9ff1ecdb6cbe02ce0f7588363699067c8d1fe4219f18ced74f791d9a854fe078e3a01c6180856e45bdf820f35b5d8c952d54ba39bdca4389d83a81916bf170253dd020a6f2ec2c3f136a184d16c1e2648ab1ab8642bd39ca3577e7132bbb502dff9bf4ee9ccbc0373c8f9c2e382562beb0d3ad9ebc5f0df3185d2525242abc631fe6958991c0853fe3dad690e8d5f3121fc1072cabe8254308d92fb1a0405f5571f2b3e118bbdab3f02a06079e9aa3311684971bb0e67acbaf633e1eaf6abc21aae38317f8cbfd479acef2433cb19b64571f929d95f8175ca71f9db42edb56213e43576944526c335038f5db0771d6b2430c1afd111cdee23f07d8e25aeee129480b2577604afdca5969d2c0162bad80e737af7acfa04a3511889265d58e72348f5e92fead37e45ac7752feb23bb7cc915116f2c62fa6242ed2861dde334e2ab1de30be2bdddc27c5d980316235d6ffaa8c417537764b128e41b46f8159eaab8f999d19ab0b83676a93fbf945f4ff87dfa1eb03c0bdbf0c759857fd2bebd74c22d0c891970573913d3ff4fa69607d13c48ddb6f4be21800deec12f1c305c0ddd934ec970c691e41b3d5f00bf381f2e9b2edc17a2f37aaeda633d4aa0c262abda99cb7d4ac6958dae9374adc2becd6a51d70b8595eb8316e5a26364a6c40e123437cf612ef9749856c23f4afe79ff0d817160cbdb6c268d1646b5bc42ce98ddf4a6a6a589b6dec434b008724322b942b4d11e78efcfa8fa1217d660a68f74e543b72bf0a66ac107ddb1ec7e1d4a64d038eb7b2635b47e314c21cac17a74b11606e47a12d8406faae53c29d2c0a69e093ad64ab04170ba27c8a171c88000008958635e637ff3d474dace04d6704406612c7932052baf5ca4af944dc8d648411b0a05b44efc2cb4ce260b3361292e75e2beb6b9e45dbde1d83fb59910974a23c1243ac58005a4d721f56b2661e9acf512666eef3914012ad5cce3444b9a01e22708cdf7c09528aa3e9daa22ed2de64496bdbce83f0acbba6c68b6ba22869e93d823a772175ec50da4b78d7b942c7eb037f1600fa31c5f845e3cf0e354148eaa6ae1f8d6f713ab889f6dd16e69c5c4b78914ad8b8cfc2e84daf3890cfbb779d15c18ac3247373c43f9d796573e9f09c792d432d44f43c2db7bd8adf1fc371c9fd566d55ffa411a9de297f9a927579e35364498b59eb20fd39c6ce9329313e0ab81b4f23cedde98f4355b37971bf4d38b6a012e713b85a86f5ee2bb1d80939bc19223700d4fff7cd5231772a8a1d893219977d62383cbf841f1498d3d8f4af205d50940d41a0de1c4a15311b736747dfc51ba294d84615a85b921690a603e9375606896bad79113a13e591d4afd67038a9cbe7e311342fe2ce3a3f97828e958189e3c0594e33ce4605a4979ebbb4d855a51c00a61a64f937378d0cee96bb42a3dd9be6c04933465752be7d74abcb6c9436bf0105e1adfd9fe9571f80b1d6d4a74650c401fd924f93bb1740b764aa6e7570ad3e8563c0d44eb3b0481d1da48b2a24e90000012172f5e2630ee80b6aafbe69642f5db9ae01ca3b5d807e61a09b3f6e85e06b03433f815c815e06273824e0588b4f5ff35161af45f71e843d82e35dc055ca6c943d6a2cec3471d72c7d828f5cf40808523799873f91ac74d10165234fbb1e2ecded7e91a4aef7a8fa9525af05bae46520eb4fc76b2833fdf874dbe9383f0d5e0d69238ba19f225b882fea825e3ae1dc038dd7782a0fb1c2467b5928965456fc611dc23fa25f6440b20e75a8378a1c31688d5460c0447f216b5c66b30bb7b8d0f6915144de165b93250bf87372f1bc58b7916b5500f0df77c65ca947cba7657ec2d6f630e0db9f4484a5974c84879db0cc3af5b633fde73e4819e5788aabaaa0132150adbc47de8729a6b5358eb1ce19565f9bb24f640777aa7503baca15f257638c42936167df261733a5f2430bf33f55ab8c94e6e5ebbec8fb2ad286a1ab7541600260880f22d3cd592c345a3ec7ebef1eb3a392170fe5c9e036caa49c4b75c744209e44dcb1c028d55c500b84006b2bf85a2263cb9c6f4d7ee15c4d1777e4425eeb8710d6fcbe33624d91cee3b678962b1be589126dc3bc82b02e099b036aceb21259cb4a6f8ccdd0432fdc5610168598643a64839c38ea57d7b39e4fd0564bc1 siglen = 2856 corrupt_offset = 24 corrupt_mask = 0x02 @@ -99,166 +99,9 @@ seed = ba1a55f28b16ad7afea353b93df04ccb93d513a3c43aef24897f9280a56838e mlen = 80 msg = 521c05c196bf2c2d343c389f429ec6f7b8a48fb3b34be604979e4cf1d398fc8106f2bd21acb61b9f9c404fa26ad2ab2b05d70863d2e99531962c2140a422ee89f74310d880feac61466197c8b2b6d0b8 pk = b2bb17a1ef058137c627fd20ada19608a3aa2fa36fcc467ac1c7923406507aad -sig = 0d5cf0e170d3bb08aadab64bc4295ac9603d3fb02f9a8b97f8f10d9bcbf5d377abbc793733efe958b88ba9652e27ded91bb8e739464efde46e972c67f25c933fe35a39153c0dc82e4f15277528eb0e65450867051f030f96d87c8b96c86834db72831f3d85e5b0afac99fbd31641e58d1a409ae7be4e51b7ae3d62d0a0371e59f233729faf9e6a576f3a787823e3f674635c86be85d3d954d9bf7efcfce92e08f39a8c7c6d9ba55586f7c7da1990efefd515dc3e13d2ee867fd60456710adf53f0f0d1c1203bfc4db902f899f5bb5b4a64d700836201f9e7158cce15303cba318759234cd4dc5182ac0026233dedc9dfc41a87d5a1c019c991b4bb654f64506ee6b8781aaa933af4e0cd01a3b5a143a2260574ffdcd29fbe5f9504197422583ce7139c9093c6a33778e73546cbc2eded7a1934e80ae5214c73650deaf15386a34694164ac9b78cfbcce85fbd055fae16c4095f910e4db40a9f3f15a3f9237cd929ddd7d2dd4353b92b2cf6c0aa7820f28f4e5e9083df088df00de66ac14c8e7b57c112efacbb0b297a75121a8a5a6ce92493d1988edee68123b2213a99fb9ede1a37fef162ed99e002a8c737b477d8d8ef84310338ae202acbb4bebb8d3c780269f5f25cf9c6103a5a8182cb54d3e052533ac540cf31e38113634c171a4983bfcb8edfc21da0644b89a8b779d86e051ab920dbe9e3764bf5ec63fce05f8cdad485ff28daeddac94c2e9abf537062fe290926c6c37b26877de9394a9e497fdc479699e6959fc4ca0de8f87aabb5412599f130f1127e1166d52fb251804762dc23c113d04f5613d51216fbba6e7cc461c58c012d2f76a6aba6316cab59379eaec9fea9182d6feb800631b380c68f2c21e27b979d107ee2fe3e2ab740340851ec93428b496bf55ab5d5efb73bc73b60d1809bd2b8e4e5f7a6bd6d66af57c8593cfb2f1b36528defa4f74452482e648253a29900875f4422f94ad476ca915acf1c6aa2ea9daddbb28b7e4259b3fb5465f78393e03278591312c7e9ddcc347cb0e1ae2701f3060fd412be7c8a197eff11632d4b5ef7a39146faf2f939270450dea24c3a42a757dfc2a91a18d4bb662dbbbf3453c8d35f3cc1683f075d5f3aa88c5d350da54135136ab3a8153fe1e58e19bf82995f0994f5baa75c149337e8885c046bb9b32e83058efc1b4cbccb87d355e7467f5338564ae2c2fc2c288f201a3f2972fdb7b0f4882f772d882738f3b410e132a90f0d641b3009e39d373fcb29d2cc5cbe536ab3a829dd7b5460550d0e5fab6d6bc4fd8f2c5bb1f65425d31a7067cb0fe078a5a15ad90c11e944fd11ea96989e53d84c20bfe315deb6fdaf340f751742ef4569f356e91bb98e861d3b78d5612b2b23e746cd957d9a032eb9b764880d7960c6cf0c16d0415f5819f8852031f65ca4a06fd45795e8fea6fc907b1672a52dabf2e84b6d59f1eacf98917033100971972a46a50b8d4c1e13af351eafd59afd742f70798c5c82485b4e008b57ed5e5ab17c206e91674e2e666ea6031b6ce5a7d1436f149c0b96796084e6fed4bdccbdaae6d93602250168ec6a02047aff32e016fa2f6061621bf2b82cbaa13269f5dcf43819f40c9453a06d8b92ae309bbefed11120a549f83ef7017e39fb69e6aba55cd3326d65ad190207765401d76d84b1d9e6f5c485c9116382df067873e3ae0af8d6945274f3721e9a88e10c5983b7420bb93b42c1914143715153f4fa1a384777582fc79abade0d51ff4064ba267ef651016efaf59055613d378a98906c383c2d62caabb5e0a2ce78b4e61a5dbcdfe514bb0841a580c00997cabacb1e46ce4b6e437ae6e60509d501758ce6aca94a8a4b22c99a4d5871500e192f059d93e1d0a52ed1d5be78d96cc0da2a65ab92dabafe9ae3679b029db5bf84b2d74779bbbb47b3f6952cdbe8597c50406e20643077d56060b138288fd30d9ce22938be7ee614c8a663f264883e375fabe97f6b62bf9baa63f733bb60d47305150aa379559f65624d7825292b6d236ca9ceb929de9cc0d9f1af6250f8ae9ee5344a425b93808ac74fbd1149441799bbbd5d2cf9ae6982f65409fc2753ad85c9b802047fa37b34ec0c041e4fc20656842d005276ba52a4246b9996a87b6c6971d10b8e94e5cd88bb80e353f7f7775f1201577048fc9163645abee252806b71f4711526d809739e370bf5b7cec4cd628761be199fbb36734fb0e4d755640c1f10bc8f9bf563eb03d5c18ee0951cefffe62bb4640450917256a631232e8ccdeeffe7f13329f67f1dce11691f806d0c437b4c242466bb5b21b89a9998b41f9762c5489b5c2e841ca092fb6dcf4bd8c2a791f46aab3ad6f1d71ec2dbac7b3ac964aace03ec9b372cd60a3c1cfd7a92069a2a20da602bd993a8049d17e7786cdd60ad5570bb3cda0e89d9272850d6fa435e1b849ec938187c676ad6d8bf84075e50c2e233d6bb865d772a6f5541fc87c29e5b336df658d72de59d9ade00a656ccacf2497a1fb901a606223eb5e80636865caed5b849d32e31b114f206b2f2ce1ae2010f418f5b3500da3e40bfe0c544bf8a7065fb25498b1db8937178b2bee8ba935653f9fbcc4e58c2433f796525062f0ed2fe24eecf6d2268f74e543b72bf0a66ac107ddb1ec7e1d4a64d038eb7b2635b47e314c21cac17c9b9dc29b27e47c5c4a48cc9be2bfb79d190e122c5b931d7368ae576c70734e6000003380d15e406ffb2cb85a61ddbaad69a171455857483a18cfba07650b9b1e8157f74d9b864c309d9793d86747f430e7608a0c11e3b4057e28c14968e0a64a393b72f626616cb6373246b8857846c568b4be45314e69d6c76885cc6db671cba8f86a437fbfb773346a6dec1728cdf0d1debb8feb6af1e044c3ae92256528954eb82287dda842b1710f19dd2ca4ac8175557044c4e5ba334bd4560bf018b20bd946ddab686f23cdda7c5f6033cb51fff614f666b8bec114474f7c2ad64fbe2e59afcc60699d125611043a9f9db00766842f660d3871b12b885b46034b395fc70c7c554fe3d20662f1af90ece411945af061074a59e67c8ba21341aa061bc89680aabe9d9a38456fc7c74bcc62565aae3662f864d272cb503a792fce2917f88981acece124432f4e62edca02e94f031d3072637ea851e556e80eebb27071eacf8b4c46ea2a861931f2fb81c0bded344938dcf52670df8a92419f3ba1c8bf2b3b111828eb9bbfee3d8ae7fcbd4544a95114a39b7ffa20169422877aa5f4da7f40a222f10c933af22d4cd35491fd0d5dd5522934a701c758dfa1500ecdb9e5265638390589aabf40dbd48b29570221d8d54095441fe951546ef4b0639c452c9dffdab1f923b8f98bff31013c9e2707f5f5841b7f168598b359372e173cc67d2247a161a8800000126bd1c5094814cbe5ce33c4c95bc27c906cef96b32369cd279f6c9df2e838c96393b0a6a4c555f185e1120d518db98e744795a0c918b055f150e9c19a25cf430095a3490f30b1f7eab7c84c390ca8467f810a0d780c41ed0d375d077f2a59b79985834f4e2b0bc6ee82bc18441bba54db8f7e1daeb87aa96a1fe6dcfbe8824d880d1d3e7547136b1af115a5469deaaa58a54f13e426f95d5032b548a475e6c875c9e57e4b1c0bb36603533faedd4114e2af72832549892a28f814521f77cb407797a0e1bae9d525248f52d43a5d0dcf63e60284b7cc34f8fb39cd669e0e718f1a1a5d7c40d0a46017677856a57f8713ae54e04c5a3ddb9589e933fae337b0ceacb4a825a90baacd909b10b022c5de5bc51ddd35167fcae9a7963078c12dbde90f28744e35207e0b820d776feea6ed03a194f6f932dfea5c1c7e39e7787572876880b67a59589d265e503097835d9be6448b39cc5d16c176c9a1696d7c117924b20535ce0f4b89809fb32f0980bb1541297103315e7e5b3506ec6b7666073c8956d0c43652fbbd61bdb7a1bc91f4bfef4a0c685985e69fd4995363cc40771c3c6705a324a80da9fdac6d0af0e49d7761ad8f36bb29e2c9f4f2dea20f1ec5a707cb4 +sig = 0d5cf0e170d3bb08aadab64bc4295ac93faf8d7d188b316a89def420fcb4a79355685fbe456cbce5e48ddde09947f6e9729c1b6678727004c56a42342ef9e2ba6ca1d640d27a2e31f3db7b64b79f94352d806f7e23e393e739dca7228f0bc5b3442df61cdec85b92f5fe778d6884a6b041a208a24773b41d284b55e4182bb07512b6854a3ad4d5a0319970c3debee953c380dbd82f7adc9829a72debb4e01c16595067d28f9d5c32fefd8f64e0ee480a72a1b400dff8717e2c7ee708eb71e27be6317ca108b74cc7ee3a83d252dc9c333ef008d7e2744d3cbf6231234693b46f4388acd6fe3ef2567f62479c8f375324a058775052908568d723244ad39c1a173548601f6b17b7453473bec6b716649a3f01c1ebb300efde072c94a2ac849dc2fa3903b45eee099411c285be9467f790789e7107c95b8e0f9efb33f5293505025141ee6e6ae0e28bdee2ef6575bd21f60b80bd89fff512689c4284da3fbfb5dfd596c43ec7ab112e147ffd4b65d592872ed24b6fb821e45f7d6a5921989ffbe9fe4218cdb92bc1d5472db6577a2ee1d7e9e179926f3a0783da1096c0d1177a6937537dc868cac3f7f02d1a3934ed7bb6bf5287f2435dc891acadc45e079d49f8e329026c03ad991249e26558042964d47827aa4733da53b2566de541337419cf42821dd05a09feb2006f4c06200adda5ca52de85e6fae28740029e99ed63ec9eaf9cbb17992941ae209c84839f49fa9df5c9b170c964616bdfd692c2c4a50800257148746daf1f3f9b3cbab89af5b4dd14fa2eda758f9e21e2dd0e2bf72c73b187788c4139fc311b94cd6ca37849676815453bfda6ba5faa6144550bcdaf7a97020e40198443d7430b970156f968a5dd2a8a33b1c9616385c5d3acbb7c9a89a24ec3f345d3c2df57e1605a720a7d53d6c0256c73aaac8466b58650670c103b40d6870516ea19685b1cabc209a79aea0b747d5df21127221f0f5846006b5bfdc06c5154b6f50bf5da7449a2579aa7e0601ebfe3448d69a07f4bb53f97a824c1e6311af2e138fb007673722252b291b765c84a20d317b4ac40b008735d32be4c353a42a757dfc2a91a18d4bb662dbbbf341cc8ac3be3a181998e51de623b7992b086e9fa5052805f7b53e583da76d7a9c627a884b647b628f9bd27044cc13db62acc08e04d04f8efb9c5463f800b9c322c041622bd5ffeed3476b7d1ebc3231b55d9f4c6d438eef30bf04ad6237c850444e290e8eab0470765f56f8294729eda27fd3dd24a8c8e0b7e4db0ce00deecacf8416e203cd039dbaa131150e095f60fb465f27a9b9779844922fd9c8d4aaedccdead319ab0c1d3bc8819cbf0629e3f7d2582ee988a122c9c7f50017d1bf9fb4e28a0674dae44e969d32cd7b9380d6b8d5a8fda1d8f346672de9d79e858d739655f15a02ac579ccc614d8772e39f121d0d79cf5e25e3e3cdc049bcf12017ac9a98fc1f569c77c916b40a1f4d0ac5456b77f504c1e0259f42680b73fa59d174c040294ca662dab4a4a97eda18454c0a0c98614e03049648843c6492d7a9f8cfaabd28a6bc6c58443a45cf130fade916bbbe1782d337a8e1c8cfad5a77febb0f946a1f55216b717f29b782c0f1ad6330480eb6215ea72d9f1bff7c776e4ca1b2d87fe41f17446d1760e479e19734ac7ff555a07263b7dbcaf856e5b068e9d3053b1c270c5fb3d7b88c7c42ea57d887ddadf998c650e1bd9f4deb858ca2007aafe70cc0c723f88fad7f300637feb40b28e8df93db97ddc018fc381ea2a2e70d144026339ef449c6eafa8f74174724f5c8a57ab2e05226bb066336cdcaea825c97e454c941463b65ee6c3b2887dde82e930fa82ac70b5dd9ff1ecdb6cbe02ce0f7588363699067c8d1fe4219f18ced74f791d9a854fe078e3a01c6180856e45bdf820f35b5d8c952d54ba39bdca4389d83a81916bf170253dd020a6f2ec2c3f136a184d16c1e2648ab1ab8642bd39ca3577e7132bbb502dff9bf4ee9ccbc0373c8f9c2e382562beb0d3ad9ebc5f0df3185d2525242abc631fe6958991c0853fe3dad690e8d5f3121fc1072cabe8254308d92fb1a0405f5571f2b3e118bbdab3f02a06079e9aa3311684971bb0e67acbaf633e1eaf6abc21aae38317f8cbfd479acef2433cb19b64571f929d95f8175ca71f9db42edb56213e43576944526c335038f5db0771d6b2430c1afd111cdee23f07d8e25aeee129480b2577604afdca5969d2c0162bad80e737af7acfa04a3511889265d58e72348f5e92fead37e45ac7752feb23bb7cc915116f2c62fa6242ed2861dde334e2ab1de30be2bdddc27c5d980316235d6ffaa8c417537764b128e41b46f8159eaab8f999d19ab0b83676a93fbf945f4ff87dfa1eb03c0bdbf0c759857fd2bebd74c22d0c891970573913d3ff4fa69607d13c48ddb6f4be21800deec12f1c305c0ddd934ec970c691e41b3d5f00bf381f2e9b2edc17a2f37aaeda633d4aa0c262abda99cb7d4ac6958dae9374adc2becd6a51d70b8595eb8316e5a26364a6c40e123437cf612ef9749856c23f4afe79ff0d817160cbdb6c268d1646b5bc42ce98ddf4a6a6a589b6dec434b008724322b942b4d11e78efcfa8fa1217d660a68f74e543b72bf0a66ac107ddb1ec7e1d4a64d038eb7b2635b47e314c21cac17a74b11606e47a12d8406faae53c29d2c0a69e093ad64ab04170ba27c8a171c88000008958635e637ff3d474dace04d6704406612c7932052baf5ca4af944dc8d648411b0a05b44efc2cb4ce260b3361292e75e2beb6b9e45dbde1d83fb59910974a23c1243ac58005a4d721f56b2661e9acf512666eef3914012ad5cce3444b9a01e22708cdf7c09528aa3e9daa22ed2de64496bdbce83f0acbba6c68b6ba22869e93d823a772175ec50da4b78d7b942c7eb037f1600fa31c5f845e3cf0e354148eaa6ae1f8d6f713ab889f6dd16e69c5c4b78914ad8b8cfc2e84daf3890cfbb779d15c18ac3247373c43f9d796573e9f09c792d432d44f43c2db7bd8adf1fc371c9fd566d55ffa411a9de297f9a927579e35364498b59eb20fd39c6ce9329313e0ab81b4f23cedde98f4355b37971bf4d38b6a012e713b85a86f5ee2bb1d80939bc19223700d4fff7cd5231772a8a1d893219977d62383cbf841f1498d3d8f4af205d50940d41a0de1c4a15311b736747dfc51ba294d84615a85b921690a603e9375606896bad79113a13e591d4afd67038a9cbe7e311342fe2ce3a3f97828e958189e3c0594e33ce4605a4979ebbb4d855a51c00a61a64f937378d0cee96bb42a3dd9be6c04933465752be7d74abcb6c9436bf0105e1adfd9fe9571f80b1d6d4a74650c401fd924f93bb1740b764aa6e7570ad3e8563c0d44eb3b0481d1da48b2a24e90000012172f5e2630ee80b6aafbe69642f5db9ae01ca3b5d807e61a09b3f6e85e06b03433f815c815e06273824e0588b4f5ff35161af45f71e843d82e35dc055ca6c943d6a2cec3471d72c7d828f5cf40808523799873f91ac74d10165234fbb1e2ecded7e91a4aef7a8fa9525af05bae46520eb4fc76b2833fdf874dbe9383f0d5e0d69238ba19f225b882fea825e3ae1dc038dd7782a0fb1c2467b5928965456fc611dc23fa25f6440b20e75a8378a1c31688d5460c0447f216b5c66b30bb7b8d0f6915144de165b93250bf87372f1bc58b7916b5500f0df77c65ca947cba7657ec2d6f630e0db9f4484a5974c84879db0cc3af5b633fde73e4819e5788aabaaa0132150adbc47de8729a6b5358eb1ce19565f9bb24f640777aa7503baca15f257638c42936167df261733a5f2430bf33f55ab8c94e6e5ebbec8fb2ad286a1ab7541600260880f22d3cd592c345a3ec7ebef1eb3a392170fe5c9e036caa49c4b75c744209e44dcb1c028d55c500b84006b2bf85a2263cb9c6f4d7ee15c4d1777e4425eeb8710d6fcbe33624d91cee3b678962b1be589126dc3bc82b02e099b036aceb21259cb4a6f8ccdd0432fdc5610168598643a64839c38ea57d7b39e4fd0564bc1 siglen = 2856 corrupt_offset = 69 corrupt_mask = 0xd3 msg corrupted = 521c05c196bf2c2d343c389f429ec6f7b8a48fb3b34be604979e4cf1d398fc8106f2bd21acb61b9f9c404fa26ad2ab2b05d70863d2e99531962c2140a422ee89f74310d8802dac61466197c8b2b6d0b8 -result = Pass - -count = 8 -label = stateful q = 1 corrupt before byte32 mlen=96 -seed = 0792133f93aee979c7a5048b91a6c41321351194aa001d5c7a98dee5b890ed26a6172cda54ea50720fe6d54b383aa20d -mlen = 96 -msg = 386b1267f778307cb26e2e74cddea995d11baec129365a9e0627722699ad787fc0c0d1f8102c83bd81316a004eab9f11ea38911eb474f33ace51c90cf19d58b67a1e61fc3896b890e2cae7e124d950a9b6e3f85625f916c3cd6f08c35c869c7d -pk = a6172cda54ea50720fe6d54b383aa20d9f6221e9493f228937a69621722d3755 -sig = 23b66f08dbd89ff98ce57edb2d34ac7f9a966197025343a7c73d268a02fefd181789ddb407a11b732d7b4f65e755e89900000365f73dd3ac5ebc458e08e0d7d3b5362bdc098f90b33c15b2257b2fb5558609360f6b4c7cb3a26992e0f4524b4d44fed13753d8e573567edb1ba8d01ea6c3ca1aa2455e73fa039ccfb37c4f70373d62a3ad41355f7a3bfb8789a702f7a246ac6e24573522589d58e9f2e238da4fbcb3a09a3537b59556d61bc4b8f59d1ce0602608744d2dc7729695242439cd265bcf903a161d19f5293571b4e60a8c5c7967b7598f75ad3e07971c6ffa988ca2aeca30eaeed981b5bb441805ccf7162dcf74ff626f2d8b376c90fc2984c478e00c99030aa984d01f0ea777c0f64ed813fff86debaf5eadf24b11bce6dd24e8ff56c01d3c242d6d2ad1879cbe0d0854f836d15002b2a8926f7dec62ebfd5441399a80b197 -siglen = 324 -corrupt_offset = 2 -corrupt_mask = 0x5f -msg corrupted = 386b4d67f778307cb26e2e74cddea995d11baec129365a9e0627722699ad787fc0c0d1f8102c83bd81316a004eab9f11ea38911eb474f33ace51c90cf19d58b67a1e61fc3896b890e2cae7e124d950a9b6e3f85625f916c3cd6f08c35c869c7d -result = Fail - -count = 9 -label = stateful q = 1 corrupt after byte32 mlen=96 -seed = 0792133f93aee979c7a5048b91a6c41321351194aa001d5c7a98dee5b890ed26a6172cda54ea50720fe6d54b383aa20d -mlen = 96 -msg = 386b1267f778307cb26e2e74cddea995d11baec129365a9e0627722699ad787fc0c0d1f8102c83bd81316a004eab9f11ea38911eb474f33ace51c90cf19d58b67a1e61fc3896b890e2cae7e124d950a9b6e3f85625f916c3cd6f08c35c869c7d -pk = a6172cda54ea50720fe6d54b383aa20d9f6221e9493f228937a69621722d3755 -sig = 23b66f08dbd89ff98ce57edb2d34ac7f9a966197025343a7c73d268a02fefd181789ddb407a11b732d7b4f65e755e89900000365f73dd3ac5ebc458e08e0d7d3b5362bdc098f90b33c15b2257b2fb5558609360f6b4c7cb3a26992e0f4524b4d44fed13753d8e573567edb1ba8d01ea6c3ca1aa2455e73fa039ccfb37c4f70373d62a3ad41355f7a3bfb8789a702f7a246ac6e24573522589d58e9f2e238da4fbcb3a09a3537b59556d61bc4b8f59d1ce0602608744d2dc7729695242439cd265bcf903a161d19f5293571b4e60a8c5c7967b7598f75ad3e07971c6ffa988ca2aeca30eaeed981b5bb441805ccf7162dcf74ff626f2d8b376c90fc2984c478e00c99030aa984d01f0ea777c0f64ed813fff86debaf5eadf24b11bce6dd24e8ff56c01d3c242d6d2ad1879cbe0d0854f836d15002b2a8926f7dec62ebfd5441399a80b197 -siglen = 324 -corrupt_offset = 64 -corrupt_mask = 0x02 -msg corrupted = 386b1267f778307cb26e2e74cddea995d11baec129365a9e0627722699ad787fc0c0d1f8102c83bd81316a004eab9f11ea38911eb474f33ace51c90cf19d58b6781e61fc3896b890e2cae7e124d950a9b6e3f85625f916c3cd6f08c35c869c7d -result = Pass - -count = 10 -label = stateless corrupt before byte32 mlen=96 -seed = 0792133f93aee979c7a5048b91a6c41321351194aa001d5c7a98dee5b890ed26a6172cda54ea50720fe6d54b383aa20d -mlen = 96 -msg = 386b1267f778307cb26e2e74cddea995d11baec129365a9e0627722699ad787fc0c0d1f8102c83bd81316a004eab9f11ea38911eb474f33ace51c90cf19d58b67a1e61fc3896b890e2cae7e124d950a9b6e3f85625f916c3cd6f08c35c869c7d -pk = a6172cda54ea50720fe6d54b383aa20d9f6221e9493f228937a69621722d3755 -sig = 2593d7b1ee01d6fab32152790f03902442e0e2a749c31cd24e778479975db34fd395aafe03a930b36460c288d58e1ca796f3af9ffc36966fb296c70f29c4ef8abffb535c79f27137277f92cfb14cacca6f033aab7d07cb656361a922a44e0d5a30706b4bd27e460cbbb23d336c51e4b8cfb7517f85670e8d7c8b57894b05a2a13df3fd7469908cf9cb8dcd502245dd34f03414bbb382ac0df7931917b6d2adf9a7e2296402484333c0e549447ae8d9de18418190f06c8caa57323e98fda77e963bad1f880952d342e321a2f7f551eb9854fff7129a5e1824187497efd67ad6b5cb48732b5e4ed688ed8b58587aa14de59fc3025b969f3cb10cf2e9ca6ad5ddd4ef0171d35e4d1f45144a414d52c6a22926ba802826f4706b1929af60e7a1298207cf4956c942c01ad4d77cb59337342a95a85b26663baee6d377707e7407479750877ab2ea6bab0d749ceba45a1c0e16b72d35a66bb25121869045de390028511032dc713bb3bd1019ea9d2224b082743c450e50dee60f9d2ed58222efb24a30c9b97a361386b2724ff0a9775d26eab698effa3a6e0cf16efa9aa7aeedd1fe71a496db74e6572e7c65a6e4783e424388a2ff597fde17b40cbddf20196a43c4072feb0daa0be9aaee9346963d7fe0c45dfa2b48b15428d6bac9106827cbffe2f87a72288fb3f23cfe72803d50d7d72efda7d38e1ce1954d02ae2690ad29bd73ef5ae0601b63735361511ea9d5dc2bc7df4b1fdefd8eef9706ca7860f2154ec06e1554ee718134ee33b54ec2d2d5b7bbd615ebcddf58ea71de4ee2ca90738ed06484d8993e3a3c7d578b6f4b15f7bef18f8af5e917d82162cb1a32c7e3916a349ea68d6595cca27859a0cdd10003f8b46a1b32c31a03005adbe605218548398cb7f22fba75e5aa6ffe3435bafc32fcf72e546ceb15e5c04934a2f4deadd158ece1b2107b43664044d09b0405e7587b35ac52e6c061a4fcd0571a1d903b188e4c433debc97ff7c0eb9a50f1cf3028db5dd74bc50312681d25d50f6dbe42a9a74b76a52cd8b99626e5e0f703bed196c82923f294b5bf6e4f70b4ce52ccb85ac92f366e2298618f3aa6f827c9392a36229b2e854df18a903885018d907e07ee46982e1cd98e68e752ce87682d6bbbc5d7123afcc6fdc241b5e33b5e55e007c9e602756f016780b7ef3aff44e6bf2b0e5703a106df5e78dc0792f66bfcfa46a6ea5a20e2c001dbe06a15de101d6b4f30e5fc1f1243fde229e43d9225e340c1a8955dd918e392a1165803ec0477559be998d0492e72e233052731a116e46fbaf642476041ed25a6c198dd5f6a494a51d725203b88ee99a4dc84375baba3188c0dad2af8449e30846db63d8c5af13338257a15e5991ec5d48437b849a67d2ab285442b33252722073072cdffb22071d2e0b872380c809ee6e399de2c47d21fc80a4f664b76423537fefe182c2434321669e860e551c8a11644095732678e49313a13cf90cd1626cb99a063599675d87d419b40cb6acc72b2366c850c5fcd70d91b0b0e7fc2b9097750c4edb3b30a3fd4f55dcc6c9f26de85171ed24244f74e90815f9d7ef9c1a5206e3d92f3c240021f0234c5daa6c4c6a08d74bad5e6db5cd01598bad01f16ee2c3feaf83b25be3afe447400c76c2eaa1af818f82d28613fae7c778bad2814879e639c8f10a93c52daa2df607a552487166277f80ee5e8cc0c1e556450b072a951ca60aa694b1ed78dbc35b1f7b6dd10e89dc885c92445fbae3a9c8de2840a1fb3dd4e6deab87365a715ee4d9578b1356277503ef2400ef66664cc8e0f2231b3dcaeed58b85d96c0e15d3499b0ededf049bc1c6a947067793b45e17fceab33f927aa726ff2b32d1938a2ff92d4355a9a542aa557e31ac5886a172f4033846645f1cc7ce4e6744e2f3fe757a097936c0f5a3ba9f33fbd404b537081f0c69cef4176974a1c5a7e3e477ddc61963899218ce3a5f4a823a41136e42f053f024ed4cbf50d666accba373547879a277c3c8d25f775fc3a5997a80a58162fe70508fb307879464f74b72c2893e3d3bab70ec0dc5841f409c67844b59289e4c33ff998c0abe64bd1d378dbbca2284f8a3469ff51233fe6405a7f8cd706548374a1045ddf3b04dac3a43e22255b3e61cf6ff83a823037c5341225edf6e0460c7b36eb8e1e9453502261d29856607bd0106fa7951f7acbaededab5f1b077cd8dee8bb34e7dda2d83c54c91069f88d1a74aed7620e26e4dc707d28504d4515cda9215c0add369742c43fafc2f0504c4c81a1b59f5503b42e967c938a0a456a2f4d2ca5805b9b6679f397c685502eae1e9ffde1251a73df1bac1a2e409ac2bda41f9a4e309d3ff084031a96c836747b068c44776eb8a6b38124969d2e3f09aa671b35dc465b308732c13347bd3c480f26dd2747154530c4d946dfc1f1ed02c4ddbb367ce0f4f3836cbf36d8239d461f144c683b2da7b42d47acc7e71746e7994ad6bee4e34d19d2dea62d49c284a69bd0f611f354046a2bb5cee6fee179691d33c0c86d48019de61a433a78aa1fc8d1d6d198a6499820cc371625de4110198555e3f8f12feea83e1b9e779025c3d1305c4f9f6b58bd58728a2175349fd0967850e07c65ec8fe4d6e7621390a56145f6b201e15fe3daaba7186e123f6c68a0caf9ea160b72ce37eaff625935934b87b357a9a222b6f960e58bc84d36fe145196f54a0e40000006f276701b5305dd165ad862e03f3f38a059a97e58048cfcfee63e968dbf96c27ab8ac1ae8b77722dc50a610e074079c3c3c005501cb9366c5b82b899fdd6710401b78152f54a4188a6eac957278dd4c4c037ecb399df21ffd3f9e67c9f78eb8bfa47c3942ba818867fd571c447ae48fa615b17f664564453b977b081ceb703bad5775357130b9255972f83209e86f7fab110dac72afb6ef589a953be7ea015de6e4209d239c5c47d1e915adc8e0828f285b3a065db9d66c4f42f8f9bcb19ca589a405f4fec8796573b0417632e032ce8e556c432a06a8e687377def029462dc96460dad54f85fdc021f89d0383c2593f6702cde751a6e06d7a86cf9134b73291594da8b73ea76d885886fc4556d855688ea21ad6cfc4771d5d801b6507883e06a694a8a63c7269cba77184c5f9a1560e336155b8f18afc75482a06bea67eaab2ad30eed0ac46fd8a22380fe8f3c63ef17846ed5ec4bb37695bf8c1ccd45ec11aa77d7822bd5d0e753e32c731ed484fc80cf6693f93c82f9c66bea9f2ba673aa6752ff58291637c6a5ff2ca03ccc74e783a37531508276777b11d24b8acda25b35aeba28e88bd970ef08c9224b2bfa78a494df106e1551a1c4eed9ecbbcfcce149e4559e8522b39f523e1601cb822c8322de1b7d2d325571144a6a1dd496e02e508000000da4b4d75895593e58233c881c9d9b2ab911ba3829da0dd2d59ac13d704b71b125b6cf2a8bc500e60bdfd41ac7d372eabc8173bd908b05c40b51d3f329ce8d6be72732ae0260f07c66be02da76ad599560cfff98fe516d751fb030b1b81ead43dabe66839f95cf99749b0e74ee1f37227993949a3c71045c67b7567b0502929d8ababcc85189261eb04b785bc7fbae386f03e5f14c508e554404934d4634ca1f4356e38f930143ea8232b46b05c555ece04b0c182ae69102a63c1811788cc692e7c84b8577398a7f87295e7cfd1eec70f9cfb13361c545b6dd0ffa034d5c98e0daf029c3ea2d61a332a228ad05774664ec2df4337a3b34e02c5fa35ac341544e15ba74a2b59d72f93c8891d8c1c66d95ab0ba4caf37ec01776f8e11ae716c743e3c860de285d345a9c48eb2260f5d2c41c30bd729ad70a480f379b16d52927787083851f9fc138d6b25d963525177ba0d30d9d061257c0fac5f05b29f11c35a591e24f3c0dd4027b8d22a53aed0e895b8e93053d1e365e16725204f1c361fd68efd23f8d26ce54a4e96ad2ea30dc48f04b07cdfe704167416407c0144d96f75ebc4517f3205b5404dd20fde876ae17ac5ee52ba8b92ed47dcabb2e56db3f91cf89d -siglen = 2856 -corrupt_offset = 10 -corrupt_mask = 0xe3 -msg corrupted = 386b1267f778307cb26ecd74cddea995d11baec129365a9e0627722699ad787fc0c0d1f8102c83bd81316a004eab9f11ea38911eb474f33ace51c90cf19d58b67a1e61fc3896b890e2cae7e124d950a9b6e3f85625f916c3cd6f08c35c869c7d -result = Fail - -count = 11 -label = stateless corrupt after byte32 mlen=96 -seed = 0792133f93aee979c7a5048b91a6c41321351194aa001d5c7a98dee5b890ed26a6172cda54ea50720fe6d54b383aa20d -mlen = 96 -msg = 386b1267f778307cb26e2e74cddea995d11baec129365a9e0627722699ad787fc0c0d1f8102c83bd81316a004eab9f11ea38911eb474f33ace51c90cf19d58b67a1e61fc3896b890e2cae7e124d950a9b6e3f85625f916c3cd6f08c35c869c7d -pk = a6172cda54ea50720fe6d54b383aa20d9f6221e9493f228937a69621722d3755 -sig = 2593d7b1ee01d6fab32152790f03902442e0e2a749c31cd24e778479975db34fd395aafe03a930b36460c288d58e1ca796f3af9ffc36966fb296c70f29c4ef8abffb535c79f27137277f92cfb14cacca6f033aab7d07cb656361a922a44e0d5a30706b4bd27e460cbbb23d336c51e4b8cfb7517f85670e8d7c8b57894b05a2a13df3fd7469908cf9cb8dcd502245dd34f03414bbb382ac0df7931917b6d2adf9a7e2296402484333c0e549447ae8d9de18418190f06c8caa57323e98fda77e963bad1f880952d342e321a2f7f551eb9854fff7129a5e1824187497efd67ad6b5cb48732b5e4ed688ed8b58587aa14de59fc3025b969f3cb10cf2e9ca6ad5ddd4ef0171d35e4d1f45144a414d52c6a22926ba802826f4706b1929af60e7a1298207cf4956c942c01ad4d77cb59337342a95a85b26663baee6d377707e7407479750877ab2ea6bab0d749ceba45a1c0e16b72d35a66bb25121869045de390028511032dc713bb3bd1019ea9d2224b082743c450e50dee60f9d2ed58222efb24a30c9b97a361386b2724ff0a9775d26eab698effa3a6e0cf16efa9aa7aeedd1fe71a496db74e6572e7c65a6e4783e424388a2ff597fde17b40cbddf20196a43c4072feb0daa0be9aaee9346963d7fe0c45dfa2b48b15428d6bac9106827cbffe2f87a72288fb3f23cfe72803d50d7d72efda7d38e1ce1954d02ae2690ad29bd73ef5ae0601b63735361511ea9d5dc2bc7df4b1fdefd8eef9706ca7860f2154ec06e1554ee718134ee33b54ec2d2d5b7bbd615ebcddf58ea71de4ee2ca90738ed06484d8993e3a3c7d578b6f4b15f7bef18f8af5e917d82162cb1a32c7e3916a349ea68d6595cca27859a0cdd10003f8b46a1b32c31a03005adbe605218548398cb7f22fba75e5aa6ffe3435bafc32fcf72e546ceb15e5c04934a2f4deadd158ece1b2107b43664044d09b0405e7587b35ac52e6c061a4fcd0571a1d903b188e4c433debc97ff7c0eb9a50f1cf3028db5dd74bc50312681d25d50f6dbe42a9a74b76a52cd8b99626e5e0f703bed196c82923f294b5bf6e4f70b4ce52ccb85ac92f366e2298618f3aa6f827c9392a36229b2e854df18a903885018d907e07ee46982e1cd98e68e752ce87682d6bbbc5d7123afcc6fdc241b5e33b5e55e007c9e602756f016780b7ef3aff44e6bf2b0e5703a106df5e78dc0792f66bfcfa46a6ea5a20e2c001dbe06a15de101d6b4f30e5fc1f1243fde229e43d9225e340c1a8955dd918e392a1165803ec0477559be998d0492e72e233052731a116e46fbaf642476041ed25a6c198dd5f6a494a51d725203b88ee99a4dc84375baba3188c0dad2af8449e30846db63d8c5af13338257a15e5991ec5d48437b849a67d2ab285442b33252722073072cdffb22071d2e0b872380c809ee6e399de2c47d21fc80a4f664b76423537fefe182c2434321669e860e551c8a11644095732678e49313a13cf90cd1626cb99a063599675d87d419b40cb6acc72b2366c850c5fcd70d91b0b0e7fc2b9097750c4edb3b30a3fd4f55dcc6c9f26de85171ed24244f74e90815f9d7ef9c1a5206e3d92f3c240021f0234c5daa6c4c6a08d74bad5e6db5cd01598bad01f16ee2c3feaf83b25be3afe447400c76c2eaa1af818f82d28613fae7c778bad2814879e639c8f10a93c52daa2df607a552487166277f80ee5e8cc0c1e556450b072a951ca60aa694b1ed78dbc35b1f7b6dd10e89dc885c92445fbae3a9c8de2840a1fb3dd4e6deab87365a715ee4d9578b1356277503ef2400ef66664cc8e0f2231b3dcaeed58b85d96c0e15d3499b0ededf049bc1c6a947067793b45e17fceab33f927aa726ff2b32d1938a2ff92d4355a9a542aa557e31ac5886a172f4033846645f1cc7ce4e6744e2f3fe757a097936c0f5a3ba9f33fbd404b537081f0c69cef4176974a1c5a7e3e477ddc61963899218ce3a5f4a823a41136e42f053f024ed4cbf50d666accba373547879a277c3c8d25f775fc3a5997a80a58162fe70508fb307879464f74b72c2893e3d3bab70ec0dc5841f409c67844b59289e4c33ff998c0abe64bd1d378dbbca2284f8a3469ff51233fe6405a7f8cd706548374a1045ddf3b04dac3a43e22255b3e61cf6ff83a823037c5341225edf6e0460c7b36eb8e1e9453502261d29856607bd0106fa7951f7acbaededab5f1b077cd8dee8bb34e7dda2d83c54c91069f88d1a74aed7620e26e4dc707d28504d4515cda9215c0add369742c43fafc2f0504c4c81a1b59f5503b42e967c938a0a456a2f4d2ca5805b9b6679f397c685502eae1e9ffde1251a73df1bac1a2e409ac2bda41f9a4e309d3ff084031a96c836747b068c44776eb8a6b38124969d2e3f09aa671b35dc465b308732c13347bd3c480f26dd2747154530c4d946dfc1f1ed02c4ddbb367ce0f4f3836cbf36d8239d461f144c683b2da7b42d47acc7e71746e7994ad6bee4e34d19d2dea62d49c284a69bd0f611f354046a2bb5cee6fee179691d33c0c86d48019de61a433a78aa1fc8d1d6d198a6499820cc371625de4110198555e3f8f12feea83e1b9e779025c3d1305c4f9f6b58bd58728a2175349fd0967850e07c65ec8fe4d6e7621390a56145f6b201e15fe3daaba7186e123f6c68a0caf9ea160b72ce37eaff625935934b87b357a9a222b6f960e58bc84d36fe145196f54a0e40000006f276701b5305dd165ad862e03f3f38a059a97e58048cfcfee63e968dbf96c27ab8ac1ae8b77722dc50a610e074079c3c3c005501cb9366c5b82b899fdd6710401b78152f54a4188a6eac957278dd4c4c037ecb399df21ffd3f9e67c9f78eb8bfa47c3942ba818867fd571c447ae48fa615b17f664564453b977b081ceb703bad5775357130b9255972f83209e86f7fab110dac72afb6ef589a953be7ea015de6e4209d239c5c47d1e915adc8e0828f285b3a065db9d66c4f42f8f9bcb19ca589a405f4fec8796573b0417632e032ce8e556c432a06a8e687377def029462dc96460dad54f85fdc021f89d0383c2593f6702cde751a6e06d7a86cf9134b73291594da8b73ea76d885886fc4556d855688ea21ad6cfc4771d5d801b6507883e06a694a8a63c7269cba77184c5f9a1560e336155b8f18afc75482a06bea67eaab2ad30eed0ac46fd8a22380fe8f3c63ef17846ed5ec4bb37695bf8c1ccd45ec11aa77d7822bd5d0e753e32c731ed484fc80cf6693f93c82f9c66bea9f2ba673aa6752ff58291637c6a5ff2ca03ccc74e783a37531508276777b11d24b8acda25b35aeba28e88bd970ef08c9224b2bfa78a494df106e1551a1c4eed9ecbbcfcce149e4559e8522b39f523e1601cb822c8322de1b7d2d325571144a6a1dd496e02e508000000da4b4d75895593e58233c881c9d9b2ab911ba3829da0dd2d59ac13d704b71b125b6cf2a8bc500e60bdfd41ac7d372eabc8173bd908b05c40b51d3f329ce8d6be72732ae0260f07c66be02da76ad599560cfff98fe516d751fb030b1b81ead43dabe66839f95cf99749b0e74ee1f37227993949a3c71045c67b7567b0502929d8ababcc85189261eb04b785bc7fbae386f03e5f14c508e554404934d4634ca1f4356e38f930143ea8232b46b05c555ece04b0c182ae69102a63c1811788cc692e7c84b8577398a7f87295e7cfd1eec70f9cfb13361c545b6dd0ffa034d5c98e0daf029c3ea2d61a332a228ad05774664ec2df4337a3b34e02c5fa35ac341544e15ba74a2b59d72f93c8891d8c1c66d95ab0ba4caf37ec01776f8e11ae716c743e3c860de285d345a9c48eb2260f5d2c41c30bd729ad70a480f379b16d52927787083851f9fc138d6b25d963525177ba0d30d9d061257c0fac5f05b29f11c35a591e24f3c0dd4027b8d22a53aed0e895b8e93053d1e365e16725204f1c361fd68efd23f8d26ce54a4e96ad2ea30dc48f04b07cdfe704167416407c0144d96f75ebc4517f3205b5404dd20fde876ae17ac5ee52ba8b92ed47dcabb2e56db3f91cf89d -siglen = 2856 -corrupt_offset = 46 -corrupt_mask = 0x03 -msg corrupted = 386b1267f778307cb26e2e74cddea995d11baec129365a9e0627722699ad787fc0c0d1f8102c83bd81316a004eab9c11ea38911eb474f33ace51c90cf19d58b67a1e61fc3896b890e2cae7e124d950a9b6e3f85625f916c3cd6f08c35c869c7d -result = Pass - -count = 12 -label = stateful q = 1 corrupt before byte32 mlen=112 -seed = c9ecbf58b64e84c231c04e2543d3d61cd9b5821d2bd190f55b301ec0962d6bcb4e12b6d69282658f88efdd225da21d66 -mlen = 112 -msg = 1c6238432d6ccaa7e5e632a5bff8b138a5cde9b2cc1ce128b2cf669aea0ecae0fbbe0c6c7763c4ea348132e8b0d91e5f2182352640a36583d05d26e6f47b8596636e151827fec665403486cd9acaa59585c85c06ce08347cc5f0a8b53e8d4d7fc03707fbb3453900b3cfadc2328db30f -pk = 4e12b6d69282658f88efdd225da21d6672d4939d1210e17b257a020ef3418d06 -sig = 80f4f4606354e21f74817a13c98d7069cd60265dde6d4ed33e3b3c9fe8ea8b47465557d3134f5425053d398c7dd9f1c10000025de54020a7fc7723eb6549277c2c29355da506a1ed24480ee3e3f7b579681da24f3a43949139bcc0e447c62e4add00d342849739e3697c7fc6e66f97e63f12974f22372ec85e3dd89789a707da1e1011d5ad585e04cc11849f9362908c870de5eac50789a752c349ce13ac915b805ce898dcdcee59ffd35217b7ac47f770045ddea5e92c3229366c32311448722466be588a86b31a4a84b0ea8f9d5e42132e2045d25ddcf0caf20785cd55b076d20806916566d6c1ef0ef692ddca7e360ecb734794fb962f91499e7c98ca4b684c6d43904794b69adf2b855fe79857c3940457aa5e7c2e2140621fed4f3fb4d3e2e922c62a0682ce53997b1fa74ca7a87e3571852b9f11ecadaa6c364f7d906b67f1e5a2 -siglen = 324 -corrupt_offset = 13 -corrupt_mask = 0x49 -msg corrupted = 1c6238432d6ccaa7e5e632a5bfb1b138a5cde9b2cc1ce128b2cf669aea0ecae0fbbe0c6c7763c4ea348132e8b0d91e5f2182352640a36583d05d26e6f47b8596636e151827fec665403486cd9acaa59585c85c06ce08347cc5f0a8b53e8d4d7fc03707fbb3453900b3cfadc2328db30f -result = Fail - -count = 13 -label = stateful q = 1 corrupt after byte32 mlen=112 -seed = c9ecbf58b64e84c231c04e2543d3d61cd9b5821d2bd190f55b301ec0962d6bcb4e12b6d69282658f88efdd225da21d66 -mlen = 112 -msg = 1c6238432d6ccaa7e5e632a5bff8b138a5cde9b2cc1ce128b2cf669aea0ecae0fbbe0c6c7763c4ea348132e8b0d91e5f2182352640a36583d05d26e6f47b8596636e151827fec665403486cd9acaa59585c85c06ce08347cc5f0a8b53e8d4d7fc03707fbb3453900b3cfadc2328db30f -pk = 4e12b6d69282658f88efdd225da21d6672d4939d1210e17b257a020ef3418d06 -sig = 80f4f4606354e21f74817a13c98d7069cd60265dde6d4ed33e3b3c9fe8ea8b47465557d3134f5425053d398c7dd9f1c10000025de54020a7fc7723eb6549277c2c29355da506a1ed24480ee3e3f7b579681da24f3a43949139bcc0e447c62e4add00d342849739e3697c7fc6e66f97e63f12974f22372ec85e3dd89789a707da1e1011d5ad585e04cc11849f9362908c870de5eac50789a752c349ce13ac915b805ce898dcdcee59ffd35217b7ac47f770045ddea5e92c3229366c32311448722466be588a86b31a4a84b0ea8f9d5e42132e2045d25ddcf0caf20785cd55b076d20806916566d6c1ef0ef692ddca7e360ecb734794fb962f91499e7c98ca4b684c6d43904794b69adf2b855fe79857c3940457aa5e7c2e2140621fed4f3fb4d3e2e922c62a0682ce53997b1fa74ca7a87e3571852b9f11ecadaa6c364f7d906b67f1e5a2 -siglen = 324 -corrupt_offset = 68 -corrupt_mask = 0x3b -msg corrupted = 1c6238432d6ccaa7e5e632a5bff8b138a5cde9b2cc1ce128b2cf669aea0ecae0fbbe0c6c7763c4ea348132e8b0d91e5f2182352640a36583d05d26e6f47b8596636e15181cfec665403486cd9acaa59585c85c06ce08347cc5f0a8b53e8d4d7fc03707fbb3453900b3cfadc2328db30f -result = Pass - -count = 14 -label = stateless corrupt before byte32 mlen=112 -seed = c9ecbf58b64e84c231c04e2543d3d61cd9b5821d2bd190f55b301ec0962d6bcb4e12b6d69282658f88efdd225da21d66 -mlen = 112 -msg = 1c6238432d6ccaa7e5e632a5bff8b138a5cde9b2cc1ce128b2cf669aea0ecae0fbbe0c6c7763c4ea348132e8b0d91e5f2182352640a36583d05d26e6f47b8596636e151827fec665403486cd9acaa59585c85c06ce08347cc5f0a8b53e8d4d7fc03707fbb3453900b3cfadc2328db30f -pk = 4e12b6d69282658f88efdd225da21d6672d4939d1210e17b257a020ef3418d06 -sig = 64717190cc0919bd289f2f012c3409ebb29807a08026320cb8128dc32d66d5452931a46bdd96402ffdf17ff907c23a9321e381c3fc3c59791416b5f77d9aec370099c722367e1bab4707041cd2c7d4d265dba827d3195b3c0ab7420609924768312f8fee89023ef4feffd54852a2175b6a504997880448fbfb5d0641cdc1fb49f7858e78104f3a2de633b10e26c286a25b9205f69ac4741b4c3136ba10d35deb3481aadd1175671b1470b487c5182d913c1e8094cbf528393297e84e1a6b6d86b0a2e39055ed48ae74fec12b7b65769051c8baab74d382c860e5dbc3997e18bdcdebee790c91725ad5f84fcbf8d5285f3c5a7abb9c5092b80995a6e7834f53600294e3bd5140f93e5a5687ad56f003420777118349d08d3c136a44b3d6d0225f1de82dc1197117fb0cb82a1a4867869d581ad4ca996035d4d914240ed4bdb21d10dc8af92f6aa4b49339a0df21f8362913169fa25055bb5ca95f2d184fae114c2e4f125b1b3fa3a2d91454b7f580c48ab12ac25b24b5f28708378f8e3c0d23e4e1ec866847f1ceb59d008a12966654d7f0c08a096b1c5ef7e584474f0615825e208f72284c79624460b2319de8356c249733ff7679bcade9bfcd424e0ad4cf3552394b3e6d695ae3316bc836bbe5ef59255cac38f32077fea1f41107fed2a4a4cede564e8254790052149c74df38fde0d49045a4422cb2b5f56afeda8c4260c998ee9a97f21cb9dc0161c31600c81ef66c9763303be00a15e76d86cc79b569304582f5e73bd071681222b01140ed6ce1a95ee75603d7e26554cd279bda31e2d513d644fab4db9427c947e3275acf34039d6268ac9285b8991050cb2d9441f8111f7cb7844abf64e524f9462fd671813c64339a54845e4e562b4f4fa9174b149971f77f97cffafd9673cd36d17c43e3e4011426faa8075bc7456dc953833399128330a5c09761ddd382216e642dbb42e0403b27fcc81963920002154705202962c15328f351dbf8ffea468fc515ca056514b9b235ce5b30794fea6872b93470b1c306db1dccc7c1b03fafa5fbd9146b161a4b5a48700be16f98c67ae774abcf53d9d0c6794df5fa90040f925d7f42a4f071ccd7935da409e72d012a147b2e9b34728a412f24b39916c9cfb3966c52f1095d4153f3f0bede8bb1b3c64a4dc5975132eda0455e71693c0eb99170346bce51c5e4c25098a520da7eddd3aaa9a02a7c70cdeeff0ee2aceccac3e1294eb1fed2ec03a510f2bbf8f7886532ba8af881d4d8df5281c8a32c7ddf68704d60ea9867f15d9665c81074c0e582299a06c2ffad4895f102b976effa2c3bfa20de94be2894b742c40a48400ccdfb56067f27b67a71c45d04b9fa6d74a670682c2345e8b146b18400972b83b7118f7b4c7c31d29a9c99af017e1066b1cdca04612c777a04349c237e82290bf112338f82d782936f11ad256e5e674a491a5fc9ff97ac6787399624eb498350f01d8a3a7a1a03d2250581e2010da3fe728ab3727e2c1f97c26dc510ccdf4f5a2b9bf19505fcb45f3b9792211d09b473b6c45d4b11f601e43ffde9f514b507d3b7f2e0e83e43f99e0dca191e3e1ac49aa86375afc22a6a8d0665cdc729e6c7dd556fd220e1561d7c6a3fe1bd483e3457ce6399c92d6eba04aed7d1e6b8ea885850b816c2347d5513a70493411b618d08b31ce655d690e6586db6ddaaaefb6dc92169de52da9e802984e00b9984fc4acdb6501fee089a7504f0b5469a11d405891eda0d4773a00694d68d92562ff5e14db9482bc2dcc183909696289045845e50f92374e0bc37dee7521e07becfac26cc6a6401a0f0678c2fad792fc8489a9907298dba636e671a16a0d073c642c967eaa11cef9b38f6e5ec30f725b21be012899d70bbdd12a700caa6484de44a1e3ef0a107f8b93796992cb5fdc086355050dc47ca976838f739ad294a5214557b4e52aacba927eb8e2b9da3aee2aa1935bce7320f977d299a0eaed86a9dc6ad7fa271c80254506a7d8834c6029364508cf2116b24100a186b6977e6188dbf3106cf1e5fc8aa035dea445454a6c9232b9b4ac0aa80c413fd7e34094a15e7f7f1b6a7ee9ed9c637b3d8ebd0efe0bdedd6f935b48b8983af4961f3702d93aedf9f223c958afc3bad5232b0ee42af62a2196d13d6e58151414cf0450965c6a40ffd3fbe33a8fe365bf211142a9f8d001e8a7ee4b229e7c68f3770f2dad0be3e2a75030d8b5a02261282fb08d5054fd31e8c032ac0abe949ecf0062ce0f7a80efbe8c0c47dbb25e1a7996a1fac74c4265d19c8a48065a30ce2155f2ae0c26fb5a5d99998d4952ba197f98f5180cbe09730e8776fa655a2dbb0eba175c46a449778261c3abe164573214e0145ce663a31f06cb0a790919549d49aa0943c9ff8ee9d17193a577e154c18c22743918f46e7f452fb1620bdc4bcf1cb3a6447e6bcbbc0dc6d9b07ec0795cad6974e9b99a55dd572bd52dbaf85c6da9b8c6b51e2583e5ae55b4f37e8e56101d7e6b557efacf5ef4cdf9afcf43775f60941cedfb202fd4f0e03fae8cd58858e5facc8370a3f70e5546ab5de7015da86c6897e312de4561dedb5904e846bbe541157cdf7853c98e3c4f4de7a82be5daa89cb0c54e89c69eeba5db365660c85bd92fe611bb209f15971e6d65e1a073841cd518e814b54ab476a626b8eba895f7c0f05967d7c60c676a54a1011aa7a562ce48e80906b000001d20cd828db1929f0e665433fa604c8360701201e8a5861c2ba63ff95ff66f6dcf84edc2808f4187950eabbbd7f03f3dd92e255d2eebe7016d2e0473e99357733e990304fc093599e471d6fc4f156e6d56e5b45c4ed18763eb500f50d059e682c121922643c262d3d68cad2c30004118c1b7f70179d6d7dc79fcb3629e680b7b11033efd69e717ee85ec04614d54f2cf273e19ae00d08008bd77ac6f57a443ed3f0b01938adbfb7db8b4e1d8e6c5315907cee2a7a5351eb74cef90512c76b584ee50cfde4c89f4704652da0e6a87c9336150706b4e4c14d5aa6da670dfb7ad6cac8d651faafa15753a658f6497c18fb93c7733a802ac0173f545c3606d22c6e5c14db182895cc4d68051e930013f4792a6e4cfa5ce7a76ec7c8910a7a734e0cf56ada9222e9574f74c433cbf046202796a82b1846758d4d74c95b68fae0ffb395819a232330c3f4826c4f44b9073ce0ea23a8d992bd7314b555b5c4ec5f64b98ba488b3e29d0da2dfe3eaafbff5f00638b93030acfafd2a4eddf7eb3b0aa20da28aada0d07dec3dacbf230fbed9e0d52ddd58722974842f9517722e40add64aca741157231205be94c9f5ba05d3bc081ef9cf77106c7dec10531646d50025a5c3ce8848ce58b3c6c54f18218e64c66f23f0d86d606fa41da9c3adff879d09d8565d000005ab1e24a2cba23200174db4c9d224ced498bf191da39ebedf7d6f2657891663c3e08c4928be90a06120476dc924c63bd65556549da2521fb55cf58666eb800745bc2a1d7249d4dfbab89f463770f3956b0e28a739d7b554bca59cd2ece4c1afe0d30c5c624a37d0c042a694fc621411b8de71a80644b61169e38b203cf4104757e02930af977080afde867e0ce0470336d0f9376775cfb0eaa7531aa62de97c5a93a53587189201b6b4b5f7271ba9f6ab034c24745b16f2fafec8cbc34063142318258ac2a235361725fd927b4b2d5b3e1c346f3d111f014b004f3d3b4e58dcf9343d1cb1cce95cf9f17593f42ddcb9572b1292a1d6829d05e53d3137be0f9a81744aee4cbfe279d81adc499d12724182b04757b352336c593f2059a3f1120ef4a439e44a698481ae034f44a60357304d339ea3c7b7d8ae17d134c47d51a9e812affd0ca9ea4ecede37cbffd5f7ca80a037a3c0f42ed57e3159c1efce6760ccdc33c5d0774b4e08e009e732a9cbcf38aef6e3e7824b711c49844f0e3f8abd41e403171daaa098685ebef8e38790f7aad1e2c428b1db87978e25e508bac2e56e2ce2605ad8fbc0bd65ddffd54bfa5506fb1b4601520ae2a82afd0b2cae072b4190ac -siglen = 2856 -corrupt_offset = 5 -corrupt_mask = 0x59 -msg corrupted = 1c6238432d35caa7e5e632a5bff8b138a5cde9b2cc1ce128b2cf669aea0ecae0fbbe0c6c7763c4ea348132e8b0d91e5f2182352640a36583d05d26e6f47b8596636e151827fec665403486cd9acaa59585c85c06ce08347cc5f0a8b53e8d4d7fc03707fbb3453900b3cfadc2328db30f -result = Fail - -count = 15 -label = stateless corrupt after byte32 mlen=112 -seed = c9ecbf58b64e84c231c04e2543d3d61cd9b5821d2bd190f55b301ec0962d6bcb4e12b6d69282658f88efdd225da21d66 -mlen = 112 -msg = 1c6238432d6ccaa7e5e632a5bff8b138a5cde9b2cc1ce128b2cf669aea0ecae0fbbe0c6c7763c4ea348132e8b0d91e5f2182352640a36583d05d26e6f47b8596636e151827fec665403486cd9acaa59585c85c06ce08347cc5f0a8b53e8d4d7fc03707fbb3453900b3cfadc2328db30f -pk = 4e12b6d69282658f88efdd225da21d6672d4939d1210e17b257a020ef3418d06 -sig = 64717190cc0919bd289f2f012c3409ebb29807a08026320cb8128dc32d66d5452931a46bdd96402ffdf17ff907c23a9321e381c3fc3c59791416b5f77d9aec370099c722367e1bab4707041cd2c7d4d265dba827d3195b3c0ab7420609924768312f8fee89023ef4feffd54852a2175b6a504997880448fbfb5d0641cdc1fb49f7858e78104f3a2de633b10e26c286a25b9205f69ac4741b4c3136ba10d35deb3481aadd1175671b1470b487c5182d913c1e8094cbf528393297e84e1a6b6d86b0a2e39055ed48ae74fec12b7b65769051c8baab74d382c860e5dbc3997e18bdcdebee790c91725ad5f84fcbf8d5285f3c5a7abb9c5092b80995a6e7834f53600294e3bd5140f93e5a5687ad56f003420777118349d08d3c136a44b3d6d0225f1de82dc1197117fb0cb82a1a4867869d581ad4ca996035d4d914240ed4bdb21d10dc8af92f6aa4b49339a0df21f8362913169fa25055bb5ca95f2d184fae114c2e4f125b1b3fa3a2d91454b7f580c48ab12ac25b24b5f28708378f8e3c0d23e4e1ec866847f1ceb59d008a12966654d7f0c08a096b1c5ef7e584474f0615825e208f72284c79624460b2319de8356c249733ff7679bcade9bfcd424e0ad4cf3552394b3e6d695ae3316bc836bbe5ef59255cac38f32077fea1f41107fed2a4a4cede564e8254790052149c74df38fde0d49045a4422cb2b5f56afeda8c4260c998ee9a97f21cb9dc0161c31600c81ef66c9763303be00a15e76d86cc79b569304582f5e73bd071681222b01140ed6ce1a95ee75603d7e26554cd279bda31e2d513d644fab4db9427c947e3275acf34039d6268ac9285b8991050cb2d9441f8111f7cb7844abf64e524f9462fd671813c64339a54845e4e562b4f4fa9174b149971f77f97cffafd9673cd36d17c43e3e4011426faa8075bc7456dc953833399128330a5c09761ddd382216e642dbb42e0403b27fcc81963920002154705202962c15328f351dbf8ffea468fc515ca056514b9b235ce5b30794fea6872b93470b1c306db1dccc7c1b03fafa5fbd9146b161a4b5a48700be16f98c67ae774abcf53d9d0c6794df5fa90040f925d7f42a4f071ccd7935da409e72d012a147b2e9b34728a412f24b39916c9cfb3966c52f1095d4153f3f0bede8bb1b3c64a4dc5975132eda0455e71693c0eb99170346bce51c5e4c25098a520da7eddd3aaa9a02a7c70cdeeff0ee2aceccac3e1294eb1fed2ec03a510f2bbf8f7886532ba8af881d4d8df5281c8a32c7ddf68704d60ea9867f15d9665c81074c0e582299a06c2ffad4895f102b976effa2c3bfa20de94be2894b742c40a48400ccdfb56067f27b67a71c45d04b9fa6d74a670682c2345e8b146b18400972b83b7118f7b4c7c31d29a9c99af017e1066b1cdca04612c777a04349c237e82290bf112338f82d782936f11ad256e5e674a491a5fc9ff97ac6787399624eb498350f01d8a3a7a1a03d2250581e2010da3fe728ab3727e2c1f97c26dc510ccdf4f5a2b9bf19505fcb45f3b9792211d09b473b6c45d4b11f601e43ffde9f514b507d3b7f2e0e83e43f99e0dca191e3e1ac49aa86375afc22a6a8d0665cdc729e6c7dd556fd220e1561d7c6a3fe1bd483e3457ce6399c92d6eba04aed7d1e6b8ea885850b816c2347d5513a70493411b618d08b31ce655d690e6586db6ddaaaefb6dc92169de52da9e802984e00b9984fc4acdb6501fee089a7504f0b5469a11d405891eda0d4773a00694d68d92562ff5e14db9482bc2dcc183909696289045845e50f92374e0bc37dee7521e07becfac26cc6a6401a0f0678c2fad792fc8489a9907298dba636e671a16a0d073c642c967eaa11cef9b38f6e5ec30f725b21be012899d70bbdd12a700caa6484de44a1e3ef0a107f8b93796992cb5fdc086355050dc47ca976838f739ad294a5214557b4e52aacba927eb8e2b9da3aee2aa1935bce7320f977d299a0eaed86a9dc6ad7fa271c80254506a7d8834c6029364508cf2116b24100a186b6977e6188dbf3106cf1e5fc8aa035dea445454a6c9232b9b4ac0aa80c413fd7e34094a15e7f7f1b6a7ee9ed9c637b3d8ebd0efe0bdedd6f935b48b8983af4961f3702d93aedf9f223c958afc3bad5232b0ee42af62a2196d13d6e58151414cf0450965c6a40ffd3fbe33a8fe365bf211142a9f8d001e8a7ee4b229e7c68f3770f2dad0be3e2a75030d8b5a02261282fb08d5054fd31e8c032ac0abe949ecf0062ce0f7a80efbe8c0c47dbb25e1a7996a1fac74c4265d19c8a48065a30ce2155f2ae0c26fb5a5d99998d4952ba197f98f5180cbe09730e8776fa655a2dbb0eba175c46a449778261c3abe164573214e0145ce663a31f06cb0a790919549d49aa0943c9ff8ee9d17193a577e154c18c22743918f46e7f452fb1620bdc4bcf1cb3a6447e6bcbbc0dc6d9b07ec0795cad6974e9b99a55dd572bd52dbaf85c6da9b8c6b51e2583e5ae55b4f37e8e56101d7e6b557efacf5ef4cdf9afcf43775f60941cedfb202fd4f0e03fae8cd58858e5facc8370a3f70e5546ab5de7015da86c6897e312de4561dedb5904e846bbe541157cdf7853c98e3c4f4de7a82be5daa89cb0c54e89c69eeba5db365660c85bd92fe611bb209f15971e6d65e1a073841cd518e814b54ab476a626b8eba895f7c0f05967d7c60c676a54a1011aa7a562ce48e80906b000001d20cd828db1929f0e665433fa604c8360701201e8a5861c2ba63ff95ff66f6dcf84edc2808f4187950eabbbd7f03f3dd92e255d2eebe7016d2e0473e99357733e990304fc093599e471d6fc4f156e6d56e5b45c4ed18763eb500f50d059e682c121922643c262d3d68cad2c30004118c1b7f70179d6d7dc79fcb3629e680b7b11033efd69e717ee85ec04614d54f2cf273e19ae00d08008bd77ac6f57a443ed3f0b01938adbfb7db8b4e1d8e6c5315907cee2a7a5351eb74cef90512c76b584ee50cfde4c89f4704652da0e6a87c9336150706b4e4c14d5aa6da670dfb7ad6cac8d651faafa15753a658f6497c18fb93c7733a802ac0173f545c3606d22c6e5c14db182895cc4d68051e930013f4792a6e4cfa5ce7a76ec7c8910a7a734e0cf56ada9222e9574f74c433cbf046202796a82b1846758d4d74c95b68fae0ffb395819a232330c3f4826c4f44b9073ce0ea23a8d992bd7314b555b5c4ec5f64b98ba488b3e29d0da2dfe3eaafbff5f00638b93030acfafd2a4eddf7eb3b0aa20da28aada0d07dec3dacbf230fbed9e0d52ddd58722974842f9517722e40add64aca741157231205be94c9f5ba05d3bc081ef9cf77106c7dec10531646d50025a5c3ce8848ce58b3c6c54f18218e64c66f23f0d86d606fa41da9c3adff879d09d8565d000005ab1e24a2cba23200174db4c9d224ced498bf191da39ebedf7d6f2657891663c3e08c4928be90a06120476dc924c63bd65556549da2521fb55cf58666eb800745bc2a1d7249d4dfbab89f463770f3956b0e28a739d7b554bca59cd2ece4c1afe0d30c5c624a37d0c042a694fc621411b8de71a80644b61169e38b203cf4104757e02930af977080afde867e0ce0470336d0f9376775cfb0eaa7531aa62de97c5a93a53587189201b6b4b5f7271ba9f6ab034c24745b16f2fafec8cbc34063142318258ac2a235361725fd927b4b2d5b3e1c346f3d111f014b004f3d3b4e58dcf9343d1cb1cce95cf9f17593f42ddcb9572b1292a1d6829d05e53d3137be0f9a81744aee4cbfe279d81adc499d12724182b04757b352336c593f2059a3f1120ef4a439e44a698481ae034f44a60357304d339ea3c7b7d8ae17d134c47d51a9e812affd0ca9ea4ecede37cbffd5f7ca80a037a3c0f42ed57e3159c1efce6760ccdc33c5d0774b4e08e009e732a9cbcf38aef6e3e7824b711c49844f0e3f8abd41e403171daaa098685ebef8e38790f7aad1e2c428b1db87978e25e508bac2e56e2ce2605ad8fbc0bd65ddffd54bfa5506fb1b4601520ae2a82afd0b2cae072b4190ac -siglen = 2856 -corrupt_offset = 61 -corrupt_mask = 0xd6 -msg corrupted = 1c6238432d6ccaa7e5e632a5bff8b138a5cde9b2cc1ce128b2cf669aea0ecae0fbbe0c6c7763c4ea348132e8b0d91e5f2182352640a36583d05d26e6f4ad8596636e151827fec665403486cd9acaa59585c85c06ce08347cc5f0a8b53e8d4d7fc03707fbb3453900b3cfadc2328db30f -result = Pass - -count = 16 -label = stateful q = 1 corrupt before byte32 mlen=128 -seed = 3dcfbe0108e95fb448d21827008fb8c52321adf5ebd2e2c4e7f0f5531a7f2cd264ad8f29032ac503d24b4845be4dcb7c -mlen = 128 -msg = f938059fabb8535c22d81de3d5c9cef85c3fabf15de293a125ebb573ae3587f45c4993d92e0fb01cacaac079e4afe7804ae0f9f6b0046548f9e4bae748ddfaf45256074bd1182ed0151e5c2c3a5d661879b8961871f6125cdab93cf19f2038b4986329a118c57f56d2a2e22b9b5ef72364dc87b18f77161633cfba7fe12571ab -pk = 64ad8f29032ac503d24b4845be4dcb7c5e2d4e94add23c300f0e872832ba9a18 -sig = efd1b010c7e78147d93a4960909821ff1ebd3a44f16e4554e3d934eb9b91f632d175cdf8a04976407aa6ef6561673c8a0000019e442e107264bbaedfb4bb64b98f964ea8c5aa9b519ffd3a5e65ce4eb39321b47b5dd67812ebf48d9ad55146c7134b846d2523e293f2943ddb3c3a9a4ab00a30673573ec76c1f1c381698b03a23d3441362557fc0a021938533d459ec370ea3a393c1c1cdb69d6bed454dffb6c2962ec0f0d7a90d227124d70fead0321ec749a567746d8903e99df6f4af6614cf3227438da3f6fb35f86e3d7732a43aecaac3a9be6377160ba1217716cc51a2aae4ef8710c9e4cff0646d906a7cef49392650dc2ef77e6b8d0a18fcefc11165280ff2f889d89e5d08d9ccef43420386c4ace301d5b96ca3fd1c3103cbe63be36ed659348c105c998bdffb4f2a40c68032a84e4afbb268d73a79a89a34b51636badedaddb -siglen = 324 -corrupt_offset = 9 -corrupt_mask = 0x71 -msg corrupted = f938059fabb8535c22a91de3d5c9cef85c3fabf15de293a125ebb573ae3587f45c4993d92e0fb01cacaac079e4afe7804ae0f9f6b0046548f9e4bae748ddfaf45256074bd1182ed0151e5c2c3a5d661879b8961871f6125cdab93cf19f2038b4986329a118c57f56d2a2e22b9b5ef72364dc87b18f77161633cfba7fe12571ab -result = Fail - -count = 17 -label = stateful q = 1 corrupt after byte32 mlen=128 -seed = 3dcfbe0108e95fb448d21827008fb8c52321adf5ebd2e2c4e7f0f5531a7f2cd264ad8f29032ac503d24b4845be4dcb7c -mlen = 128 -msg = f938059fabb8535c22d81de3d5c9cef85c3fabf15de293a125ebb573ae3587f45c4993d92e0fb01cacaac079e4afe7804ae0f9f6b0046548f9e4bae748ddfaf45256074bd1182ed0151e5c2c3a5d661879b8961871f6125cdab93cf19f2038b4986329a118c57f56d2a2e22b9b5ef72364dc87b18f77161633cfba7fe12571ab -pk = 64ad8f29032ac503d24b4845be4dcb7c5e2d4e94add23c300f0e872832ba9a18 -sig = efd1b010c7e78147d93a4960909821ff1ebd3a44f16e4554e3d934eb9b91f632d175cdf8a04976407aa6ef6561673c8a0000019e442e107264bbaedfb4bb64b98f964ea8c5aa9b519ffd3a5e65ce4eb39321b47b5dd67812ebf48d9ad55146c7134b846d2523e293f2943ddb3c3a9a4ab00a30673573ec76c1f1c381698b03a23d3441362557fc0a021938533d459ec370ea3a393c1c1cdb69d6bed454dffb6c2962ec0f0d7a90d227124d70fead0321ec749a567746d8903e99df6f4af6614cf3227438da3f6fb35f86e3d7732a43aecaac3a9be6377160ba1217716cc51a2aae4ef8710c9e4cff0646d906a7cef49392650dc2ef77e6b8d0a18fcefc11165280ff2f889d89e5d08d9ccef43420386c4ace301d5b96ca3fd1c3103cbe63be36ed659348c105c998bdffb4f2a40c68032a84e4afbb268d73a79a89a34b51636badedaddb -siglen = 324 -corrupt_offset = 90 -corrupt_mask = 0xd2 -msg corrupted = f938059fabb8535c22d81de3d5c9cef85c3fabf15de293a125ebb573ae3587f45c4993d92e0fb01cacaac079e4afe7804ae0f9f6b0046548f9e4bae748ddfaf45256074bd1182ed0151e5c2c3a5d661879b8961871f6125cdab9eef19f2038b4986329a118c57f56d2a2e22b9b5ef72364dc87b18f77161633cfba7fe12571ab -result = Pass - -count = 18 -label = stateless corrupt before byte32 mlen=128 -seed = 3dcfbe0108e95fb448d21827008fb8c52321adf5ebd2e2c4e7f0f5531a7f2cd264ad8f29032ac503d24b4845be4dcb7c -mlen = 128 -msg = f938059fabb8535c22d81de3d5c9cef85c3fabf15de293a125ebb573ae3587f45c4993d92e0fb01cacaac079e4afe7804ae0f9f6b0046548f9e4bae748ddfaf45256074bd1182ed0151e5c2c3a5d661879b8961871f6125cdab93cf19f2038b4986329a118c57f56d2a2e22b9b5ef72364dc87b18f77161633cfba7fe12571ab -pk = 64ad8f29032ac503d24b4845be4dcb7c5e2d4e94add23c300f0e872832ba9a18 -sig = b70d5db5639c5f5d5dba808c3896e6cb044c1d23b2d106e771c473c1259026e3e07e99f9d738ee408c7150daa811426b21407ac242f372726e43d7331da538040de9c0f7d991cca01407b3981de020ee4054385044116f83b723f09ead63f1f658d62a7388431cb68877f7cfe9fdf6fe0c5e64fe5c96633bfe6eb72d93abf06aad9629c2ce5818019d82f48408ef7c91471d4b99bcd09e35f0a8f661540ecdf28c5cbbc534f04f7fbf9a429f774f3c943372e21d37937ee24fc4a4b820ca41c5e4972e6782d1caf5328e19fbbfe46714dd984ff6680df66898228167501a384f7d8c5c85364e91de695f26e23984f52b86ede6f4ebb1adbe1da004592a0cbdae1dd1b54f61db52b533d457fd7a0040edc58c1f6c9b6e962f5e8889ebcac8a5ef73583f457239a267d6250f7fbbcbdb7025673695198e7ce0d1ecc2f10567e3a54f0eea66e5e884bb9260b81d0eb7481b508f291f71b83594bf396906b946dbe43ebdee86679121a79d173a7d9263dbf9eed14e62ad7b23a895c44474c03731f312d5b063ddd9d760e1d38449103fa7c4c6c1bfb94d2a55d7f75a9b863868673b0ffb789f96a0a78dcc1e8fec82758da3db29fd063994f9f53cb7e0668108ca8ca321c180f44ba0110448c8081f902947659bd1103adaaa2cea7ab94da9380cc7ae81fd707ae07df6a53dd0737c632c84e736e024e96cf1a2c495ccf690d73b9f094f0517cd1007324314080baa1a3df5d60b7b5e2e4c46a227a317e15052deba727d9abb9cebd5a764a6369251de0ac0a0e120d224f0c52c3b3184b024628181fdfdfa887bd8ddd5c49057676eb6dd7ae4c7c9cb15b14d919779c1f28aba463e1bd721f1cd6933088a4067ab3fa156812f530f378c30f19a4c356edc53f463ab732f18cc26672f23ff3861123ecda145667a13e7b885d20c5edfaadb28f1d7dc11436be2a8cd54397123365c529f1f122cca5d51939e56a3426b6b5730a2bb16ffa1395e6f05a80bcdf54832ec3dce64dda13f4ca93745f187cfd59c49e15f8d5702d5025fa545887f7f72246b02d3c9383951f4d1e94aff71a056cceb249431db0c7a45e20c94daeced1e7e39749f9fa84e290a6617c2b9d7373afda2248008060018a6a78868efa39d58fff9a0fe94778f8206e25de57ae16ba6fed301f3ebbffde7d2835972e9de0c659e7cb10d3b074eb3781be425e5c236393134912e74d1c89f552c352ce2696a804c48ae0a21de12efa3c91e9f4ac8dca4c56ddbec52ff4c6392d8d20d887fd008dc39446647bad054833d6aa9a55b98bafcbb185f8347cad96a9a5ac8cb91e4a031119198654c166b40c825a578082e2b614ad3a8729890d89f321edc11040f7da68b55be5f0ac012077e9e9bd4d6904adba0a62c1e56895ccacb4f48bec2c1690056f292c63b0f7137e6ea4ba7146324af331b5aafeb257b5fa16732c839d2064133241e943414ee05601191cd1d3fb343b437a2edbf5391b146382a0c7eb4c1e1933610af9945ffe76e46b7a9cebbc6060f212672f88a2948c437c54f70524760d504531a4208493396c9adb3babb6f03c5fa43d54566ef5f51f56aeb4d6fb93f97a71cce5978add0fe35c744c8ef636ac99164ea4f817b7a2f0d569b017d5bcf5d8d457887f1f46fc7705c395b9fb896989fca4d7e1ee443756d6c4c7aea942e0ab777efda7a2e8137cd044a15c928ff40ddea8474338ea535e2564d379815135e4eaf4152d1acfdf274a1768ba39ce934bc11002f743700b8bbd7207e5fad5b56ff18dbc63446f95b8787bab54bb781b9fd16c01e7e7d1843b494b26feaa66fb3feccdf99cbda1db82464bb05133b80fbc9415cf86e9a807e7428326a3308e62d6c1ecc2ef817f8df57eb9100be5dbae84aff2aad83588ea230cf061a952bf6a52c14f4f5f3e17628019043d2380dbe82435fbab55572d3aad15ea32a43d303d0f16583c6f9e691d439cf8c36e64b13bbc30b6ae918a0cdd601b63e4cb53d9939f51fd0aa54c48255f628b6642b2dfe7a899f908c7f4a16de1b2abe157844299f74312586c4d61613a639fc5baabbcec4883970c0d4d71cb3002471f97c06b9522d5b06f74747e4be4b96feb396cebb0b8e9a0eaa44194d38d8726bda6296d171a9c00d8cc5c0aecb80412a88838793f8b1470dfaf794072c2a10b0adb9dbb4f516ceee82eacfa0a778ee6a7031b817c7783128ef1ff10ccb05a70d02e7e5d0aee1a6a854b90ff0f72e32c759d8b5d5892f04ff5405645aee2f8c93567db52315a1ff7e41d73e6816ee626bf03b97371aa53622ec2d71320dc41ab011d1e4b15201bdd6bda8215ccd0ff6e2cdef8209fcce7f41d73f405e0301dea454b9440693f92ebc749714e0dbd3d06af08ca9c2a11710575a5fbe03b072abd20d465b86b399e11eedfe78caaa80065681df2ede0a92eeee716fff82c5a16a1843317df6f15f5d81d3186a7b87fa242b3b8627023b8582fcf03b34d578180afda2d25928103da764a3a113794a2280cc7c549369cb47f99acc1f964edd08c608d8ba1e267781fc3446546e196855c6f0f1351d1bcc71b536aaff3aafca1d95f02dc24331ce0bcd59d9d993b89c235e74674ed5dcfc0e8903df7d63e68d414d6d7c38482b3a8c6e323711a6dc841a5c642664f57f5513d5f7b9a00fff92917d7d3326bcc43844eb2684bad1b5c2c7f377b411695a060506780000037e2693e8fdce0bcd369f0b8e45234f7b48453b544b2cd1e8e191df57ef6b0b0cb02e24d2e8b4c0b65e25145b87c6dbaff28c90260fc0c2246b8fe0e6dcb3bd1f341469b88dd76834fc635c50b37f8550aaa204390ecaabfd597e4378c883b2c63facb90440a22de071b19f414ada2d07c31bce1faacbac7ff4ecdc5adbcd289abfe87fdc5b3887de8013202ae77633b64ad940ba39ee07bf7f6338e2e11001340b5f2c0aa1f5a8be13e116125c5a55b734cc04abd9bd453c4c4fd96b54eee877a7f0c2d25db55101c50f827764bce9fb01cda068cc7e07e3b9741214fe51bcaf5b77c09bf568ad2ba7ad9d64c2c54d61e5fd10cdb5ab9c330d4ded1f3c813a2a489ab406bb2566856985d7454667edea6ca9c3b21d70f909b86d1f91fa997a708024244dfebfe09c1adbf790c848964160dc259a7215aad2f1051772138f6c936ac55dda5162f6460198515337835b6158245bf94e8158038d34ef54dc6b629b9b1f275b8d38e3a417cadef30ba4f824882a75c13fec8c917009e8efb4d182bbfc1d79adc8a0658f0c3c290d15a820b900010c5bea91388e0bea69c7646d29c313e3477a4021ab0b4ebb53d666012623149983c365e4204e03d9256e4641964d06796c420ee21f39818f32be84e6faa3c33670f783157600dbc993f16221c0a3080000001d2b84771ab61802a8e5ed2e63c7ae27b75fae6c392cff8d83595a4817bf79104f95437e283f30e5a7ad835bebb1f59996ad0755ad0f6b9f8f5336c5f8b0f805f80d886dc748e2708e64859f2b48347e23bebfe92a4647f42fae4a89354e77eb1eb9448716acb5189125215ab6e8905833214bfa76072a3ea3703726f88eac841e44f83aeaba5f68f79eb49adf840fbb190465bf8cbb76d31957bbacb1aaa97a56831f2b42702e1ffcef87277c5e77a98029123c50e8635cf4dd1aebaf3536d12b6498e76d36f65c14a7782268cfcbb4a6e99339e634b859ae29189a35b26d51776e1f41dd2011aa1f36f5a9b130ef5d33391e6a96cf0b368f52c61f0656f861e02ed16e8f93ffb710f08f6098350f0c24835073a35aeb2d510cae6c04a2a4569023fa5e5680030a8c6c98493045cf6a99881f811213c561fed46b5f61a4434c833f77782cdd6a26f1c3a8ec25bb81a70f8cbeb60011467b4826918e47c63a7637b05cecf7809a26a98169d8327aca3979a7ffa66460be395642b72a345bec2773339d5cdf626e11c2cafd9ce078ce0ebe3eef1c1702abee5804da9b79cf83e9c2e1d27bc68777292b4448813a9f162ee2e19fb772efa5f6c3194a0f2e85d74530 -siglen = 2856 -corrupt_offset = 21 -corrupt_mask = 0x5d -msg corrupted = f938059fabb8535c22d81de3d5c9cef85c3fabf15dbf93a125ebb573ae3587f45c4993d92e0fb01cacaac079e4afe7804ae0f9f6b0046548f9e4bae748ddfaf45256074bd1182ed0151e5c2c3a5d661879b8961871f6125cdab93cf19f2038b4986329a118c57f56d2a2e22b9b5ef72364dc87b18f77161633cfba7fe12571ab -result = Fail - -count = 19 -label = stateless corrupt after byte32 mlen=128 -seed = 3dcfbe0108e95fb448d21827008fb8c52321adf5ebd2e2c4e7f0f5531a7f2cd264ad8f29032ac503d24b4845be4dcb7c -mlen = 128 -msg = f938059fabb8535c22d81de3d5c9cef85c3fabf15de293a125ebb573ae3587f45c4993d92e0fb01cacaac079e4afe7804ae0f9f6b0046548f9e4bae748ddfaf45256074bd1182ed0151e5c2c3a5d661879b8961871f6125cdab93cf19f2038b4986329a118c57f56d2a2e22b9b5ef72364dc87b18f77161633cfba7fe12571ab -pk = 64ad8f29032ac503d24b4845be4dcb7c5e2d4e94add23c300f0e872832ba9a18 -sig = b70d5db5639c5f5d5dba808c3896e6cb044c1d23b2d106e771c473c1259026e3e07e99f9d738ee408c7150daa811426b21407ac242f372726e43d7331da538040de9c0f7d991cca01407b3981de020ee4054385044116f83b723f09ead63f1f658d62a7388431cb68877f7cfe9fdf6fe0c5e64fe5c96633bfe6eb72d93abf06aad9629c2ce5818019d82f48408ef7c91471d4b99bcd09e35f0a8f661540ecdf28c5cbbc534f04f7fbf9a429f774f3c943372e21d37937ee24fc4a4b820ca41c5e4972e6782d1caf5328e19fbbfe46714dd984ff6680df66898228167501a384f7d8c5c85364e91de695f26e23984f52b86ede6f4ebb1adbe1da004592a0cbdae1dd1b54f61db52b533d457fd7a0040edc58c1f6c9b6e962f5e8889ebcac8a5ef73583f457239a267d6250f7fbbcbdb7025673695198e7ce0d1ecc2f10567e3a54f0eea66e5e884bb9260b81d0eb7481b508f291f71b83594bf396906b946dbe43ebdee86679121a79d173a7d9263dbf9eed14e62ad7b23a895c44474c03731f312d5b063ddd9d760e1d38449103fa7c4c6c1bfb94d2a55d7f75a9b863868673b0ffb789f96a0a78dcc1e8fec82758da3db29fd063994f9f53cb7e0668108ca8ca321c180f44ba0110448c8081f902947659bd1103adaaa2cea7ab94da9380cc7ae81fd707ae07df6a53dd0737c632c84e736e024e96cf1a2c495ccf690d73b9f094f0517cd1007324314080baa1a3df5d60b7b5e2e4c46a227a317e15052deba727d9abb9cebd5a764a6369251de0ac0a0e120d224f0c52c3b3184b024628181fdfdfa887bd8ddd5c49057676eb6dd7ae4c7c9cb15b14d919779c1f28aba463e1bd721f1cd6933088a4067ab3fa156812f530f378c30f19a4c356edc53f463ab732f18cc26672f23ff3861123ecda145667a13e7b885d20c5edfaadb28f1d7dc11436be2a8cd54397123365c529f1f122cca5d51939e56a3426b6b5730a2bb16ffa1395e6f05a80bcdf54832ec3dce64dda13f4ca93745f187cfd59c49e15f8d5702d5025fa545887f7f72246b02d3c9383951f4d1e94aff71a056cceb249431db0c7a45e20c94daeced1e7e39749f9fa84e290a6617c2b9d7373afda2248008060018a6a78868efa39d58fff9a0fe94778f8206e25de57ae16ba6fed301f3ebbffde7d2835972e9de0c659e7cb10d3b074eb3781be425e5c236393134912e74d1c89f552c352ce2696a804c48ae0a21de12efa3c91e9f4ac8dca4c56ddbec52ff4c6392d8d20d887fd008dc39446647bad054833d6aa9a55b98bafcbb185f8347cad96a9a5ac8cb91e4a031119198654c166b40c825a578082e2b614ad3a8729890d89f321edc11040f7da68b55be5f0ac012077e9e9bd4d6904adba0a62c1e56895ccacb4f48bec2c1690056f292c63b0f7137e6ea4ba7146324af331b5aafeb257b5fa16732c839d2064133241e943414ee05601191cd1d3fb343b437a2edbf5391b146382a0c7eb4c1e1933610af9945ffe76e46b7a9cebbc6060f212672f88a2948c437c54f70524760d504531a4208493396c9adb3babb6f03c5fa43d54566ef5f51f56aeb4d6fb93f97a71cce5978add0fe35c744c8ef636ac99164ea4f817b7a2f0d569b017d5bcf5d8d457887f1f46fc7705c395b9fb896989fca4d7e1ee443756d6c4c7aea942e0ab777efda7a2e8137cd044a15c928ff40ddea8474338ea535e2564d379815135e4eaf4152d1acfdf274a1768ba39ce934bc11002f743700b8bbd7207e5fad5b56ff18dbc63446f95b8787bab54bb781b9fd16c01e7e7d1843b494b26feaa66fb3feccdf99cbda1db82464bb05133b80fbc9415cf86e9a807e7428326a3308e62d6c1ecc2ef817f8df57eb9100be5dbae84aff2aad83588ea230cf061a952bf6a52c14f4f5f3e17628019043d2380dbe82435fbab55572d3aad15ea32a43d303d0f16583c6f9e691d439cf8c36e64b13bbc30b6ae918a0cdd601b63e4cb53d9939f51fd0aa54c48255f628b6642b2dfe7a899f908c7f4a16de1b2abe157844299f74312586c4d61613a639fc5baabbcec4883970c0d4d71cb3002471f97c06b9522d5b06f74747e4be4b96feb396cebb0b8e9a0eaa44194d38d8726bda6296d171a9c00d8cc5c0aecb80412a88838793f8b1470dfaf794072c2a10b0adb9dbb4f516ceee82eacfa0a778ee6a7031b817c7783128ef1ff10ccb05a70d02e7e5d0aee1a6a854b90ff0f72e32c759d8b5d5892f04ff5405645aee2f8c93567db52315a1ff7e41d73e6816ee626bf03b97371aa53622ec2d71320dc41ab011d1e4b15201bdd6bda8215ccd0ff6e2cdef8209fcce7f41d73f405e0301dea454b9440693f92ebc749714e0dbd3d06af08ca9c2a11710575a5fbe03b072abd20d465b86b399e11eedfe78caaa80065681df2ede0a92eeee716fff82c5a16a1843317df6f15f5d81d3186a7b87fa242b3b8627023b8582fcf03b34d578180afda2d25928103da764a3a113794a2280cc7c549369cb47f99acc1f964edd08c608d8ba1e267781fc3446546e196855c6f0f1351d1bcc71b536aaff3aafca1d95f02dc24331ce0bcd59d9d993b89c235e74674ed5dcfc0e8903df7d63e68d414d6d7c38482b3a8c6e323711a6dc841a5c642664f57f5513d5f7b9a00fff92917d7d3326bcc43844eb2684bad1b5c2c7f377b411695a060506780000037e2693e8fdce0bcd369f0b8e45234f7b48453b544b2cd1e8e191df57ef6b0b0cb02e24d2e8b4c0b65e25145b87c6dbaff28c90260fc0c2246b8fe0e6dcb3bd1f341469b88dd76834fc635c50b37f8550aaa204390ecaabfd597e4378c883b2c63facb90440a22de071b19f414ada2d07c31bce1faacbac7ff4ecdc5adbcd289abfe87fdc5b3887de8013202ae77633b64ad940ba39ee07bf7f6338e2e11001340b5f2c0aa1f5a8be13e116125c5a55b734cc04abd9bd453c4c4fd96b54eee877a7f0c2d25db55101c50f827764bce9fb01cda068cc7e07e3b9741214fe51bcaf5b77c09bf568ad2ba7ad9d64c2c54d61e5fd10cdb5ab9c330d4ded1f3c813a2a489ab406bb2566856985d7454667edea6ca9c3b21d70f909b86d1f91fa997a708024244dfebfe09c1adbf790c848964160dc259a7215aad2f1051772138f6c936ac55dda5162f6460198515337835b6158245bf94e8158038d34ef54dc6b629b9b1f275b8d38e3a417cadef30ba4f824882a75c13fec8c917009e8efb4d182bbfc1d79adc8a0658f0c3c290d15a820b900010c5bea91388e0bea69c7646d29c313e3477a4021ab0b4ebb53d666012623149983c365e4204e03d9256e4641964d06796c420ee21f39818f32be84e6faa3c33670f783157600dbc993f16221c0a3080000001d2b84771ab61802a8e5ed2e63c7ae27b75fae6c392cff8d83595a4817bf79104f95437e283f30e5a7ad835bebb1f59996ad0755ad0f6b9f8f5336c5f8b0f805f80d886dc748e2708e64859f2b48347e23bebfe92a4647f42fae4a89354e77eb1eb9448716acb5189125215ab6e8905833214bfa76072a3ea3703726f88eac841e44f83aeaba5f68f79eb49adf840fbb190465bf8cbb76d31957bbacb1aaa97a56831f2b42702e1ffcef87277c5e77a98029123c50e8635cf4dd1aebaf3536d12b6498e76d36f65c14a7782268cfcbb4a6e99339e634b859ae29189a35b26d51776e1f41dd2011aa1f36f5a9b130ef5d33391e6a96cf0b368f52c61f0656f861e02ed16e8f93ffb710f08f6098350f0c24835073a35aeb2d510cae6c04a2a4569023fa5e5680030a8c6c98493045cf6a99881f811213c561fed46b5f61a4434c833f77782cdd6a26f1c3a8ec25bb81a70f8cbeb60011467b4826918e47c63a7637b05cecf7809a26a98169d8327aca3979a7ffa66460be395642b72a345bec2773339d5cdf626e11c2cafd9ce078ce0ebe3eef1c1702abee5804da9b79cf83e9c2e1d27bc68777292b4448813a9f162ee2e19fb772efa5f6c3194a0f2e85d74530 -siglen = 2856 -corrupt_offset = 61 -corrupt_mask = 0x3a -msg corrupted = f938059fabb8535c22d81de3d5c9cef85c3fabf15de293a125ebb573ae3587f45c4993d92e0fb01cacaac079e4afe7804ae0f9f6b0046548f9e4bae748e7faf45256074bd1182ed0151e5c2c3a5d661879b8961871f6125cdab93cf19f2038b4986329a118c57f56d2a2e22b9b5ef72364dc87b18f77161633cfba7fe12571ab -result = Pass - +result = Fail \ No newline at end of file