• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

randombit / botan / 5079590438

25 May 2023 12:28PM UTC coverage: 92.228% (+0.5%) from 91.723%
5079590438

Pull #3502

github

Pull Request #3502: Apply clang-format to the codebase

75589 of 81959 relevant lines covered (92.23%)

12139530.51 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

98.51
/src/lib/hash/sha1/sha1.cpp
1
/*
2
* SHA-1
3
* (C) 1999-2008,2011 Jack Lloyd
4
*
5
* Botan is released under the Simplified BSD License (see license.txt)
6
*/
7

8
#include <botan/internal/sha1.h>
9

10
#include <botan/internal/bit_ops.h>
11
#include <botan/internal/cpuid.h>
12
#include <botan/internal/loadstor.h>
13
#include <botan/internal/rotate.h>
14

15
namespace Botan {
16

17
std::unique_ptr<HashFunction> SHA_1::copy_state() const { return std::make_unique<SHA_1>(*this); }
143✔
18

19
namespace SHA1_F {
20

21
namespace {
22

23
/*
24
* SHA-1 F1 Function
25
*/
26
inline void F1(uint32_t A, uint32_t& B, uint32_t C, uint32_t D, uint32_t& E, uint32_t msg) {
1,553✔
27
   E += choose(B, C, D) + msg + 0x5A827999 + rotl<5>(A);
1,553✔
28
   B = rotl<30>(B);
1,553✔
29
}
30

31
/*
32
* SHA-1 F2 Function
33
*/
34
inline void F2(uint32_t A, uint32_t& B, uint32_t C, uint32_t D, uint32_t& E, uint32_t msg) {
1,553✔
35
   E += (B ^ C ^ D) + msg + 0x6ED9EBA1 + rotl<5>(A);
1,553✔
36
   B = rotl<30>(B);
1,553✔
37
}
38

39
/*
40
* SHA-1 F3 Function
41
*/
42
inline void F3(uint32_t A, uint32_t& B, uint32_t C, uint32_t D, uint32_t& E, uint32_t msg) {
1,553✔
43
   E += majority(B, C, D) + msg + 0x8F1BBCDC + rotl<5>(A);
1,553✔
44
   B = rotl<30>(B);
1,553✔
45
}
46

47
/*
48
* SHA-1 F4 Function
49
*/
50
inline void F4(uint32_t A, uint32_t& B, uint32_t C, uint32_t D, uint32_t& E, uint32_t msg) {
1,553✔
51
   E += (B ^ C ^ D) + msg + 0xCA62C1D6 + rotl<5>(A);
1,553✔
52
   B = rotl<30>(B);
1,553✔
53
}
54

55
}
56

57
}
58

59
/*
60
* SHA-1 Compression Function
61
*/
62
void SHA_1::compress_n(const uint8_t input[], size_t blocks) {
9,543,864✔
63
   using namespace SHA1_F;
9,543,864✔
64

65
#if defined(BOTAN_HAS_SHA1_X86_SHA_NI)
66
   if(CPUID::has_intel_sha()) {
9,543,864✔
67
      return sha1_compress_x86(m_digest, input, blocks);
×
68
   }
69
#endif
70

71
#if defined(BOTAN_HAS_SHA1_ARMV8)
72
   if(CPUID::has_arm_sha1()) {
73
      return sha1_armv8_compress_n(m_digest, input, blocks);
74
   }
75
#endif
76

77
#if defined(BOTAN_HAS_SHA1_SSE2)
78
   if(CPUID::has_sse2()) {
9,543,864✔
79
      return sse2_compress_n(m_digest, input, blocks);
9,543,014✔
80
   }
81

82
#endif
83

84
   uint32_t A = m_digest[0], B = m_digest[1], C = m_digest[2], D = m_digest[3], E = m_digest[4];
850✔
85

86
   m_W.resize(80);
850✔
87

88
   for(size_t i = 0; i != blocks; ++i) {
2,403✔
89
      load_be(m_W.data(), input, 16);
1,553✔
90

91
      for(size_t j = 16; j != 80; j += 8) {
13,977✔
92
         m_W[j] = rotl<1>(m_W[j - 3] ^ m_W[j - 8] ^ m_W[j - 14] ^ m_W[j - 16]);
12,424✔
93
         m_W[j + 1] = rotl<1>(m_W[j - 2] ^ m_W[j - 7] ^ m_W[j - 13] ^ m_W[j - 15]);
12,424✔
94
         m_W[j + 2] = rotl<1>(m_W[j - 1] ^ m_W[j - 6] ^ m_W[j - 12] ^ m_W[j - 14]);
12,424✔
95
         m_W[j + 3] = rotl<1>(m_W[j] ^ m_W[j - 5] ^ m_W[j - 11] ^ m_W[j - 13]);
12,424✔
96
         m_W[j + 4] = rotl<1>(m_W[j + 1] ^ m_W[j - 4] ^ m_W[j - 10] ^ m_W[j - 12]);
12,424✔
97
         m_W[j + 5] = rotl<1>(m_W[j + 2] ^ m_W[j - 3] ^ m_W[j - 9] ^ m_W[j - 11]);
12,424✔
98
         m_W[j + 6] = rotl<1>(m_W[j + 3] ^ m_W[j - 2] ^ m_W[j - 8] ^ m_W[j - 10]);
12,424✔
99
         m_W[j + 7] = rotl<1>(m_W[j + 4] ^ m_W[j - 1] ^ m_W[j - 7] ^ m_W[j - 9]);
12,424✔
100
      }
101

102
      F1(A, B, C, D, E, m_W[0]);
1,553✔
103
      F1(E, A, B, C, D, m_W[1]);
1,553✔
104
      F1(D, E, A, B, C, m_W[2]);
1,553✔
105
      F1(C, D, E, A, B, m_W[3]);
1,553✔
106
      F1(B, C, D, E, A, m_W[4]);
1,553✔
107
      F1(A, B, C, D, E, m_W[5]);
1,553✔
108
      F1(E, A, B, C, D, m_W[6]);
1,553✔
109
      F1(D, E, A, B, C, m_W[7]);
1,553✔
110
      F1(C, D, E, A, B, m_W[8]);
1,553✔
111
      F1(B, C, D, E, A, m_W[9]);
1,553✔
112
      F1(A, B, C, D, E, m_W[10]);
1,553✔
113
      F1(E, A, B, C, D, m_W[11]);
1,553✔
114
      F1(D, E, A, B, C, m_W[12]);
1,553✔
115
      F1(C, D, E, A, B, m_W[13]);
1,553✔
116
      F1(B, C, D, E, A, m_W[14]);
1,553✔
117
      F1(A, B, C, D, E, m_W[15]);
1,553✔
118
      F1(E, A, B, C, D, m_W[16]);
1,553✔
119
      F1(D, E, A, B, C, m_W[17]);
1,553✔
120
      F1(C, D, E, A, B, m_W[18]);
1,553✔
121
      F1(B, C, D, E, A, m_W[19]);
1,553✔
122

123
      F2(A, B, C, D, E, m_W[20]);
1,553✔
124
      F2(E, A, B, C, D, m_W[21]);
1,553✔
125
      F2(D, E, A, B, C, m_W[22]);
1,553✔
126
      F2(C, D, E, A, B, m_W[23]);
1,553✔
127
      F2(B, C, D, E, A, m_W[24]);
1,553✔
128
      F2(A, B, C, D, E, m_W[25]);
1,553✔
129
      F2(E, A, B, C, D, m_W[26]);
1,553✔
130
      F2(D, E, A, B, C, m_W[27]);
1,553✔
131
      F2(C, D, E, A, B, m_W[28]);
1,553✔
132
      F2(B, C, D, E, A, m_W[29]);
1,553✔
133
      F2(A, B, C, D, E, m_W[30]);
1,553✔
134
      F2(E, A, B, C, D, m_W[31]);
1,553✔
135
      F2(D, E, A, B, C, m_W[32]);
1,553✔
136
      F2(C, D, E, A, B, m_W[33]);
1,553✔
137
      F2(B, C, D, E, A, m_W[34]);
1,553✔
138
      F2(A, B, C, D, E, m_W[35]);
1,553✔
139
      F2(E, A, B, C, D, m_W[36]);
1,553✔
140
      F2(D, E, A, B, C, m_W[37]);
1,553✔
141
      F2(C, D, E, A, B, m_W[38]);
1,553✔
142
      F2(B, C, D, E, A, m_W[39]);
1,553✔
143

144
      F3(A, B, C, D, E, m_W[40]);
1,553✔
145
      F3(E, A, B, C, D, m_W[41]);
1,553✔
146
      F3(D, E, A, B, C, m_W[42]);
1,553✔
147
      F3(C, D, E, A, B, m_W[43]);
1,553✔
148
      F3(B, C, D, E, A, m_W[44]);
1,553✔
149
      F3(A, B, C, D, E, m_W[45]);
1,553✔
150
      F3(E, A, B, C, D, m_W[46]);
1,553✔
151
      F3(D, E, A, B, C, m_W[47]);
1,553✔
152
      F3(C, D, E, A, B, m_W[48]);
1,553✔
153
      F3(B, C, D, E, A, m_W[49]);
1,553✔
154
      F3(A, B, C, D, E, m_W[50]);
1,553✔
155
      F3(E, A, B, C, D, m_W[51]);
1,553✔
156
      F3(D, E, A, B, C, m_W[52]);
1,553✔
157
      F3(C, D, E, A, B, m_W[53]);
1,553✔
158
      F3(B, C, D, E, A, m_W[54]);
1,553✔
159
      F3(A, B, C, D, E, m_W[55]);
1,553✔
160
      F3(E, A, B, C, D, m_W[56]);
1,553✔
161
      F3(D, E, A, B, C, m_W[57]);
1,553✔
162
      F3(C, D, E, A, B, m_W[58]);
1,553✔
163
      F3(B, C, D, E, A, m_W[59]);
1,553✔
164

165
      F4(A, B, C, D, E, m_W[60]);
1,553✔
166
      F4(E, A, B, C, D, m_W[61]);
1,553✔
167
      F4(D, E, A, B, C, m_W[62]);
1,553✔
168
      F4(C, D, E, A, B, m_W[63]);
1,553✔
169
      F4(B, C, D, E, A, m_W[64]);
1,553✔
170
      F4(A, B, C, D, E, m_W[65]);
1,553✔
171
      F4(E, A, B, C, D, m_W[66]);
1,553✔
172
      F4(D, E, A, B, C, m_W[67]);
1,553✔
173
      F4(C, D, E, A, B, m_W[68]);
1,553✔
174
      F4(B, C, D, E, A, m_W[69]);
1,553✔
175
      F4(A, B, C, D, E, m_W[70]);
1,553✔
176
      F4(E, A, B, C, D, m_W[71]);
1,553✔
177
      F4(D, E, A, B, C, m_W[72]);
1,553✔
178
      F4(C, D, E, A, B, m_W[73]);
1,553✔
179
      F4(B, C, D, E, A, m_W[74]);
1,553✔
180
      F4(A, B, C, D, E, m_W[75]);
1,553✔
181
      F4(E, A, B, C, D, m_W[76]);
1,553✔
182
      F4(D, E, A, B, C, m_W[77]);
1,553✔
183
      F4(C, D, E, A, B, m_W[78]);
1,553✔
184
      F4(B, C, D, E, A, m_W[79]);
1,553✔
185

186
      A = (m_digest[0] += A);
1,553✔
187
      B = (m_digest[1] += B);
1,553✔
188
      C = (m_digest[2] += C);
1,553✔
189
      D = (m_digest[3] += D);
1,553✔
190
      E = (m_digest[4] += E);
1,553✔
191

192
      input += hash_block_size();
1,553✔
193
   }
194
}
195

196
/*
197
* Copy out the digest
198
*/
199
void SHA_1::copy_out(uint8_t output[]) { copy_out_vec_be(output, output_length(), m_digest); }
2,049,800✔
200

201
/*
202
* Clear memory of sensitive data
203
*/
204
void SHA_1::clear() {
2,157,555✔
205
   MDx_HashFunction::clear();
2,157,555✔
206
   zeroise(m_W);
2,157,555✔
207
   m_digest[0] = 0x67452301;
2,157,555✔
208
   m_digest[1] = 0xEFCDAB89;
2,157,555✔
209
   m_digest[2] = 0x98BADCFE;
2,157,555✔
210
   m_digest[3] = 0x10325476;
2,157,555✔
211
   m_digest[4] = 0xC3D2E1F0;
2,157,555✔
212
}
2,157,555✔
213

214
std::string SHA_1::provider() const {
156✔
215
#if defined(BOTAN_HAS_SHA1_X86_SHA_NI)
216
   if(CPUID::has_intel_sha()) {
156✔
217
      return "intel_sha";
×
218
   }
219
#endif
220

221
#if defined(BOTAN_HAS_SHA1_ARMV8)
222
   if(CPUID::has_arm_sha1()) {
223
      return "armv8_sha";
224
   }
225
#endif
226

227
#if defined(BOTAN_HAS_SHA1_SSE2)
228
   if(CPUID::has_sse2()) {
156✔
229
      return "sse2";
78✔
230
   }
231
#endif
232

233
   return "base";
78✔
234
}
235
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc