/* * Hash Function Base Class * (C) 1999-2008 Jack Lloyd * * Botan is released under the Simplified BSD License (see license.txt) */ #ifndef BOTAN_HASH_FUNCTION_BASE_CLASS_H__ #define BOTAN_HASH_FUNCTION_BASE_CLASS_H__ #include #include #include namespace Botan { /** * This class represents hash function (message digest) objects */ class BOTAN_DLL HashFunction : public Buffered_Computation { public: typedef SCAN_Name Spec; /** * Create an instance based on a name * Will return a null pointer if the algo/provider combination cannot * be found. If provider is empty then best available is chosen. */ static std::unique_ptr create(const std::string& algo_spec, const std::string& provider = ""); /** * Returns the list of available providers for this algorithm, empty if not available */ static std::vector providers(const std::string& algo_spec); /** * @return new object representing the same algorithm as *this */ virtual HashFunction* clone() const = 0; /** * @return provider information about this implementation. Default is "base", * might also return "sse2", "avx2", "openssl", or some other arbitrary string. * The return value is guaranteed to point to a string literal constant. */ virtual const char* provider() const { return "base"; } HashFunction(); virtual ~HashFunction(); virtual void clear() = 0; virtual std::string name() const = 0; /** * @return hash block size as defined for this algorithm */ virtual size_t hash_block_size() const { return 0; } }; } #endif