/* */ #ifndef D_MESSAGE_DIGEST_H #define D_MESSAGE_DIGEST_H #include "common.h" #include #include "SharedHandle.h" namespace aria2 { class MessageDigestImpl; class MessageDigest { private: SharedHandle pImpl_; MessageDigest(); // We don't implement copy ctor. MessageDigest(const MessageDigest&); // We don't implement assignment operator. MessageDigest& operator=(const MessageDigest&); public: ~MessageDigest(); // Factory functions static SharedHandle sha1(); // Factory function which takes hashType as string. Throws // exception if hashType is not supported. static SharedHandle create(const std::string& hashType); // Returns true if hashType is supported. Otherwise returns false. static bool supports(const std::string& hashType); // Returns string containing supported hash function textual names // joined with ','. static std::string getSupportedHashTypeString(); // Returns the number of bytes needed to store digest for hashType. static size_t getDigestLength(const std::string& hashType); // Returns true if hash type specified by lhs is stronger than the // one specified by rhs. Returns false if at least one of lhs and // rhs are not supported. Otherwise returns false. static bool isStronger(const std::string& lhs, const std::string& rhs); static bool isValidHash (const std::string& hashType, const std::string& hexDigest); // Returns canonical hash algorithm name of given algostring. If // given algostring is not supported, then returns algostring // unchanged. static std::string getCanonicalHashType(const std::string& hashType); size_t getDigestLength() const; // Resets this object so that it can be reused. void reset(); void update(const void* data, size_t length); // Stores digest in the region pointed by md. It is caller's // responsibility to allocate memory at least getDigestLength(). // This call can only be called once. To reuse this object, call // reset(). void digest(unsigned char* md); // Returns hex digest. This call can only be called once. To reuse // this object, call reset(). std::string hexDigest(); }; } // namespace aria2 #endif // D_MESSAGE_DIGEST_H