// MD5.h: interface for the MD5 class. // ////////////////////////////////////////////////////////////////////// #ifndef MD5_H #define MD5_H #include #include #ifdef EXTERNAL_DISTRO namespace NAMESPACE { #endif namespace Base { class MD5 { struct State { State(); std::vector state; std::vector count; std::vector buffer; }; public: MD5(); MD5(const std::string &input); void Init(); std::vector Final(); void Update(char char0); void Update(State & state1, const std::vector &achar0, int i, int j); void Update(const std::string &s); void Update(const std::vector &achar0); void Update(const std::vector &achar0, int i); void Update(const std::vector &achar0, int i, int j); std::string asHex(); static std::string asHex(const std::vector &achar0); private: std::vector Decode(const std::vector &achar0, int i, int j); std::vector Encode(std::vector &ai, int i); int FF(int i, int j, int k, int l, int i1, int j1, int k1); int GG(int i, int j, int k, int l, int i1, int j1, int k1); int HH(int i, int j, int k, int l, int i1, int j1, int k1); int II(int i, int j, int k, int l, int i1, int j1, int k1); void Transform(State & state1, const std::vector &achar0, int i); int rotate_left(int i, int j); int uadd(int i, int j); int uadd(int i, int j, int k); int uadd(int i, int j, int k, int l); private: State state; State finals; bool finalsNull; static std::vector padding; }; }; #ifdef EXTERNAL_DISTRO }; #endif #endif // MD5_H