Coverage Report

Created: 2023-06-07 07:00

/src/botan/src/lib/hash/rmd160/rmd160.cpp
Line
Count
Source (jump to first uncovered line)
1
/*
2
* RIPEMD-160
3
* (C) 1999-2007 Jack Lloyd
4
*
5
* Botan is released under the Simplified BSD License (see license.txt)
6
*/
7
8
#include <botan/internal/rmd160.h>
9
10
#include <botan/internal/bit_ops.h>
11
#include <botan/internal/loadstor.h>
12
#include <botan/internal/rotate.h>
13
14
namespace Botan {
15
16
0
std::unique_ptr<HashFunction> RIPEMD_160::copy_state() const { return std::make_unique<RIPEMD_160>(*this); }
17
18
namespace {
19
20
/*
21
* RIPEMD-160 F1 Function
22
*/
23
template <size_t S>
24
0
inline void F1(uint32_t& A, uint32_t B, uint32_t& C, uint32_t D, uint32_t E, uint32_t M) {
25
0
   A += (B ^ C ^ D) + M;
26
0
   A = rotl<S>(A) + E;
27
0
   C = rotl<10>(C);
28
0
}
Unexecuted instantiation: rmd160.cpp:void Botan::(anonymous namespace)::F1<11ul>(unsigned int&, unsigned int, unsigned int&, unsigned int, unsigned int, unsigned int)
Unexecuted instantiation: rmd160.cpp:void Botan::(anonymous namespace)::F1<14ul>(unsigned int&, unsigned int, unsigned int&, unsigned int, unsigned int, unsigned int)
Unexecuted instantiation: rmd160.cpp:void Botan::(anonymous namespace)::F1<15ul>(unsigned int&, unsigned int, unsigned int&, unsigned int, unsigned int, unsigned int)
Unexecuted instantiation: rmd160.cpp:void Botan::(anonymous namespace)::F1<12ul>(unsigned int&, unsigned int, unsigned int&, unsigned int, unsigned int, unsigned int)
Unexecuted instantiation: rmd160.cpp:void Botan::(anonymous namespace)::F1<5ul>(unsigned int&, unsigned int, unsigned int&, unsigned int, unsigned int, unsigned int)
Unexecuted instantiation: rmd160.cpp:void Botan::(anonymous namespace)::F1<8ul>(unsigned int&, unsigned int, unsigned int&, unsigned int, unsigned int, unsigned int)
Unexecuted instantiation: rmd160.cpp:void Botan::(anonymous namespace)::F1<7ul>(unsigned int&, unsigned int, unsigned int&, unsigned int, unsigned int, unsigned int)
Unexecuted instantiation: rmd160.cpp:void Botan::(anonymous namespace)::F1<9ul>(unsigned int&, unsigned int, unsigned int&, unsigned int, unsigned int, unsigned int)
Unexecuted instantiation: rmd160.cpp:void Botan::(anonymous namespace)::F1<13ul>(unsigned int&, unsigned int, unsigned int&, unsigned int, unsigned int, unsigned int)
Unexecuted instantiation: rmd160.cpp:void Botan::(anonymous namespace)::F1<6ul>(unsigned int&, unsigned int, unsigned int&, unsigned int, unsigned int, unsigned int)
29
30
/*
31
* RIPEMD-160 F2 Function
32
*/
33
template <size_t S>
34
0
inline void F2(uint32_t& A, uint32_t B, uint32_t& C, uint32_t D, uint32_t E, uint32_t M) {
35
0
   A += choose(B, C, D) + M;
36
0
   A = rotl<S>(A) + E;
37
0
   C = rotl<10>(C);
38
0
}
Unexecuted instantiation: rmd160.cpp:void Botan::(anonymous namespace)::F2<7ul>(unsigned int&, unsigned int, unsigned int&, unsigned int, unsigned int, unsigned int)
Unexecuted instantiation: rmd160.cpp:void Botan::(anonymous namespace)::F2<6ul>(unsigned int&, unsigned int, unsigned int&, unsigned int, unsigned int, unsigned int)
Unexecuted instantiation: rmd160.cpp:void Botan::(anonymous namespace)::F2<8ul>(unsigned int&, unsigned int, unsigned int&, unsigned int, unsigned int, unsigned int)
Unexecuted instantiation: rmd160.cpp:void Botan::(anonymous namespace)::F2<13ul>(unsigned int&, unsigned int, unsigned int&, unsigned int, unsigned int, unsigned int)
Unexecuted instantiation: rmd160.cpp:void Botan::(anonymous namespace)::F2<11ul>(unsigned int&, unsigned int, unsigned int&, unsigned int, unsigned int, unsigned int)
Unexecuted instantiation: rmd160.cpp:void Botan::(anonymous namespace)::F2<9ul>(unsigned int&, unsigned int, unsigned int&, unsigned int, unsigned int, unsigned int)
Unexecuted instantiation: rmd160.cpp:void Botan::(anonymous namespace)::F2<15ul>(unsigned int&, unsigned int, unsigned int&, unsigned int, unsigned int, unsigned int)
Unexecuted instantiation: rmd160.cpp:void Botan::(anonymous namespace)::F2<12ul>(unsigned int&, unsigned int, unsigned int&, unsigned int, unsigned int, unsigned int)
Unexecuted instantiation: rmd160.cpp:void Botan::(anonymous namespace)::F2<5ul>(unsigned int&, unsigned int, unsigned int&, unsigned int, unsigned int, unsigned int)
Unexecuted instantiation: rmd160.cpp:void Botan::(anonymous namespace)::F2<14ul>(unsigned int&, unsigned int, unsigned int&, unsigned int, unsigned int, unsigned int)
39
40
/*
41
* RIPEMD-160 F3 Function
42
*/
43
template <size_t S>
44
0
inline void F3(uint32_t& A, uint32_t B, uint32_t& C, uint32_t D, uint32_t E, uint32_t M) {
45
0
   A += (D ^ (B | ~C)) + M;
46
0
   A = rotl<S>(A) + E;
47
0
   C = rotl<10>(C);
48
0
}
Unexecuted instantiation: rmd160.cpp:void Botan::(anonymous namespace)::F3<11ul>(unsigned int&, unsigned int, unsigned int&, unsigned int, unsigned int, unsigned int)
Unexecuted instantiation: rmd160.cpp:void Botan::(anonymous namespace)::F3<9ul>(unsigned int&, unsigned int, unsigned int&, unsigned int, unsigned int, unsigned int)
Unexecuted instantiation: rmd160.cpp:void Botan::(anonymous namespace)::F3<13ul>(unsigned int&, unsigned int, unsigned int&, unsigned int, unsigned int, unsigned int)
Unexecuted instantiation: rmd160.cpp:void Botan::(anonymous namespace)::F3<7ul>(unsigned int&, unsigned int, unsigned int&, unsigned int, unsigned int, unsigned int)
Unexecuted instantiation: rmd160.cpp:void Botan::(anonymous namespace)::F3<6ul>(unsigned int&, unsigned int, unsigned int&, unsigned int, unsigned int, unsigned int)
Unexecuted instantiation: rmd160.cpp:void Botan::(anonymous namespace)::F3<15ul>(unsigned int&, unsigned int, unsigned int&, unsigned int, unsigned int, unsigned int)
Unexecuted instantiation: rmd160.cpp:void Botan::(anonymous namespace)::F3<14ul>(unsigned int&, unsigned int, unsigned int&, unsigned int, unsigned int, unsigned int)
Unexecuted instantiation: rmd160.cpp:void Botan::(anonymous namespace)::F3<8ul>(unsigned int&, unsigned int, unsigned int&, unsigned int, unsigned int, unsigned int)
Unexecuted instantiation: rmd160.cpp:void Botan::(anonymous namespace)::F3<12ul>(unsigned int&, unsigned int, unsigned int&, unsigned int, unsigned int, unsigned int)
Unexecuted instantiation: rmd160.cpp:void Botan::(anonymous namespace)::F3<5ul>(unsigned int&, unsigned int, unsigned int&, unsigned int, unsigned int, unsigned int)
49
50
/*
51
* RIPEMD-160 F4 Function
52
*/
53
template <size_t S>
54
0
inline void F4(uint32_t& A, uint32_t B, uint32_t& C, uint32_t D, uint32_t E, uint32_t M) {
55
0
   A += choose(D, B, C) + M;
56
0
   A = rotl<S>(A) + E;
57
0
   C = rotl<10>(C);
58
0
}
Unexecuted instantiation: rmd160.cpp:void Botan::(anonymous namespace)::F4<9ul>(unsigned int&, unsigned int, unsigned int&, unsigned int, unsigned int, unsigned int)
Unexecuted instantiation: rmd160.cpp:void Botan::(anonymous namespace)::F4<13ul>(unsigned int&, unsigned int, unsigned int&, unsigned int, unsigned int, unsigned int)
Unexecuted instantiation: rmd160.cpp:void Botan::(anonymous namespace)::F4<15ul>(unsigned int&, unsigned int, unsigned int&, unsigned int, unsigned int, unsigned int)
Unexecuted instantiation: rmd160.cpp:void Botan::(anonymous namespace)::F4<7ul>(unsigned int&, unsigned int, unsigned int&, unsigned int, unsigned int, unsigned int)
Unexecuted instantiation: rmd160.cpp:void Botan::(anonymous namespace)::F4<12ul>(unsigned int&, unsigned int, unsigned int&, unsigned int, unsigned int, unsigned int)
Unexecuted instantiation: rmd160.cpp:void Botan::(anonymous namespace)::F4<8ul>(unsigned int&, unsigned int, unsigned int&, unsigned int, unsigned int, unsigned int)
Unexecuted instantiation: rmd160.cpp:void Botan::(anonymous namespace)::F4<11ul>(unsigned int&, unsigned int, unsigned int&, unsigned int, unsigned int, unsigned int)
Unexecuted instantiation: rmd160.cpp:void Botan::(anonymous namespace)::F4<6ul>(unsigned int&, unsigned int, unsigned int&, unsigned int, unsigned int, unsigned int)
Unexecuted instantiation: rmd160.cpp:void Botan::(anonymous namespace)::F4<14ul>(unsigned int&, unsigned int, unsigned int&, unsigned int, unsigned int, unsigned int)
Unexecuted instantiation: rmd160.cpp:void Botan::(anonymous namespace)::F4<5ul>(unsigned int&, unsigned int, unsigned int&, unsigned int, unsigned int, unsigned int)
59
60
/*
61
* RIPEMD-160 F5 Function
62
*/
63
template <size_t S>
64
0
inline void F5(uint32_t& A, uint32_t B, uint32_t& C, uint32_t D, uint32_t E, uint32_t M) {
65
0
   A += (B ^ (C | ~D)) + M;
66
0
   A = rotl<S>(A) + E;
67
0
   C = rotl<10>(C);
68
0
}
Unexecuted instantiation: rmd160.cpp:void Botan::(anonymous namespace)::F5<8ul>(unsigned int&, unsigned int, unsigned int&, unsigned int, unsigned int, unsigned int)
Unexecuted instantiation: rmd160.cpp:void Botan::(anonymous namespace)::F5<9ul>(unsigned int&, unsigned int, unsigned int&, unsigned int, unsigned int, unsigned int)
Unexecuted instantiation: rmd160.cpp:void Botan::(anonymous namespace)::F5<11ul>(unsigned int&, unsigned int, unsigned int&, unsigned int, unsigned int, unsigned int)
Unexecuted instantiation: rmd160.cpp:void Botan::(anonymous namespace)::F5<13ul>(unsigned int&, unsigned int, unsigned int&, unsigned int, unsigned int, unsigned int)
Unexecuted instantiation: rmd160.cpp:void Botan::(anonymous namespace)::F5<15ul>(unsigned int&, unsigned int, unsigned int&, unsigned int, unsigned int, unsigned int)
Unexecuted instantiation: rmd160.cpp:void Botan::(anonymous namespace)::F5<5ul>(unsigned int&, unsigned int, unsigned int&, unsigned int, unsigned int, unsigned int)
Unexecuted instantiation: rmd160.cpp:void Botan::(anonymous namespace)::F5<7ul>(unsigned int&, unsigned int, unsigned int&, unsigned int, unsigned int, unsigned int)
Unexecuted instantiation: rmd160.cpp:void Botan::(anonymous namespace)::F5<14ul>(unsigned int&, unsigned int, unsigned int&, unsigned int, unsigned int, unsigned int)
Unexecuted instantiation: rmd160.cpp:void Botan::(anonymous namespace)::F5<12ul>(unsigned int&, unsigned int, unsigned int&, unsigned int, unsigned int, unsigned int)
Unexecuted instantiation: rmd160.cpp:void Botan::(anonymous namespace)::F5<6ul>(unsigned int&, unsigned int, unsigned int&, unsigned int, unsigned int, unsigned int)
69
70
}  // namespace
71
72
/*
73
* RIPEMD-160 Compression Function
74
*/
75
0
void RIPEMD_160::compress_n(const uint8_t input[], size_t blocks) {
76
0
   const uint32_t MAGIC2 = 0x5A827999, MAGIC3 = 0x6ED9EBA1, MAGIC4 = 0x8F1BBCDC, MAGIC5 = 0xA953FD4E,
77
0
                  MAGIC6 = 0x50A28BE6, MAGIC7 = 0x5C4DD124, MAGIC8 = 0x6D703EF3, MAGIC9 = 0x7A6D76E9;
78
79
0
   for(size_t i = 0; i != blocks; ++i) {
80
0
      load_le(m_M.data(), input, m_M.size());
81
82
0
      uint32_t A1 = m_digest[0], A2 = A1, B1 = m_digest[1], B2 = B1, C1 = m_digest[2], C2 = C1, D1 = m_digest[3],
83
0
               D2 = D1, E1 = m_digest[4], E2 = E1;
84
85
0
      F1<11>(A1, B1, C1, D1, E1, m_M[0]);
86
0
      F5<8>(A2, B2, C2, D2, E2, m_M[5] + MAGIC6);
87
0
      F1<14>(E1, A1, B1, C1, D1, m_M[1]);
88
0
      F5<9>(E2, A2, B2, C2, D2, m_M[14] + MAGIC6);
89
0
      F1<15>(D1, E1, A1, B1, C1, m_M[2]);
90
0
      F5<9>(D2, E2, A2, B2, C2, m_M[7] + MAGIC6);
91
0
      F1<12>(C1, D1, E1, A1, B1, m_M[3]);
92
0
      F5<11>(C2, D2, E2, A2, B2, m_M[0] + MAGIC6);
93
0
      F1<5>(B1, C1, D1, E1, A1, m_M[4]);
94
0
      F5<13>(B2, C2, D2, E2, A2, m_M[9] + MAGIC6);
95
0
      F1<8>(A1, B1, C1, D1, E1, m_M[5]);
96
0
      F5<15>(A2, B2, C2, D2, E2, m_M[2] + MAGIC6);
97
0
      F1<7>(E1, A1, B1, C1, D1, m_M[6]);
98
0
      F5<15>(E2, A2, B2, C2, D2, m_M[11] + MAGIC6);
99
0
      F1<9>(D1, E1, A1, B1, C1, m_M[7]);
100
0
      F5<5>(D2, E2, A2, B2, C2, m_M[4] + MAGIC6);
101
0
      F1<11>(C1, D1, E1, A1, B1, m_M[8]);
102
0
      F5<7>(C2, D2, E2, A2, B2, m_M[13] + MAGIC6);
103
0
      F1<13>(B1, C1, D1, E1, A1, m_M[9]);
104
0
      F5<7>(B2, C2, D2, E2, A2, m_M[6] + MAGIC6);
105
0
      F1<14>(A1, B1, C1, D1, E1, m_M[10]);
106
0
      F5<8>(A2, B2, C2, D2, E2, m_M[15] + MAGIC6);
107
0
      F1<15>(E1, A1, B1, C1, D1, m_M[11]);
108
0
      F5<11>(E2, A2, B2, C2, D2, m_M[8] + MAGIC6);
109
0
      F1<6>(D1, E1, A1, B1, C1, m_M[12]);
110
0
      F5<14>(D2, E2, A2, B2, C2, m_M[1] + MAGIC6);
111
0
      F1<7>(C1, D1, E1, A1, B1, m_M[13]);
112
0
      F5<14>(C2, D2, E2, A2, B2, m_M[10] + MAGIC6);
113
0
      F1<9>(B1, C1, D1, E1, A1, m_M[14]);
114
0
      F5<12>(B2, C2, D2, E2, A2, m_M[3] + MAGIC6);
115
0
      F1<8>(A1, B1, C1, D1, E1, m_M[15]);
116
0
      F5<6>(A2, B2, C2, D2, E2, m_M[12] + MAGIC6);
117
118
0
      F2<7>(E1, A1, B1, C1, D1, m_M[7] + MAGIC2);
119
0
      F4<9>(E2, A2, B2, C2, D2, m_M[6] + MAGIC7);
120
0
      F2<6>(D1, E1, A1, B1, C1, m_M[4] + MAGIC2);
121
0
      F4<13>(D2, E2, A2, B2, C2, m_M[11] + MAGIC7);
122
0
      F2<8>(C1, D1, E1, A1, B1, m_M[13] + MAGIC2);
123
0
      F4<15>(C2, D2, E2, A2, B2, m_M[3] + MAGIC7);
124
0
      F2<13>(B1, C1, D1, E1, A1, m_M[1] + MAGIC2);
125
0
      F4<7>(B2, C2, D2, E2, A2, m_M[7] + MAGIC7);
126
0
      F2<11>(A1, B1, C1, D1, E1, m_M[10] + MAGIC2);
127
0
      F4<12>(A2, B2, C2, D2, E2, m_M[0] + MAGIC7);
128
0
      F2<9>(E1, A1, B1, C1, D1, m_M[6] + MAGIC2);
129
0
      F4<8>(E2, A2, B2, C2, D2, m_M[13] + MAGIC7);
130
0
      F2<7>(D1, E1, A1, B1, C1, m_M[15] + MAGIC2);
131
0
      F4<9>(D2, E2, A2, B2, C2, m_M[5] + MAGIC7);
132
0
      F2<15>(C1, D1, E1, A1, B1, m_M[3] + MAGIC2);
133
0
      F4<11>(C2, D2, E2, A2, B2, m_M[10] + MAGIC7);
134
0
      F2<7>(B1, C1, D1, E1, A1, m_M[12] + MAGIC2);
135
0
      F4<7>(B2, C2, D2, E2, A2, m_M[14] + MAGIC7);
136
0
      F2<12>(A1, B1, C1, D1, E1, m_M[0] + MAGIC2);
137
0
      F4<7>(A2, B2, C2, D2, E2, m_M[15] + MAGIC7);
138
0
      F2<15>(E1, A1, B1, C1, D1, m_M[9] + MAGIC2);
139
0
      F4<12>(E2, A2, B2, C2, D2, m_M[8] + MAGIC7);
140
0
      F2<9>(D1, E1, A1, B1, C1, m_M[5] + MAGIC2);
141
0
      F4<7>(D2, E2, A2, B2, C2, m_M[12] + MAGIC7);
142
0
      F2<11>(C1, D1, E1, A1, B1, m_M[2] + MAGIC2);
143
0
      F4<6>(C2, D2, E2, A2, B2, m_M[4] + MAGIC7);
144
0
      F2<7>(B1, C1, D1, E1, A1, m_M[14] + MAGIC2);
145
0
      F4<15>(B2, C2, D2, E2, A2, m_M[9] + MAGIC7);
146
0
      F2<13>(A1, B1, C1, D1, E1, m_M[11] + MAGIC2);
147
0
      F4<13>(A2, B2, C2, D2, E2, m_M[1] + MAGIC7);
148
0
      F2<12>(E1, A1, B1, C1, D1, m_M[8] + MAGIC2);
149
0
      F4<11>(E2, A2, B2, C2, D2, m_M[2] + MAGIC7);
150
151
0
      F3<11>(D1, E1, A1, B1, C1, m_M[3] + MAGIC3);
152
0
      F3<9>(D2, E2, A2, B2, C2, m_M[15] + MAGIC8);
153
0
      F3<13>(C1, D1, E1, A1, B1, m_M[10] + MAGIC3);
154
0
      F3<7>(C2, D2, E2, A2, B2, m_M[5] + MAGIC8);
155
0
      F3<6>(B1, C1, D1, E1, A1, m_M[14] + MAGIC3);
156
0
      F3<15>(B2, C2, D2, E2, A2, m_M[1] + MAGIC8);
157
0
      F3<7>(A1, B1, C1, D1, E1, m_M[4] + MAGIC3);
158
0
      F3<11>(A2, B2, C2, D2, E2, m_M[3] + MAGIC8);
159
0
      F3<14>(E1, A1, B1, C1, D1, m_M[9] + MAGIC3);
160
0
      F3<8>(E2, A2, B2, C2, D2, m_M[7] + MAGIC8);
161
0
      F3<9>(D1, E1, A1, B1, C1, m_M[15] + MAGIC3);
162
0
      F3<6>(D2, E2, A2, B2, C2, m_M[14] + MAGIC8);
163
0
      F3<13>(C1, D1, E1, A1, B1, m_M[8] + MAGIC3);
164
0
      F3<6>(C2, D2, E2, A2, B2, m_M[6] + MAGIC8);
165
0
      F3<15>(B1, C1, D1, E1, A1, m_M[1] + MAGIC3);
166
0
      F3<14>(B2, C2, D2, E2, A2, m_M[9] + MAGIC8);
167
0
      F3<14>(A1, B1, C1, D1, E1, m_M[2] + MAGIC3);
168
0
      F3<12>(A2, B2, C2, D2, E2, m_M[11] + MAGIC8);
169
0
      F3<8>(E1, A1, B1, C1, D1, m_M[7] + MAGIC3);
170
0
      F3<13>(E2, A2, B2, C2, D2, m_M[8] + MAGIC8);
171
0
      F3<13>(D1, E1, A1, B1, C1, m_M[0] + MAGIC3);
172
0
      F3<5>(D2, E2, A2, B2, C2, m_M[12] + MAGIC8);
173
0
      F3<6>(C1, D1, E1, A1, B1, m_M[6] + MAGIC3);
174
0
      F3<14>(C2, D2, E2, A2, B2, m_M[2] + MAGIC8);
175
0
      F3<5>(B1, C1, D1, E1, A1, m_M[13] + MAGIC3);
176
0
      F3<13>(B2, C2, D2, E2, A2, m_M[10] + MAGIC8);
177
0
      F3<12>(A1, B1, C1, D1, E1, m_M[11] + MAGIC3);
178
0
      F3<13>(A2, B2, C2, D2, E2, m_M[0] + MAGIC8);
179
0
      F3<7>(E1, A1, B1, C1, D1, m_M[5] + MAGIC3);
180
0
      F3<7>(E2, A2, B2, C2, D2, m_M[4] + MAGIC8);
181
0
      F3<5>(D1, E1, A1, B1, C1, m_M[12] + MAGIC3);
182
0
      F3<5>(D2, E2, A2, B2, C2, m_M[13] + MAGIC8);
183
184
0
      F4<11>(C1, D1, E1, A1, B1, m_M[1] + MAGIC4);
185
0
      F2<15>(C2, D2, E2, A2, B2, m_M[8] + MAGIC9);
186
0
      F4<12>(B1, C1, D1, E1, A1, m_M[9] + MAGIC4);
187
0
      F2<5>(B2, C2, D2, E2, A2, m_M[6] + MAGIC9);
188
0
      F4<14>(A1, B1, C1, D1, E1, m_M[11] + MAGIC4);
189
0
      F2<8>(A2, B2, C2, D2, E2, m_M[4] + MAGIC9);
190
0
      F4<15>(E1, A1, B1, C1, D1, m_M[10] + MAGIC4);
191
0
      F2<11>(E2, A2, B2, C2, D2, m_M[1] + MAGIC9);
192
0
      F4<14>(D1, E1, A1, B1, C1, m_M[0] + MAGIC4);
193
0
      F2<14>(D2, E2, A2, B2, C2, m_M[3] + MAGIC9);
194
0
      F4<15>(C1, D1, E1, A1, B1, m_M[8] + MAGIC4);
195
0
      F2<14>(C2, D2, E2, A2, B2, m_M[11] + MAGIC9);
196
0
      F4<9>(B1, C1, D1, E1, A1, m_M[12] + MAGIC4);
197
0
      F2<6>(B2, C2, D2, E2, A2, m_M[15] + MAGIC9);
198
0
      F4<8>(A1, B1, C1, D1, E1, m_M[4] + MAGIC4);
199
0
      F2<14>(A2, B2, C2, D2, E2, m_M[0] + MAGIC9);
200
0
      F4<9>(E1, A1, B1, C1, D1, m_M[13] + MAGIC4);
201
0
      F2<6>(E2, A2, B2, C2, D2, m_M[5] + MAGIC9);
202
0
      F4<14>(D1, E1, A1, B1, C1, m_M[3] + MAGIC4);
203
0
      F2<9>(D2, E2, A2, B2, C2, m_M[12] + MAGIC9);
204
0
      F4<5>(C1, D1, E1, A1, B1, m_M[7] + MAGIC4);
205
0
      F2<12>(C2, D2, E2, A2, B2, m_M[2] + MAGIC9);
206
0
      F4<6>(B1, C1, D1, E1, A1, m_M[15] + MAGIC4);
207
0
      F2<9>(B2, C2, D2, E2, A2, m_M[13] + MAGIC9);
208
0
      F4<8>(A1, B1, C1, D1, E1, m_M[14] + MAGIC4);
209
0
      F2<12>(A2, B2, C2, D2, E2, m_M[9] + MAGIC9);
210
0
      F4<6>(E1, A1, B1, C1, D1, m_M[5] + MAGIC4);
211
0
      F2<5>(E2, A2, B2, C2, D2, m_M[7] + MAGIC9);
212
0
      F4<5>(D1, E1, A1, B1, C1, m_M[6] + MAGIC4);
213
0
      F2<15>(D2, E2, A2, B2, C2, m_M[10] + MAGIC9);
214
0
      F4<12>(C1, D1, E1, A1, B1, m_M[2] + MAGIC4);
215
0
      F2<8>(C2, D2, E2, A2, B2, m_M[14] + MAGIC9);
216
217
0
      F5<9>(B1, C1, D1, E1, A1, m_M[4] + MAGIC5);
218
0
      F1<8>(B2, C2, D2, E2, A2, m_M[12]);
219
0
      F5<15>(A1, B1, C1, D1, E1, m_M[0] + MAGIC5);
220
0
      F1<5>(A2, B2, C2, D2, E2, m_M[15]);
221
0
      F5<5>(E1, A1, B1, C1, D1, m_M[5] + MAGIC5);
222
0
      F1<12>(E2, A2, B2, C2, D2, m_M[10]);
223
0
      F5<11>(D1, E1, A1, B1, C1, m_M[9] + MAGIC5);
224
0
      F1<9>(D2, E2, A2, B2, C2, m_M[4]);
225
0
      F5<6>(C1, D1, E1, A1, B1, m_M[7] + MAGIC5);
226
0
      F1<12>(C2, D2, E2, A2, B2, m_M[1]);
227
0
      F5<8>(B1, C1, D1, E1, A1, m_M[12] + MAGIC5);
228
0
      F1<5>(B2, C2, D2, E2, A2, m_M[5]);
229
0
      F5<13>(A1, B1, C1, D1, E1, m_M[2] + MAGIC5);
230
0
      F1<14>(A2, B2, C2, D2, E2, m_M[8]);
231
0
      F5<12>(E1, A1, B1, C1, D1, m_M[10] + MAGIC5);
232
0
      F1<6>(E2, A2, B2, C2, D2, m_M[7]);
233
0
      F5<5>(D1, E1, A1, B1, C1, m_M[14] + MAGIC5);
234
0
      F1<8>(D2, E2, A2, B2, C2, m_M[6]);
235
0
      F5<12>(C1, D1, E1, A1, B1, m_M[1] + MAGIC5);
236
0
      F1<13>(C2, D2, E2, A2, B2, m_M[2]);
237
0
      F5<13>(B1, C1, D1, E1, A1, m_M[3] + MAGIC5);
238
0
      F1<6>(B2, C2, D2, E2, A2, m_M[13]);
239
0
      F5<14>(A1, B1, C1, D1, E1, m_M[8] + MAGIC5);
240
0
      F1<5>(A2, B2, C2, D2, E2, m_M[14]);
241
0
      F5<11>(E1, A1, B1, C1, D1, m_M[11] + MAGIC5);
242
0
      F1<15>(E2, A2, B2, C2, D2, m_M[0]);
243
0
      F5<8>(D1, E1, A1, B1, C1, m_M[6] + MAGIC5);
244
0
      F1<13>(D2, E2, A2, B2, C2, m_M[3]);
245
0
      F5<5>(C1, D1, E1, A1, B1, m_M[15] + MAGIC5);
246
0
      F1<11>(C2, D2, E2, A2, B2, m_M[9]);
247
0
      F5<6>(B1, C1, D1, E1, A1, m_M[13] + MAGIC5);
248
0
      F1<11>(B2, C2, D2, E2, A2, m_M[11]);
249
250
0
      C1 = m_digest[1] + C1 + D2;
251
0
      m_digest[1] = m_digest[2] + D1 + E2;
252
0
      m_digest[2] = m_digest[3] + E1 + A2;
253
0
      m_digest[3] = m_digest[4] + A1 + B2;
254
0
      m_digest[4] = m_digest[0] + B1 + C2;
255
0
      m_digest[0] = C1;
256
257
0
      input += hash_block_size();
258
0
   }
259
0
}
260
261
/*
262
* Copy out the digest
263
*/
264
0
void RIPEMD_160::copy_out(uint8_t output[]) { copy_out_vec_le(output, output_length(), m_digest); }
265
266
/*
267
* Clear memory of sensitive data
268
*/
269
0
void RIPEMD_160::clear() {
270
0
   MDx_HashFunction::clear();
271
0
   zeroise(m_M);
272
0
   m_digest[0] = 0x67452301;
273
0
   m_digest[1] = 0xEFCDAB89;
274
0
   m_digest[2] = 0x98BADCFE;
275
0
   m_digest[3] = 0x10325476;
276
0
   m_digest[4] = 0xC3D2E1F0;
277
0
}
278
279
}  // namespace Botan