Coverage Report

Created: 2025-11-05 06:16

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/nss/botan/src/lib/hash/shake/shake.cpp
Line
Count
Source
1
/*
2
* SHAKE-128/256 as a hash
3
* (C) 2016 Jack Lloyd
4
*
5
* Botan is released under the Simplified BSD License (see license.txt)
6
*/
7
8
#include <botan/internal/shake.h>
9
10
#include <botan/exceptn.h>
11
#include <botan/internal/fmt.h>
12
13
namespace Botan {
14
15
121
SHAKE_128::SHAKE_128(size_t output_bits) : m_keccak(256, 0xF, 4), m_output_bits(output_bits) {
16
121
   if(output_bits % 8 != 0) {
17
0
      throw Invalid_Argument(fmt("SHAKE_128: Invalid output length {}", output_bits));
18
0
   }
19
121
}
20
21
1
std::string SHAKE_128::name() const {
22
1
   return fmt("SHAKE-128({})", m_output_bits);
23
1
}
24
25
13
std::unique_ptr<HashFunction> SHAKE_128::new_object() const {
26
13
   return std::make_unique<SHAKE_128>(m_output_bits);
27
13
}
28
29
0
std::unique_ptr<HashFunction> SHAKE_128::copy_state() const {
30
0
   return std::make_unique<SHAKE_128>(*this);
31
0
}
32
33
11.0k
void SHAKE_128::add_data(std::span<const uint8_t> input) {
34
11.0k
   m_keccak.absorb(input);
35
11.0k
}
36
37
3.40k
void SHAKE_128::final_result(std::span<uint8_t> output) {
38
3.40k
   m_keccak.finish();
39
3.40k
   m_keccak.squeeze(output);
40
3.40k
   clear();
41
3.40k
}
42
43
75
SHAKE_256::SHAKE_256(size_t output_bits) : m_keccak(512, 0xF, 4), m_output_bits(output_bits) {
44
75
   if(output_bits % 8 != 0) {
45
0
      throw Invalid_Argument(fmt("SHAKE_256: Invalid output length {}", output_bits));
46
0
   }
47
75
}
48
49
1
std::string SHAKE_256::name() const {
50
1
   return fmt("SHAKE-256({})", m_output_bits);
51
1
}
52
53
22
std::unique_ptr<HashFunction> SHAKE_256::new_object() const {
54
22
   return std::make_unique<SHAKE_256>(m_output_bits);
55
22
}
56
57
0
std::unique_ptr<HashFunction> SHAKE_256::copy_state() const {
58
0
   return std::make_unique<SHAKE_256>(*this);
59
0
}
60
61
9.82k
void SHAKE_256::add_data(std::span<const uint8_t> input) {
62
9.82k
   m_keccak.absorb(input);
63
9.82k
}
64
65
2.78k
void SHAKE_256::final_result(std::span<uint8_t> output) {
66
2.78k
   m_keccak.finish();
67
2.78k
   m_keccak.squeeze(output);
68
2.78k
   clear();
69
2.78k
}
70
71
}  // namespace Botan