Coverage Report

Created: 2026-07-29 23:27

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/tmp/bitcoin/src/crypto/common.h
Line
Count
Source
1
// Copyright (c) 2014-present 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
#ifndef BITCOIN_CRYPTO_COMMON_H
6
#define BITCOIN_CRYPTO_COMMON_H
7
8
#include <compat/endian.h>
9
10
#include <concepts>
11
#include <cstddef>
12
#include <cstdint>
13
#include <cstring>
14
15
template <typename B>
16
concept ByteType = std::same_as<B, unsigned char> || std::same_as<B, std::byte>;
17
18
template <ByteType B>
19
inline uint16_t ReadLE16(const B* ptr)
20
22.6k
{
21
22.6k
    uint16_t x;
22
22.6k
    memcpy(&x, ptr, 2);
23
22.6k
    return le16toh_internal(x);
24
22.6k
}
25
26
template <ByteType B>
27
inline uint32_t ReadLE32(const B* ptr)
28
858M
{
29
858M
    uint32_t x;
30
858M
    memcpy(&x, ptr, 4);
31
858M
    return le32toh_internal(x);
32
858M
}
unsigned int ReadLE32<unsigned char>(unsigned char const*)
Line
Count
Source
28
722M
{
29
722M
    uint32_t x;
30
722M
    memcpy(&x, ptr, 4);
31
722M
    return le32toh_internal(x);
32
722M
}
unsigned int ReadLE32<std::byte>(std::byte const*)
Line
Count
Source
28
135M
{
29
135M
    uint32_t x;
30
135M
    memcpy(&x, ptr, 4);
31
135M
    return le32toh_internal(x);
32
135M
}
33
34
template <ByteType B>
35
inline uint64_t ReadLE64(const B* ptr)
36
1.14G
{
37
1.14G
    uint64_t x;
38
1.14G
    memcpy(&x, ptr, 8);
39
1.14G
    return le64toh_internal(x);
40
1.14G
}
unsigned long ReadLE64<unsigned char>(unsigned char const*)
Line
Count
Source
36
1.11G
{
37
1.11G
    uint64_t x;
38
1.11G
    memcpy(&x, ptr, 8);
39
1.11G
    return le64toh_internal(x);
40
1.11G
}
unsigned long ReadLE64<std::byte>(std::byte const*)
Line
Count
Source
36
34.3M
{
37
34.3M
    uint64_t x;
38
34.3M
    memcpy(&x, ptr, 8);
39
34.3M
    return le64toh_internal(x);
40
34.3M
}
41
42
template <ByteType B>
43
inline void WriteLE16(B* ptr, uint16_t x)
44
377
{
45
377
    uint16_t v = htole16_internal(x);
46
377
    memcpy(ptr, &v, 2);
47
377
}
48
49
template <ByteType B>
50
inline void WriteLE32(B* ptr, uint32_t x)
51
318M
{
52
318M
    uint32_t v = htole32_internal(x);
53
318M
    memcpy(ptr, &v, 4);
54
318M
}
void WriteLE32<unsigned char>(unsigned char*, unsigned int)
Line
Count
Source
51
39.4M
{
52
39.4M
    uint32_t v = htole32_internal(x);
53
39.4M
    memcpy(ptr, &v, 4);
54
39.4M
}
void WriteLE32<std::byte>(std::byte*, unsigned int)
Line
Count
Source
51
278M
{
52
278M
    uint32_t v = htole32_internal(x);
53
278M
    memcpy(ptr, &v, 4);
54
278M
}
55
56
template <ByteType B>
57
inline void WriteLE64(B* ptr, uint64_t x)
58
15.8M
{
59
15.8M
    uint64_t v = htole64_internal(x);
60
15.8M
    memcpy(ptr, &v, 8);
61
15.8M
}
void WriteLE64<unsigned char>(unsigned char*, unsigned long)
Line
Count
Source
58
13.0M
{
59
13.0M
    uint64_t v = htole64_internal(x);
60
13.0M
    memcpy(ptr, &v, 8);
61
13.0M
}
void WriteLE64<std::byte>(std::byte*, unsigned long)
Line
Count
Source
58
2.79M
{
59
2.79M
    uint64_t v = htole64_internal(x);
60
2.79M
    memcpy(ptr, &v, 8);
61
2.79M
}
62
63
template <ByteType B>
64
inline uint16_t ReadBE16(const B* ptr)
65
18.9k
{
66
18.9k
    uint16_t x;
67
18.9k
    memcpy(&x, ptr, 2);
68
18.9k
    return be16toh_internal(x);
69
18.9k
}
70
71
template <ByteType B>
72
inline uint32_t ReadBE32(const B* ptr)
73
1.30G
{
74
1.30G
    uint32_t x;
75
1.30G
    memcpy(&x, ptr, 4);
76
1.30G
    return be32toh_internal(x);
77
1.30G
}
unsigned int ReadBE32<unsigned char>(unsigned char const*)
Line
Count
Source
73
1.30G
{
74
1.30G
    uint32_t x;
75
1.30G
    memcpy(&x, ptr, 4);
76
1.30G
    return be32toh_internal(x);
77
1.30G
}
unsigned int ReadBE32<std::byte>(std::byte const*)
Line
Count
Source
73
48
{
74
48
    uint32_t x;
75
48
    memcpy(&x, ptr, 4);
76
48
    return be32toh_internal(x);
77
48
}
78
79
template <ByteType B>
80
inline uint64_t ReadBE64(const B* ptr)
81
645M
{
82
645M
    uint64_t x;
83
645M
    memcpy(&x, ptr, 8);
84
645M
    return be64toh_internal(x);
85
645M
}
86
87
template <ByteType B>
88
inline void WriteBE16(B* ptr, uint16_t x)
89
20
{
90
20
    uint16_t v = htobe16_internal(x);
91
20
    memcpy(ptr, &v, 2);
92
20
}
93
94
template <ByteType B>
95
inline void WriteBE32(B* ptr, uint32_t x)
96
759M
{
97
759M
    uint32_t v = htobe32_internal(x);
98
759M
    memcpy(ptr, &v, 4);
99
759M
}
100
101
template <ByteType B>
102
inline void WriteBE64(B* ptr, uint64_t x)
103
437M
{
104
437M
    uint64_t v = htobe64_internal(x);
105
437M
    memcpy(ptr, &v, 8);
106
437M
}
107
108
#endif // BITCOIN_CRYPTO_COMMON_H