1 // Copyright (c) 2020 The Bitcoin Core developers 2 // Distributed under the MIT software license, see the accompanying 3 // file COPYING or http://www.opensource.org/licenses/mit-license.php. 4 5 #include <crypto/aes.h> 6 #include <test/fuzz/FuzzedDataProvider.h> 7 #include <test/fuzz/fuzz.h> 8 #include <test/fuzz/util.h> 9 10 #include <cassert> 11 #include <cstdint> 12 #include <vector> 13 test_one_input(const std::vector<uint8_t> & buffer)14void test_one_input(const std::vector<uint8_t>& buffer) 15 { 16 FuzzedDataProvider fuzzed_data_provider{buffer.data(), buffer.size()}; 17 const std::vector<uint8_t> key = ConsumeFixedLengthByteVector(fuzzed_data_provider, AES256_KEYSIZE); 18 19 AES256Encrypt encrypt{key.data()}; 20 AES256Decrypt decrypt{key.data()}; 21 22 while (fuzzed_data_provider.ConsumeBool()) { 23 const std::vector<uint8_t> plaintext = ConsumeFixedLengthByteVector(fuzzed_data_provider, AES_BLOCKSIZE); 24 std::vector<uint8_t> ciphertext(AES_BLOCKSIZE); 25 encrypt.Encrypt(ciphertext.data(), plaintext.data()); 26 std::vector<uint8_t> decrypted_plaintext(AES_BLOCKSIZE); 27 decrypt.Decrypt(decrypted_plaintext.data(), ciphertext.data()); 28 assert(decrypted_plaintext == plaintext); 29 } 30 } 31