1#ifndef CRYPTOPP_RIPEMD_H 2#define CRYPTOPP_RIPEMD_H 3 4#include "iterhash.h" 5 6NAMESPACE_BEGIN(CryptoPP) 7 8//! <a href="http://www.weidai.com/scan-mirror/md.html#RIPEMD-160">RIPEMD-160</a> 9/*! Digest Length = 160 bits */ 10class RIPEMD160 : public IteratedHashWithStaticTransform<word32, LittleEndian, 64, 20, RIPEMD160> 11{ 12public: 13 static void InitState(HashWordType *state); 14 static void Transform(word32 *digest, const word32 *data); 15 static const char * StaticAlgorithmName() {return "RIPEMD-160";} 16}; 17 18/*! Digest Length = 320 bits, Security is similar to RIPEMD-160 */ 19class RIPEMD320 : public IteratedHashWithStaticTransform<word32, LittleEndian, 64, 40, RIPEMD320> 20{ 21public: 22 static void InitState(HashWordType *state); 23 static void Transform(word32 *digest, const word32 *data); 24 static const char * StaticAlgorithmName() {return "RIPEMD-320";} 25}; 26 27/*! \warning RIPEMD-128 is considered insecure, and should not be used 28 unless you absolutely need it for compatibility. */ 29class RIPEMD128 : public IteratedHashWithStaticTransform<word32, LittleEndian, 64, 16, RIPEMD128> 30{ 31public: 32 static void InitState(HashWordType *state); 33 static void Transform(word32 *digest, const word32 *data); 34 static const char * StaticAlgorithmName() {return "RIPEMD-128";} 35}; 36 37/*! \warning RIPEMD-256 is considered insecure, and should not be used 38 unless you absolutely need it for compatibility. */ 39class RIPEMD256 : public IteratedHashWithStaticTransform<word32, LittleEndian, 64, 32, RIPEMD256> 40{ 41public: 42 static void InitState(HashWordType *state); 43 static void Transform(word32 *digest, const word32 *data); 44 static const char * StaticAlgorithmName() {return "RIPEMD-256";} 45}; 46 47NAMESPACE_END 48 49#endif 50