/* * (C) 2017 Jack Lloyd * * Botan is released under the Simplified BSD License (see license.txt) */ #include "tests.h" #if defined(BOTAN_HAS_AEAD_SIV) #include #include #include #endif namespace Botan_Tests { namespace { #if defined(BOTAN_HAS_AEAD_SIV) class SIV_Tests final : public Text_Based_Test { public: SIV_Tests() : Text_Based_Test("siv_ad.vec", "Key,Nonce,ADs,In,Out") {} Test::Result run_one_test(const std::string& algo, const VarMap& vars) override { const std::vector key = get_req_bin(vars, "Key"); const std::vector nonce = get_opt_bin(vars, "Nonce"); const std::vector input = get_req_bin(vars, "In"); const std::vector expected = get_req_bin(vars, "Out"); const std::vector ad_list = Botan::split_on(get_req_str(vars, "ADs"), ','); Test::Result result(algo + "/SIV"); std::unique_ptr siv( new Botan::SIV_Encryption(Botan::BlockCipher::create(algo).release())); siv->set_key(key); for(size_t i = 0; i != ad_list.size(); ++i) { std::vector ad = Botan::hex_decode(ad_list[i]); siv->set_associated_data_n(i, ad.data(), ad.size()); } Botan::secure_vector buf(input.begin(), input.end()); siv->start(nonce); siv->finish(buf, 0); result.test_eq("SIV ciphertext", buf, expected); return result; } }; BOTAN_REGISTER_TEST("siv_ad", SIV_Tests); #endif } }