#include "tests.h" #include #include #include #include #include using namespace Botan; namespace { size_t mac_test(const std::string& algo, const std::string& key_hex, const std::string& in_hex, const std::string& out_hex) { Algorithm_Factory& af = global_state().algorithm_factory(); const auto providers = af.providers_of(algo); size_t fails = 0; for(auto provider: providers) { auto proto = af.prototype_mac(algo, provider); if(!proto) { std::cout << "Unable to get " << algo << " from " << provider << "\n"; ++fails; continue; } std::unique_ptr mac(proto->clone()); mac->set_key(hex_decode(key_hex)); mac->update(hex_decode(in_hex)); auto h = mac->final(); if(h != hex_decode_locked(out_hex)) { std::cout << algo << " " << provider << " got " << hex_encode(h) << " != " << out_hex << "\n"; ++fails; } } return fails; } } size_t test_mac() { std::ifstream vec(TEST_DATA_DIR "/mac.vec"); return run_tests_bb(vec, "Mac", "Out", true, [](std::map m) -> size_t { return mac_test(m["Mac"], m["Key"], m["In"], m["Out"]); }); }