diff options
Diffstat (limited to 'lib/hash/skein/skein_512.h')
-rw-r--r-- | lib/hash/skein/skein_512.h | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/lib/hash/skein/skein_512.h b/lib/hash/skein/skein_512.h new file mode 100644 index 000000000..e0abc06ae --- /dev/null +++ b/lib/hash/skein/skein_512.h @@ -0,0 +1,52 @@ +/* +* The Skein-512 hash function +* (C) 2009 Jack Lloyd +* +* Distributed under the terms of the Botan license +*/ + +#ifndef BOTAN_SKEIN_512_H__ +#define BOTAN_SKEIN_512_H__ + +#include <botan/secmem.h> +#include <botan/hash.h> +#include <string> + +namespace Botan { + +/** +* Skein-512, a SHA-3 candidate +*/ +class BOTAN_DLL Skein_512 : public HashFunction + { + public: + /** + * @param output_bits the output size of Skein in bits + * @param personalization is a string that will paramaterize the + * hash output + */ + Skein_512(size_t output_bits = 512, + const std::string& personalization = ""); + + size_t hash_block_size() const { return 64; } + size_t output_length() const { return output_bits / 8; } + + HashFunction* clone() const; + std::string name() const; + void clear(); + private: + void add_data(const byte input[], size_t length); + void final_result(byte out[]); + + std::string personalization; + size_t output_bits; + + secure_vector<u64bit> H; + secure_vector<u64bit> T; + secure_vector<byte> buffer; + size_t buf_pos; + }; + +} + +#endif |