fuzz coverage

Coverage Report

Created: 2025-10-29 15:27

/Users/eugenesiegel/btc/bitcoin/src/crypto/siphash.cpp
Line
Count
Source
1
// Copyright (c) 2016-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
#include <crypto/siphash.h>
6
7
#include <bit>
8
9
3.16G
#define SIPROUND do { \
10
3.16G
    v0 += v1; v1 = std::rotl(v1, 13); v1 ^= v0; \
11
3.16G
    v0 = std::rotl(v0, 32); \
12
3.16G
    v2 += v3; v3 = std::rotl(v3, 16); v3 ^= v2; \
13
3.16G
    v0 += v3; v3 = std::rotl(v3, 21); v3 ^= v0; \
14
3.16G
    v2 += v1; v1 = std::rotl(v1, 17); v1 ^= v2; \
15
3.16G
    v2 = std::rotl(v2, 32); \
16
3.16G
} while (0)
17
18
CSipHasher::CSipHasher(uint64_t k0, uint64_t k1)
19
23.9k
{
20
23.9k
    v[0] = 0x736f6d6570736575ULL ^ k0;
21
23.9k
    v[1] = 0x646f72616e646f6dULL ^ k1;
22
23.9k
    v[2] = 0x6c7967656e657261ULL ^ k0;
23
23.9k
    v[3] = 0x7465646279746573ULL ^ k1;
24
23.9k
    count = 0;
25
23.9k
    tmp = 0;
26
23.9k
}
27
28
CSipHasher& CSipHasher::Write(uint64_t data)
29
47.8k
{
30
47.8k
    uint64_t v0 = v[0], v1 = v[1], v2 = v[2], v3 = v[3];
31
32
47.8k
    assert(count % 8 == 0);
33
34
47.8k
    v3 ^= data;
35
47.8k
    SIPROUND;
Line
Count
Source
9
47.8k
#define SIPROUND do { \
10
47.8k
    v0 += v1; v1 = std::rotl(v1, 13); v1 ^= v0; \
11
47.8k
    v0 = std::rotl(v0, 32); \
12
47.8k
    v2 += v3; v3 = std::rotl(v3, 16); v3 ^= v2; \
13
47.8k
    v0 += v3; v3 = std::rotl(v3, 21); v3 ^= v0; \
14
47.8k
    v2 += v1; v1 = std::rotl(v1, 17); v1 ^= v2; \
15
47.8k
    v2 = std::rotl(v2, 32); \
16
47.8k
} while (0)
36
47.8k
    SIPROUND;
Line
Count
Source
9
47.8k
#define SIPROUND do { \
10
47.8k
    v0 += v1; v1 = std::rotl(v1, 13); v1 ^= v0; \
11
47.8k
    v0 = std::rotl(v0, 32); \
12
47.8k
    v2 += v3; v3 = std::rotl(v3, 16); v3 ^= v2; \
13
47.8k
    v0 += v3; v3 = std::rotl(v3, 21); v3 ^= v0; \
14
47.8k
    v2 += v1; v1 = std::rotl(v1, 17); v1 ^= v2; \
15
47.8k
    v2 = std::rotl(v2, 32); \
16
47.8k
} while (0)
37
47.8k
    v0 ^= data;
38
39
47.8k
    v[0] = v0;
40
47.8k
    v[1] = v1;
41
47.8k
    v[2] = v2;
42
47.8k
    v[3] = v3;
43
44
47.8k
    count += 8;
45
47.8k
    return *this;
46
47.8k
}
47
48
CSipHasher& CSipHasher::Write(std::span<const unsigned char> data)
49
23.9k
{
50
23.9k
    uint64_t v0 = v[0], v1 = v[1], v2 = v[2], v3 = v[3];
51
23.9k
    uint64_t t = tmp;
52
23.9k
    uint8_t c = count;
53
54
302k
    while (data.size() > 0) {
55
278k
        t |= uint64_t{data.front()} << (8 * (c % 8));
56
278k
        c++;
57
278k
        if ((c & 7) == 0) {
58
28.3k
            v3 ^= t;
59
28.3k
            SIPROUND;
Line
Count
Source
9
28.3k
#define SIPROUND do { \
10
28.3k
    v0 += v1; v1 = std::rotl(v1, 13); v1 ^= v0; \
11
28.3k
    v0 = std::rotl(v0, 32); \
12
28.3k
    v2 += v3; v3 = std::rotl(v3, 16); v3 ^= v2; \
13
28.3k
    v0 += v3; v3 = std::rotl(v3, 21); v3 ^= v0; \
14
28.3k
    v2 += v1; v1 = std::rotl(v1, 17); v1 ^= v2; \
15
28.3k
    v2 = std::rotl(v2, 32); \
16
28.3k
} while (0)
60
28.3k
            SIPROUND;
Line
Count
Source
9
28.3k
#define SIPROUND do { \
10
28.3k
    v0 += v1; v1 = std::rotl(v1, 13); v1 ^= v0; \
11
28.3k
    v0 = std::rotl(v0, 32); \
12
28.3k
    v2 += v3; v3 = std::rotl(v3, 16); v3 ^= v2; \
13
28.3k
    v0 += v3; v3 = std::rotl(v3, 21); v3 ^= v0; \
14
28.3k
    v2 += v1; v1 = std::rotl(v1, 17); v1 ^= v2; \
15
28.3k
    v2 = std::rotl(v2, 32); \
16
28.3k
} while (0)
61
28.3k
            v0 ^= t;
62
28.3k
            t = 0;
63
28.3k
        }
64
278k
        data = data.subspan(1);
65
278k
    }
66
67
23.9k
    v[0] = v0;
68
23.9k
    v[1] = v1;
69
23.9k
    v[2] = v2;
70
23.9k
    v[3] = v3;
71
23.9k
    count = c;
72
23.9k
    tmp = t;
73
74
23.9k
    return *this;
75
23.9k
}
76
77
uint64_t CSipHasher::Finalize() const
78
23.9k
{
79
23.9k
    uint64_t v0 = v[0], v1 = v[1], v2 = v[2], v3 = v[3];
80
81
23.9k
    uint64_t t = tmp | (((uint64_t)count) << 56);
82
83
23.9k
    v3 ^= t;
84
23.9k
    SIPROUND;
Line
Count
Source
9
23.9k
#define SIPROUND do { \
10
23.9k
    v0 += v1; v1 = std::rotl(v1, 13); v1 ^= v0; \
11
23.9k
    v0 = std::rotl(v0, 32); \
12
23.9k
    v2 += v3; v3 = std::rotl(v3, 16); v3 ^= v2; \
13
23.9k
    v0 += v3; v3 = std::rotl(v3, 21); v3 ^= v0; \
14
23.9k
    v2 += v1; v1 = std::rotl(v1, 17); v1 ^= v2; \
15
23.9k
    v2 = std::rotl(v2, 32); \
16
23.9k
} while (0)
85
23.9k
    SIPROUND;
Line
Count
Source
9
23.9k
#define SIPROUND do { \
10
23.9k
    v0 += v1; v1 = std::rotl(v1, 13); v1 ^= v0; \
11
23.9k
    v0 = std::rotl(v0, 32); \
12
23.9k
    v2 += v3; v3 = std::rotl(v3, 16); v3 ^= v2; \
13
23.9k
    v0 += v3; v3 = std::rotl(v3, 21); v3 ^= v0; \
14
23.9k
    v2 += v1; v1 = std::rotl(v1, 17); v1 ^= v2; \
15
23.9k
    v2 = std::rotl(v2, 32); \
16
23.9k
} while (0)
86
23.9k
    v0 ^= t;
87
23.9k
    v2 ^= 0xFF;
88
23.9k
    SIPROUND;
Line
Count
Source
9
23.9k
#define SIPROUND do { \
10
23.9k
    v0 += v1; v1 = std::rotl(v1, 13); v1 ^= v0; \
11
23.9k
    v0 = std::rotl(v0, 32); \
12
23.9k
    v2 += v3; v3 = std::rotl(v3, 16); v3 ^= v2; \
13
23.9k
    v0 += v3; v3 = std::rotl(v3, 21); v3 ^= v0; \
14
23.9k
    v2 += v1; v1 = std::rotl(v1, 17); v1 ^= v2; \
15
23.9k
    v2 = std::rotl(v2, 32); \
16
23.9k
} while (0)
89
23.9k
    SIPROUND;
Line
Count
Source
9
23.9k
#define SIPROUND do { \
10
23.9k
    v0 += v1; v1 = std::rotl(v1, 13); v1 ^= v0; \
11
23.9k
    v0 = std::rotl(v0, 32); \
12
23.9k
    v2 += v3; v3 = std::rotl(v3, 16); v3 ^= v2; \
13
23.9k
    v0 += v3; v3 = std::rotl(v3, 21); v3 ^= v0; \
14
23.9k
    v2 += v1; v1 = std::rotl(v1, 17); v1 ^= v2; \
15
23.9k
    v2 = std::rotl(v2, 32); \
16
23.9k
} while (0)
90
23.9k
    SIPROUND;
Line
Count
Source
9
23.9k
#define SIPROUND do { \
10
23.9k
    v0 += v1; v1 = std::rotl(v1, 13); v1 ^= v0; \
11
23.9k
    v0 = std::rotl(v0, 32); \
12
23.9k
    v2 += v3; v3 = std::rotl(v3, 16); v3 ^= v2; \
13
23.9k
    v0 += v3; v3 = std::rotl(v3, 21); v3 ^= v0; \
14
23.9k
    v2 += v1; v1 = std::rotl(v1, 17); v1 ^= v2; \
15
23.9k
    v2 = std::rotl(v2, 32); \
16
23.9k
} while (0)
91
23.9k
    SIPROUND;
Line
Count
Source
9
23.9k
#define SIPROUND do { \
10
23.9k
    v0 += v1; v1 = std::rotl(v1, 13); v1 ^= v0; \
11
23.9k
    v0 = std::rotl(v0, 32); \
12
23.9k
    v2 += v3; v3 = std::rotl(v3, 16); v3 ^= v2; \
13
23.9k
    v0 += v3; v3 = std::rotl(v3, 21); v3 ^= v0; \
14
23.9k
    v2 += v1; v1 = std::rotl(v1, 17); v1 ^= v2; \
15
23.9k
    v2 = std::rotl(v2, 32); \
16
23.9k
} while (0)
92
23.9k
    return v0 ^ v1 ^ v2 ^ v3;
93
23.9k
}
94
95
uint64_t SipHashUint256(uint64_t k0, uint64_t k1, const uint256& val)
96
96.4M
{
97
    /* Specialized implementation for efficiency */
98
96.4M
    uint64_t d = val.GetUint64(0);
99
100
96.4M
    uint64_t v0 = 0x736f6d6570736575ULL ^ k0;
101
96.4M
    uint64_t v1 = 0x646f72616e646f6dULL ^ k1;
102
96.4M
    uint64_t v2 = 0x6c7967656e657261ULL ^ k0;
103
96.4M
    uint64_t v3 = 0x7465646279746573ULL ^ k1 ^ d;
104
105
96.4M
    SIPROUND;
Line
Count
Source
9
96.4M
#define SIPROUND do { \
10
96.4M
    v0 += v1; v1 = std::rotl(v1, 13); v1 ^= v0; \
11
96.4M
    v0 = std::rotl(v0, 32); \
12
96.4M
    v2 += v3; v3 = std::rotl(v3, 16); v3 ^= v2; \
13
96.4M
    v0 += v3; v3 = std::rotl(v3, 21); v3 ^= v0; \
14
96.4M
    v2 += v1; v1 = std::rotl(v1, 17); v1 ^= v2; \
15
96.4M
    v2 = std::rotl(v2, 32); \
16
96.4M
} while (0)
106
96.4M
    SIPROUND;
Line
Count
Source
9
96.4M
#define SIPROUND do { \
10
96.4M
    v0 += v1; v1 = std::rotl(v1, 13); v1 ^= v0; \
11
96.4M
    v0 = std::rotl(v0, 32); \
12
96.4M
    v2 += v3; v3 = std::rotl(v3, 16); v3 ^= v2; \
13
96.4M
    v0 += v3; v3 = std::rotl(v3, 21); v3 ^= v0; \
14
96.4M
    v2 += v1; v1 = std::rotl(v1, 17); v1 ^= v2; \
15
96.4M
    v2 = std::rotl(v2, 32); \
16
96.4M
} while (0)
107
96.4M
    v0 ^= d;
108
96.4M
    d = val.GetUint64(1);
109
96.4M
    v3 ^= d;
110
96.4M
    SIPROUND;
Line
Count
Source
9
96.4M
#define SIPROUND do { \
10
96.4M
    v0 += v1; v1 = std::rotl(v1, 13); v1 ^= v0; \
11
96.4M
    v0 = std::rotl(v0, 32); \
12
96.4M
    v2 += v3; v3 = std::rotl(v3, 16); v3 ^= v2; \
13
96.4M
    v0 += v3; v3 = std::rotl(v3, 21); v3 ^= v0; \
14
96.4M
    v2 += v1; v1 = std::rotl(v1, 17); v1 ^= v2; \
15
96.4M
    v2 = std::rotl(v2, 32); \
16
96.4M
} while (0)
111
96.4M
    SIPROUND;
Line
Count
Source
9
96.4M
#define SIPROUND do { \
10
96.4M
    v0 += v1; v1 = std::rotl(v1, 13); v1 ^= v0; \
11
96.4M
    v0 = std::rotl(v0, 32); \
12
96.4M
    v2 += v3; v3 = std::rotl(v3, 16); v3 ^= v2; \
13
96.4M
    v0 += v3; v3 = std::rotl(v3, 21); v3 ^= v0; \
14
96.4M
    v2 += v1; v1 = std::rotl(v1, 17); v1 ^= v2; \
15
96.4M
    v2 = std::rotl(v2, 32); \
16
96.4M
} while (0)
112
96.4M
    v0 ^= d;
113
96.4M
    d = val.GetUint64(2);
114
96.4M
    v3 ^= d;
115
96.4M
    SIPROUND;
Line
Count
Source
9
96.4M
#define SIPROUND do { \
10
96.4M
    v0 += v1; v1 = std::rotl(v1, 13); v1 ^= v0; \
11
96.4M
    v0 = std::rotl(v0, 32); \
12
96.4M
    v2 += v3; v3 = std::rotl(v3, 16); v3 ^= v2; \
13
96.4M
    v0 += v3; v3 = std::rotl(v3, 21); v3 ^= v0; \
14
96.4M
    v2 += v1; v1 = std::rotl(v1, 17); v1 ^= v2; \
15
96.4M
    v2 = std::rotl(v2, 32); \
16
96.4M
} while (0)
116
96.4M
    SIPROUND;
Line
Count
Source
9
96.4M
#define SIPROUND do { \
10
96.4M
    v0 += v1; v1 = std::rotl(v1, 13); v1 ^= v0; \
11
96.4M
    v0 = std::rotl(v0, 32); \
12
96.4M
    v2 += v3; v3 = std::rotl(v3, 16); v3 ^= v2; \
13
96.4M
    v0 += v3; v3 = std::rotl(v3, 21); v3 ^= v0; \
14
96.4M
    v2 += v1; v1 = std::rotl(v1, 17); v1 ^= v2; \
15
96.4M
    v2 = std::rotl(v2, 32); \
16
96.4M
} while (0)
117
96.4M
    v0 ^= d;
118
96.4M
    d = val.GetUint64(3);
119
96.4M
    v3 ^= d;
120
96.4M
    SIPROUND;
Line
Count
Source
9
96.4M
#define SIPROUND do { \
10
96.4M
    v0 += v1; v1 = std::rotl(v1, 13); v1 ^= v0; \
11
96.4M
    v0 = std::rotl(v0, 32); \
12
96.4M
    v2 += v3; v3 = std::rotl(v3, 16); v3 ^= v2; \
13
96.4M
    v0 += v3; v3 = std::rotl(v3, 21); v3 ^= v0; \
14
96.4M
    v2 += v1; v1 = std::rotl(v1, 17); v1 ^= v2; \
15
96.4M
    v2 = std::rotl(v2, 32); \
16
96.4M
} while (0)
121
96.4M
    SIPROUND;
Line
Count
Source
9
96.4M
#define SIPROUND do { \
10
96.4M
    v0 += v1; v1 = std::rotl(v1, 13); v1 ^= v0; \
11
96.4M
    v0 = std::rotl(v0, 32); \
12
96.4M
    v2 += v3; v3 = std::rotl(v3, 16); v3 ^= v2; \
13
96.4M
    v0 += v3; v3 = std::rotl(v3, 21); v3 ^= v0; \
14
96.4M
    v2 += v1; v1 = std::rotl(v1, 17); v1 ^= v2; \
15
96.4M
    v2 = std::rotl(v2, 32); \
16
96.4M
} while (0)
122
96.4M
    v0 ^= d;
123
96.4M
    v3 ^= (uint64_t{4}) << 59;
124
96.4M
    SIPROUND;
Line
Count
Source
9
96.4M
#define SIPROUND do { \
10
96.4M
    v0 += v1; v1 = std::rotl(v1, 13); v1 ^= v0; \
11
96.4M
    v0 = std::rotl(v0, 32); \
12
96.4M
    v2 += v3; v3 = std::rotl(v3, 16); v3 ^= v2; \
13
96.4M
    v0 += v3; v3 = std::rotl(v3, 21); v3 ^= v0; \
14
96.4M
    v2 += v1; v1 = std::rotl(v1, 17); v1 ^= v2; \
15
96.4M
    v2 = std::rotl(v2, 32); \
16
96.4M
} while (0)
125
96.4M
    SIPROUND;
Line
Count
Source
9
96.4M
#define SIPROUND do { \
10
96.4M
    v0 += v1; v1 = std::rotl(v1, 13); v1 ^= v0; \
11
96.4M
    v0 = std::rotl(v0, 32); \
12
96.4M
    v2 += v3; v3 = std::rotl(v3, 16); v3 ^= v2; \
13
96.4M
    v0 += v3; v3 = std::rotl(v3, 21); v3 ^= v0; \
14
96.4M
    v2 += v1; v1 = std::rotl(v1, 17); v1 ^= v2; \
15
96.4M
    v2 = std::rotl(v2, 32); \
16
96.4M
} while (0)
126
96.4M
    v0 ^= (uint64_t{4}) << 59;
127
96.4M
    v2 ^= 0xFF;
128
96.4M
    SIPROUND;
Line
Count
Source
9
96.4M
#define SIPROUND do { \
10
96.4M
    v0 += v1; v1 = std::rotl(v1, 13); v1 ^= v0; \
11
96.4M
    v0 = std::rotl(v0, 32); \
12
96.4M
    v2 += v3; v3 = std::rotl(v3, 16); v3 ^= v2; \
13
96.4M
    v0 += v3; v3 = std::rotl(v3, 21); v3 ^= v0; \
14
96.4M
    v2 += v1; v1 = std::rotl(v1, 17); v1 ^= v2; \
15
96.4M
    v2 = std::rotl(v2, 32); \
16
96.4M
} while (0)
129
96.4M
    SIPROUND;
Line
Count
Source
9
96.4M
#define SIPROUND do { \
10
96.4M
    v0 += v1; v1 = std::rotl(v1, 13); v1 ^= v0; \
11
96.4M
    v0 = std::rotl(v0, 32); \
12
96.4M
    v2 += v3; v3 = std::rotl(v3, 16); v3 ^= v2; \
13
96.4M
    v0 += v3; v3 = std::rotl(v3, 21); v3 ^= v0; \
14
96.4M
    v2 += v1; v1 = std::rotl(v1, 17); v1 ^= v2; \
15
96.4M
    v2 = std::rotl(v2, 32); \
16
96.4M
} while (0)
130
96.4M
    SIPROUND;
Line
Count
Source
9
96.4M
#define SIPROUND do { \
10
96.4M
    v0 += v1; v1 = std::rotl(v1, 13); v1 ^= v0; \
11
96.4M
    v0 = std::rotl(v0, 32); \
12
96.4M
    v2 += v3; v3 = std::rotl(v3, 16); v3 ^= v2; \
13
96.4M
    v0 += v3; v3 = std::rotl(v3, 21); v3 ^= v0; \
14
96.4M
    v2 += v1; v1 = std::rotl(v1, 17); v1 ^= v2; \
15
96.4M
    v2 = std::rotl(v2, 32); \
16
96.4M
} while (0)
131
96.4M
    SIPROUND;
Line
Count
Source
9
96.4M
#define SIPROUND do { \
10
96.4M
    v0 += v1; v1 = std::rotl(v1, 13); v1 ^= v0; \
11
96.4M
    v0 = std::rotl(v0, 32); \
12
96.4M
    v2 += v3; v3 = std::rotl(v3, 16); v3 ^= v2; \
13
96.4M
    v0 += v3; v3 = std::rotl(v3, 21); v3 ^= v0; \
14
96.4M
    v2 += v1; v1 = std::rotl(v1, 17); v1 ^= v2; \
15
96.4M
    v2 = std::rotl(v2, 32); \
16
96.4M
} while (0)
132
96.4M
    return v0 ^ v1 ^ v2 ^ v3;
133
96.4M
}
134
135
uint64_t SipHashUint256Extra(uint64_t k0, uint64_t k1, const uint256& val, uint32_t extra)
136
129M
{
137
    /* Specialized implementation for efficiency */
138
129M
    uint64_t d = val.GetUint64(0);
139
140
129M
    uint64_t v0 = 0x736f6d6570736575ULL ^ k0;
141
129M
    uint64_t v1 = 0x646f72616e646f6dULL ^ k1;
142
129M
    uint64_t v2 = 0x6c7967656e657261ULL ^ k0;
143
129M
    uint64_t v3 = 0x7465646279746573ULL ^ k1 ^ d;
144
145
129M
    SIPROUND;
Line
Count
Source
9
129M
#define SIPROUND do { \
10
129M
    v0 += v1; v1 = std::rotl(v1, 13); v1 ^= v0; \
11
129M
    v0 = std::rotl(v0, 32); \
12
129M
    v2 += v3; v3 = std::rotl(v3, 16); v3 ^= v2; \
13
129M
    v0 += v3; v3 = std::rotl(v3, 21); v3 ^= v0; \
14
129M
    v2 += v1; v1 = std::rotl(v1, 17); v1 ^= v2; \
15
129M
    v2 = std::rotl(v2, 32); \
16
129M
} while (0)
146
129M
    SIPROUND;
Line
Count
Source
9
129M
#define SIPROUND do { \
10
129M
    v0 += v1; v1 = std::rotl(v1, 13); v1 ^= v0; \
11
129M
    v0 = std::rotl(v0, 32); \
12
129M
    v2 += v3; v3 = std::rotl(v3, 16); v3 ^= v2; \
13
129M
    v0 += v3; v3 = std::rotl(v3, 21); v3 ^= v0; \
14
129M
    v2 += v1; v1 = std::rotl(v1, 17); v1 ^= v2; \
15
129M
    v2 = std::rotl(v2, 32); \
16
129M
} while (0)
147
129M
    v0 ^= d;
148
129M
    d = val.GetUint64(1);
149
129M
    v3 ^= d;
150
129M
    SIPROUND;
Line
Count
Source
9
129M
#define SIPROUND do { \
10
129M
    v0 += v1; v1 = std::rotl(v1, 13); v1 ^= v0; \
11
129M
    v0 = std::rotl(v0, 32); \
12
129M
    v2 += v3; v3 = std::rotl(v3, 16); v3 ^= v2; \
13
129M
    v0 += v3; v3 = std::rotl(v3, 21); v3 ^= v0; \
14
129M
    v2 += v1; v1 = std::rotl(v1, 17); v1 ^= v2; \
15
129M
    v2 = std::rotl(v2, 32); \
16
129M
} while (0)
151
129M
    SIPROUND;
Line
Count
Source
9
129M
#define SIPROUND do { \
10
129M
    v0 += v1; v1 = std::rotl(v1, 13); v1 ^= v0; \
11
129M
    v0 = std::rotl(v0, 32); \
12
129M
    v2 += v3; v3 = std::rotl(v3, 16); v3 ^= v2; \
13
129M
    v0 += v3; v3 = std::rotl(v3, 21); v3 ^= v0; \
14
129M
    v2 += v1; v1 = std::rotl(v1, 17); v1 ^= v2; \
15
129M
    v2 = std::rotl(v2, 32); \
16
129M
} while (0)
152
129M
    v0 ^= d;
153
129M
    d = val.GetUint64(2);
154
129M
    v3 ^= d;
155
129M
    SIPROUND;
Line
Count
Source
9
129M
#define SIPROUND do { \
10
129M
    v0 += v1; v1 = std::rotl(v1, 13); v1 ^= v0; \
11
129M
    v0 = std::rotl(v0, 32); \
12
129M
    v2 += v3; v3 = std::rotl(v3, 16); v3 ^= v2; \
13
129M
    v0 += v3; v3 = std::rotl(v3, 21); v3 ^= v0; \
14
129M
    v2 += v1; v1 = std::rotl(v1, 17); v1 ^= v2; \
15
129M
    v2 = std::rotl(v2, 32); \
16
129M
} while (0)
156
129M
    SIPROUND;
Line
Count
Source
9
129M
#define SIPROUND do { \
10
129M
    v0 += v1; v1 = std::rotl(v1, 13); v1 ^= v0; \
11
129M
    v0 = std::rotl(v0, 32); \
12
129M
    v2 += v3; v3 = std::rotl(v3, 16); v3 ^= v2; \
13
129M
    v0 += v3; v3 = std::rotl(v3, 21); v3 ^= v0; \
14
129M
    v2 += v1; v1 = std::rotl(v1, 17); v1 ^= v2; \
15
129M
    v2 = std::rotl(v2, 32); \
16
129M
} while (0)
157
129M
    v0 ^= d;
158
129M
    d = val.GetUint64(3);
159
129M
    v3 ^= d;
160
129M
    SIPROUND;
Line
Count
Source
9
129M
#define SIPROUND do { \
10
129M
    v0 += v1; v1 = std::rotl(v1, 13); v1 ^= v0; \
11
129M
    v0 = std::rotl(v0, 32); \
12
129M
    v2 += v3; v3 = std::rotl(v3, 16); v3 ^= v2; \
13
129M
    v0 += v3; v3 = std::rotl(v3, 21); v3 ^= v0; \
14
129M
    v2 += v1; v1 = std::rotl(v1, 17); v1 ^= v2; \
15
129M
    v2 = std::rotl(v2, 32); \
16
129M
} while (0)
161
129M
    SIPROUND;
Line
Count
Source
9
129M
#define SIPROUND do { \
10
129M
    v0 += v1; v1 = std::rotl(v1, 13); v1 ^= v0; \
11
129M
    v0 = std::rotl(v0, 32); \
12
129M
    v2 += v3; v3 = std::rotl(v3, 16); v3 ^= v2; \
13
129M
    v0 += v3; v3 = std::rotl(v3, 21); v3 ^= v0; \
14
129M
    v2 += v1; v1 = std::rotl(v1, 17); v1 ^= v2; \
15
129M
    v2 = std::rotl(v2, 32); \
16
129M
} while (0)
162
129M
    v0 ^= d;
163
129M
    d = ((uint64_t{36}) << 56) | extra;
164
129M
    v3 ^= d;
165
129M
    SIPROUND;
Line
Count
Source
9
129M
#define SIPROUND do { \
10
129M
    v0 += v1; v1 = std::rotl(v1, 13); v1 ^= v0; \
11
129M
    v0 = std::rotl(v0, 32); \
12
129M
    v2 += v3; v3 = std::rotl(v3, 16); v3 ^= v2; \
13
129M
    v0 += v3; v3 = std::rotl(v3, 21); v3 ^= v0; \
14
129M
    v2 += v1; v1 = std::rotl(v1, 17); v1 ^= v2; \
15
129M
    v2 = std::rotl(v2, 32); \
16
129M
} while (0)
166
129M
    SIPROUND;
Line
Count
Source
9
129M
#define SIPROUND do { \
10
129M
    v0 += v1; v1 = std::rotl(v1, 13); v1 ^= v0; \
11
129M
    v0 = std::rotl(v0, 32); \
12
129M
    v2 += v3; v3 = std::rotl(v3, 16); v3 ^= v2; \
13
129M
    v0 += v3; v3 = std::rotl(v3, 21); v3 ^= v0; \
14
129M
    v2 += v1; v1 = std::rotl(v1, 17); v1 ^= v2; \
15
129M
    v2 = std::rotl(v2, 32); \
16
129M
} while (0)
167
129M
    v0 ^= d;
168
129M
    v2 ^= 0xFF;
169
129M
    SIPROUND;
Line
Count
Source
9
129M
#define SIPROUND do { \
10
129M
    v0 += v1; v1 = std::rotl(v1, 13); v1 ^= v0; \
11
129M
    v0 = std::rotl(v0, 32); \
12
129M
    v2 += v3; v3 = std::rotl(v3, 16); v3 ^= v2; \
13
129M
    v0 += v3; v3 = std::rotl(v3, 21); v3 ^= v0; \
14
129M
    v2 += v1; v1 = std::rotl(v1, 17); v1 ^= v2; \
15
129M
    v2 = std::rotl(v2, 32); \
16
129M
} while (0)
170
129M
    SIPROUND;
Line
Count
Source
9
129M
#define SIPROUND do { \
10
129M
    v0 += v1; v1 = std::rotl(v1, 13); v1 ^= v0; \
11
129M
    v0 = std::rotl(v0, 32); \
12
129M
    v2 += v3; v3 = std::rotl(v3, 16); v3 ^= v2; \
13
129M
    v0 += v3; v3 = std::rotl(v3, 21); v3 ^= v0; \
14
129M
    v2 += v1; v1 = std::rotl(v1, 17); v1 ^= v2; \
15
129M
    v2 = std::rotl(v2, 32); \
16
129M
} while (0)
171
129M
    SIPROUND;
Line
Count
Source
9
129M
#define SIPROUND do { \
10
129M
    v0 += v1; v1 = std::rotl(v1, 13); v1 ^= v0; \
11
129M
    v0 = std::rotl(v0, 32); \
12
129M
    v2 += v3; v3 = std::rotl(v3, 16); v3 ^= v2; \
13
129M
    v0 += v3; v3 = std::rotl(v3, 21); v3 ^= v0; \
14
129M
    v2 += v1; v1 = std::rotl(v1, 17); v1 ^= v2; \
15
129M
    v2 = std::rotl(v2, 32); \
16
129M
} while (0)
172
129M
    SIPROUND;
Line
Count
Source
9
129M
#define SIPROUND do { \
10
129M
    v0 += v1; v1 = std::rotl(v1, 13); v1 ^= v0; \
11
129M
    v0 = std::rotl(v0, 32); \
12
129M
    v2 += v3; v3 = std::rotl(v3, 16); v3 ^= v2; \
13
129M
    v0 += v3; v3 = std::rotl(v3, 21); v3 ^= v0; \
14
129M
    v2 += v1; v1 = std::rotl(v1, 17); v1 ^= v2; \
15
129M
    v2 = std::rotl(v2, 32); \
16
129M
} while (0)
173
129M
    return v0 ^ v1 ^ v2 ^ v3;
174
129M
}