Botan 3.8.1
Crypto and TLS for C&
raw_hash.cpp
Go to the documentation of this file.
1/*
2* (C) 2023 Jack Lloyd
3*
4* Botan is released under the Simplified BSD License (see license.txt)
5*/
6
7#include <botan/internal/raw_hash.h>
8
9#include <botan/exceptn.h>
10#include <botan/mem_ops.h>
11
12namespace Botan {
13
14void RawHashFunction::add_data(std::span<const uint8_t> input) {
15 m_bits += std::make_pair(input.data(), input.size());
16}
17
18void RawHashFunction::final_result(std::span<uint8_t> out) {
19 if(m_output_length > 0 && m_bits.size() != m_output_length) {
20 m_bits.clear();
21 throw Invalid_Argument("Raw padding was configured to use a " + std::to_string(m_output_length) +
22 " byte hash but instead was used for a " + std::to_string(m_bits.size()) + " byte hash");
23 }
24
25 copy_mem(out.data(), m_bits.data(), m_bits.size());
26 m_bits.clear();
27}
28
30 m_bits.clear();
31}
32
33std::unique_ptr<HashFunction> RawHashFunction::copy_state() const {
34 return std::make_unique<RawHashFunction>(*this);
35}
36
37std::unique_ptr<HashFunction> RawHashFunction::new_object() const {
38 return std::make_unique<RawHashFunction>(m_name, m_output_length);
39}
40
42 if(m_output_length > 0) {
43 return m_output_length;
44 }
45 return m_bits.size();
46}
47
48} // namespace Botan
void clear() override
Definition raw_hash.cpp:29
void final_result(std::span< uint8_t > out) override
Definition raw_hash.cpp:18
std::unique_ptr< HashFunction > copy_state() const override
Definition raw_hash.cpp:33
void add_data(std::span< const uint8_t > input) override
Definition raw_hash.cpp:14
std::unique_ptr< HashFunction > new_object() const override
Definition raw_hash.cpp:37
size_t output_length() const override
Definition raw_hash.cpp:41
constexpr void copy_mem(T *out, const T *in, size_t n)
Definition mem_ops.h:149