20 #ifndef _ANCH_CRYPTO_MD5_H_ 21 #define _ANCH_CRYPTO_MD5_H_ 23 #include "crypto/hash/hash.hpp" 31 template<
typename H> H
HMAC(
const std::string&,
const std::string&);
42 friend MD5 anch::crypto::HMAC<MD5>(
const std::string&,
const std::string&);
61 std::array<uint8_t,16>
digest;
74 static uint32_t HANDLE_INIT[2] = { 0, 0 };
75 std::memcpy(handle, HANDLE_INIT, 2 *
sizeof(uint32_t));
76 static uint32_t BUFFER_INIT[4] = { 0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, };
77 std::memcpy(buffer, BUFFER_INIT, 4 *
sizeof(uint32_t));
99 template<
class CharT,
class Traits,
class Allocator>
100 MD5(
const std::basic_string<CharT,Traits,Allocator>& data) {
109 template<
class CharT,
class Traits>
110 MD5(std::basic_istream<CharT,Traits>& stream) {
121 MD5(
const uint8_t* data, std::size_t len) {
141 virtual const std::array<uint8_t,16>&
digest()
const override;
157 virtual void addData(
const uint8_t* data, std::size_t len)
override;
180 static inline void transform(uint32_t& a,
186 a += Core::apply(b,c,d) + in;
187 a = (a << bits | a >> (32 - bits)) + b;
195 inline static uint32_t apply(uint32_t a, uint32_t b, uint32_t c) {
196 return (c ^ (a & (b ^ c)));
202 inline static uint32_t apply(uint32_t a, uint32_t b, uint32_t c) {
203 return Core1::apply(c, a, b);
209 inline static uint32_t apply(uint32_t a, uint32_t b, uint32_t c) {
216 inline static uint32_t apply(uint32_t a, uint32_t b, uint32_t c) {
217 return (b ^ (a | ~c));
224 extern template MD5 HMAC<MD5>(
const std::string&,
const std::string&);
229 #endif // _ANCH_CRYPTO_MD5_H_ virtual const std::array< uint8_t, O > & digest() const =0
H HMAC(const std::string &, const std::string &)
Definition: hmac.hpp:38
MD5(std::basic_istream< CharT, Traits > &stream)
Definition: md5.hpp:110
MD5(const std::basic_string< CharT, Traits, Allocator > &data)
Definition: md5.hpp:100
virtual void addData(const uint8_t *data, std::size_t len) override
Definition: md5.cpp:84
AnCH framework base namespace.
Definition: base64.hpp:28
virtual void finalize() override
Definition: md5.cpp:124
MD5 hash algorithm implementation.
Definition: md5.hpp:40
Hash algorithm abstract class.
Definition: hash.hpp:41
virtual void reset() override
Definition: md5.hpp:147
MD5()
Definition: md5.cpp:50
virtual ~MD5()
Definition: md5.cpp:60
virtual const std::array< uint8_t, 16 > & digest() const override
Definition: md5.cpp:73