00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015 #ifndef CGATOOLS_UTIL_MD5_HPP_
00016 #define CGATOOLS_UTIL_MD5_HPP_ 1
00017
00020
00021 #include "cgatools/core.hpp"
00022 #include <string>
00023 #include <boost/array.hpp>
00024
00025 namespace cgatools { namespace util {
00026
00028 class Md5Digest
00029 {
00030 public:
00032 Md5Digest();
00033
00036 Md5Digest(const void* val);
00037
00040 void set(const void* val);
00041
00043 const void* data() const;
00044
00046 size_t size() const
00047 {
00048 return 16;
00049 }
00050
00053 std::string hex() const;
00054
00055 private:
00056 boost::array<uint8_t, 16> digest_;
00057 };
00058
00059 bool operator==(const Md5Digest& lhs, const Md5Digest& rhs);
00060 inline bool operator!=(const Md5Digest& lhs, const Md5Digest& rhs)
00061 {
00062 return ! (lhs == rhs);
00063 }
00064
00068 class Md5Context
00069 {
00070 public:
00072 Md5Context();
00073
00075 void init();
00076
00078 void update(const void *buf, size_t length);
00079
00081 Md5Digest getDigest() const;
00082
00085 std::string hexDigest() const;
00086
00087 private:
00088 void final();
00089 void transform();
00090
00091 boost::array<uint32_t, 4> buf_;
00092 boost::array<uint32_t, 2> bits_;
00093 boost::array<uint8_t, 64> in_;
00094 };
00095
00096 } }
00097
00098 #endif // CGATOOLS_UTIL_MD5_HPP_