int ret = yaca_verify_finalize(ctx.get(), output.data(), output_len);
YACA_ASSERT_MSG(YACA_ERROR_NONE == ret,
"Verification failed for \"" << truncate_str(input, 16) << "\" with "
- << digest2str(algo) << " and " << keytype2str(key_type) << " key" );
+ << digest2str(algo) << " and " << keytype2str(key_type) << " key");
+
+ std::string input_wrong = input + "!";
+ ctx = verify_init(algo, key_pub);
+
+ for (size_t i = 0; i < repeats; i++)
+ YACA_SUCCESS(yaca_verify_update(ctx.get(),
+ input_wrong.c_str(),
+ input_wrong.size()));
+
+ ret = yaca_verify_finalize(ctx.get(), output.data(), output_len);
+ YACA_ASSERT_MSG(YACA_ERROR_DATA_MISMATCH == ret,
+ "Verification succeeded for \"" << truncate_str(input, 16) << "\" with "
+ << digest2str(algo) << " and " << keytype2str(key_type)
+ << " key while the input was tampered with");
}
}