Botan 3.13.0
Crypto and TLS for C&
sha1.h
Go to the documentation of this file.
1/*
2* SHA-1
3* (C) 1999-2007,2016 Jack Lloyd
4*
5* Botan is released under the Simplified BSD License (see license.txt)
6*/
7
8#ifndef BOTAN_SHA1_H_
9#define BOTAN_SHA1_H_
10
11#include <botan/internal/mdx_hash.h>
12
13namespace Botan {
14
15/**
16* NIST's SHA-1
17*/
18class SHA_1 final : public HashFunction {
19 public:
21
24 static constexpr size_t block_bytes = 64;
25 static constexpr size_t output_bytes = 20;
26 static constexpr size_t ctr_bytes = 8;
27
28 static void compress_n(digest_type& digest, std::span<const uint8_t> input, size_t blocks);
29 static void init(digest_type& digest);
30
31 public:
32 std::string name() const override { return "SHA-1"; }
33
34 size_t output_length() const override { return 20; }
35
36 size_t hash_block_size() const override { return block_bytes; }
37
38 // Collision attacks with cost ~2^61 are known (Leurent and Peyrin, 2020)
39 size_t security_level() const override { return 61; }
40
41 std::unique_ptr<HashFunction> new_object() const override;
42
43 std::unique_ptr<HashFunction> copy_state() const override;
44
45 std::string provider() const override;
46
47 void clear() override { m_md.clear(); }
48
49#if defined(BOTAN_HAS_SHA1_ARMV8)
50 static void sha1_armv8_compress_n(digest_type& digest, std::span<const uint8_t> blocks, size_t block_count);
51#endif
52
53#if defined(BOTAN_HAS_SHA1_SIMD_4X32)
54 static void simd_compress_n(digest_type& digest, std::span<const uint8_t> blocks, size_t block_count);
55#endif
56
57#if defined(BOTAN_HAS_SHA1_AVX2)
58 static void avx2_compress_n(digest_type& digest, std::span<const uint8_t> blocks, size_t block_count);
59#endif
60
61#if defined(BOTAN_HAS_SHA1_X86_SHA_NI)
62 // Using x86 SHA instructions in Intel Goldmont and Cannonlake
63 static void sha1_compress_x86(digest_type& digest, std::span<const uint8_t> blocks, size_t block_count);
64#endif
65
66 private:
67 void add_data(std::span<const uint8_t> input) override;
68
69 void final_result(std::span<uint8_t> output) override;
70
71 private:
73};
74
75} // namespace Botan
76
77#endif
void final(uint8_t out[])
Definition buf_comp.h:97
std::unique_ptr< HashFunction > new_object() const override
Definition sha1.cpp:206
std::unique_ptr< HashFunction > copy_state() const override
Definition sha1.cpp:210
static void sha1_compress_x86(digest_type &digest, std::span< const uint8_t > blocks, size_t block_count)
Definition sha1_x86.cpp:74
std::string provider() const override
Definition sha1.cpp:178
size_t hash_block_size() const override
Definition sha1.h:36
static constexpr MD_Endian bit_endianness
Definition sha1.h:23
void clear() override
Definition sha1.h:47
static void sha1_armv8_compress_n(digest_type &digest, std::span< const uint8_t > blocks, size_t block_count)
static constexpr MD_Endian byte_endianness
Definition sha1.h:22
static constexpr size_t ctr_bytes
Definition sha1.h:26
static constexpr size_t output_bytes
Definition sha1.h:25
std::string name() const override
Definition sha1.h:32
static constexpr size_t block_bytes
Definition sha1.h:24
static void compress_n(digest_type &digest, std::span< const uint8_t > input, size_t blocks)
Definition sha1.cpp:24
static void init(digest_type &digest)
Definition sha1.cpp:174
secure_vector< uint32_t > digest_type
Definition sha1.h:20
size_t security_level() const override
Definition sha1.h:39
size_t output_length() const override
Definition sha1.h:34
std::vector< T, secure_allocator< T > > secure_vector
Definition secmem.h:128
MD_Endian
Definition mdx_hash.h:20