diff options
author | cynecx <[email protected]> | 2016-01-26 23:21:47 +0100 |
---|---|---|
committer | cynecx <[email protected]> | 2016-01-26 23:21:47 +0100 |
commit | a67f99fb8f556e89f16267e4ea97d347fe04fa51 (patch) | |
tree | 285300d7aafd969f8c79a79f81979c2d3950e2b8 /src/lib/hash/blake2/blake2b.h | |
parent | 6adce3dcdd8572b4e7091feedcfcf435ca553ad3 (diff) |
Add Blake2b hash function
Diffstat (limited to 'src/lib/hash/blake2/blake2b.h')
-rw-r--r-- | src/lib/hash/blake2/blake2b.h | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/src/lib/hash/blake2/blake2b.h b/src/lib/hash/blake2/blake2b.h new file mode 100644 index 000000000..d330c1452 --- /dev/null +++ b/src/lib/hash/blake2/blake2b.h @@ -0,0 +1,56 @@ +#ifndef BLAKE2B_H__ +#define BLAKE2B_H__ + +#include <botan/hash.h> +#include <string> +#include <memory> + +namespace Botan { + +enum blake2b_constant { + BLAKE2B_BLOCKBYTES = 128, + BLAKE2B_OUTBYTES = 64, + BLAKE2B_IVU64COUNT = 8 +}; + +/** +* BLAKE2B +*/ +class BOTAN_DLL Blake2b final : public HashFunction + { + public: + /** + * @param output_bits the output size of Blake2b in bits + */ + Blake2b(size_t output_bits = 512); + + size_t hash_block_size() const override { return BLAKE2B_BLOCKBYTES; } + size_t output_length() const override { return m_output_bits / 8; } + + static Blake2b* make(const Spec& spec); + + HashFunction* clone() const override; + std::string name() const override; + void clear() override; + + private: + void add_data(const byte input[], size_t length) override; + void final_result(byte out[]) override; + + inline void state_init(); + inline void increment_counter(const u64bit inc); + void compress(bool lastblock = false); + + size_t m_output_bits; + + secure_vector<byte> m_buffer; + size_t m_buflen; + + secure_vector<u64bit> m_H; + u64bit m_T[2]; + u64bit m_F[2]; + }; + +} + +#endif |