aboutsummaryrefslogtreecommitdiffstats
path: root/src/lib/hash/blake2/blake2b.h
diff options
context:
space:
mode:
authorcynecx <[email protected]>2016-01-26 23:21:47 +0100
committercynecx <[email protected]>2016-01-26 23:21:47 +0100
commita67f99fb8f556e89f16267e4ea97d347fe04fa51 (patch)
tree285300d7aafd969f8c79a79f81979c2d3950e2b8 /src/lib/hash/blake2/blake2b.h
parent6adce3dcdd8572b4e7091feedcfcf435ca553ad3 (diff)
Add Blake2b hash function
Diffstat (limited to 'src/lib/hash/blake2/blake2b.h')
-rw-r--r--src/lib/hash/blake2/blake2b.h56
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