fuzz coverage

Coverage Report

Created: 2025-08-28 15:26

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