Coverage Report

Created: 2024-10-21 15:10

/root/bitcoin/src/test/fuzz/crypto_poly1305.cpp
Line
Count
Source (jump to first uncovered line)
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/poly1305.h>
6
#include <test/fuzz/FuzzedDataProvider.h>
7
#include <test/fuzz/fuzz.h>
8
#include <test/fuzz/util.h>
9
10
#include <cstdint>
11
#include <vector>
12
13
FUZZ_TARGET(crypto_poly1305)
14
0
{
15
0
    FuzzedDataProvider fuzzed_data_provider{buffer.data(), buffer.size()};
16
17
0
    const auto key = ConsumeFixedLengthByteVector<std::byte>(fuzzed_data_provider, Poly1305::KEYLEN);
18
0
    const auto in = ConsumeRandomLengthByteVector<std::byte>(fuzzed_data_provider);
19
20
0
    std::vector<std::byte> tag_out(Poly1305::TAGLEN);
21
0
    Poly1305{key}.Update(in).Finalize(tag_out);
22
0
}
23
24
FUZZ_TARGET(crypto_poly1305_split)
25
0
{
26
0
    FuzzedDataProvider provider{buffer.data(), buffer.size()};
27
28
    // Read key and instantiate two Poly1305 objects with it.
29
0
    auto key = provider.ConsumeBytes<std::byte>(Poly1305::KEYLEN);
30
0
    key.resize(Poly1305::KEYLEN);
31
0
    Poly1305 poly_full{key}, poly_split{key};
32
33
    // Vector that holds all bytes processed so far.
34
0
    std::vector<std::byte> total_input;
35
36
    // Process input in pieces.
37
0
    LIMITED_WHILE(provider.remaining_bytes(), 100) {
38
0
        auto in = ConsumeRandomLengthByteVector<std::byte>(provider);
39
0
        poly_split.Update(in);
40
        // Update total_input to match what was processed.
41
0
        total_input.insert(total_input.end(), in.begin(), in.end());
42
0
    }
43
44
    // Process entire input at once.
45
0
    poly_full.Update(total_input);
46
47
    // Verify both agree.
48
0
    std::array<std::byte, Poly1305::TAGLEN> tag_split, tag_full;
49
0
    poly_split.Finalize(tag_split);
50
0
    poly_full.Finalize(tag_full);
51
0
    assert(tag_full == tag_split);
52
0
}