diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..6828848 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,6 @@ +cmake_minimum_required(VERSION 3.5) +project(md5sum LANGUAGES CXX) + +set(CMAKE_CXX_STANDARD 11) + +add_library(md5sum STATIC md5.cc md5_impl.cc) diff --git a/main.cc b/main.cc deleted file mode 100644 index 88b1ca2..0000000 --- a/main.cc +++ /dev/null @@ -1,10 +0,0 @@ -#include -#include "md5sum.h" - -int main() { - auto ret = md5sum("dnomd343"); - std::cout << ret << std::endl; - - auto val = md5file("/Users/jucong.lin/klotski/third_party/md5sum/343.txt"); - std::cout << val << std::endl; -} diff --git a/md5.cc b/md5.cc index 4113085..e03fe08 100644 --- a/md5.cc +++ b/md5.cc @@ -1,50 +1,54 @@ -#include "md5sum.h" -#include "md5def.h" - -static char hb2hex(uint8_t hb) { - hb &= 0xF; - return hb < 10 ? '0' + hb : hb - 10 + 'a'; -} - -std::string md5sum(const std::string &dat) { - return md5sum(dat.c_str(), dat.length()); -} - -std::string md5sum(const void *dat, size_t len) { - uint8_t out[16]; - md5_bin(dat, len, out); - - std::string res; - for (auto x : out) { - res.push_back(hb2hex(x >> 4)); - res.push_back(hb2hex(x)); - } - return res; -} - -std::string md5file(const char *filename) { - std::FILE *file = std::fopen(filename, "rb"); - std::string res = md5file(file); - std::fclose(file); - return res; -} - -std::string md5file(std::FILE *file) { - MD5_CTX c; - md5_init(&c); - - uint8_t out[16]; - size_t len = 0; - char buff[BUFSIZ]; - while ((len = std::fread(buff, sizeof(char), BUFSIZ, file)) > 0) { - md5_update(&c, buff, len); - } - md5_final(out, &c); - - std::string res; - for (auto x : out) { - res.push_back(hb2hex(x >> 4)); - res.push_back(hb2hex(x)); - } - return res; -} +#include "md5sum.h" +#include "md5def.h" + +namespace md5 { + +static char hb2hex(uint8_t hb) { + hb &= 0xF; + return char(hb < 10 ? hb + '0' : hb - 10 + 'a'); +} + +std::string md5sum(const std::string &dat) { + return md5sum(dat.c_str(), dat.length()); +} + +std::string md5sum(const void *dat, size_t len) { + uint8_t out[16]; + md5_bin(dat, len, out); + + std::string res; + for (auto x : out) { + res.push_back(hb2hex(x >> 4)); + res.push_back(hb2hex(x)); + } + return res; +} + +std::string md5file(const char *filename) { + std::FILE *file = std::fopen(filename, "rb"); + std::string res = md5file(file); + std::fclose(file); + return res; +} + +std::string md5file(std::FILE *file) { + MD5_CTX c; + md5_init(&c); + + size_t len; + uint8_t out[16]; + char buff[BUFSIZ]; + while ((len = std::fread(buff, sizeof(char), BUFSIZ, file)) > 0) { + md5_update(&c, buff, len); + } + md5_final(out, &c); + + std::string res; + for (auto x : out) { + res.push_back(hb2hex(x >> 4)); + res.push_back(hb2hex(x)); + } + return res; +} + +} // namespace md5 diff --git a/md5_impl.cc b/md5_impl.cc index d408c8e..dc4882e 100644 --- a/md5_impl.cc +++ b/md5_impl.cc @@ -23,6 +23,8 @@ #define GET(n) (ctx->block[(n)]) #endif +namespace md5 { + static const void* md5_body(MD5_CTX *ctx, const void *data, uint32_t size) { const auto *ptr = (uint8_t*)data; @@ -208,3 +210,5 @@ void md5_bin(const void *dat, size_t len, uint8_t out[16]) { md5_update(&c, dat, len); md5_final(out, &c); } + +} // namespace md5 diff --git a/md5def.h b/md5def.h index 2d7e194..838b1f5 100644 --- a/md5def.h +++ b/md5def.h @@ -1,5 +1,7 @@ #pragma once +namespace md5 { + typedef struct { uint32_t lo, hi; uint32_t a, b, c, d; @@ -11,3 +13,5 @@ void md5_init(MD5_CTX *ctx); void md5_final(uint8_t *result, MD5_CTX *ctx); void md5_update(MD5_CTX *ctx, const void *data, uint32_t size); void md5_bin(const void *dat, size_t len, uint8_t out[16]); + +} // namespace md5 diff --git a/md5sum.h b/md5sum.h index 3d521df..a6e47e8 100644 --- a/md5sum.h +++ b/md5sum.h @@ -1,12 +1,13 @@ -#ifndef MD5_H -#define MD5_H - -#include - -std::string md5sum(const std::string &dat); -std::string md5sum(const void *dat, size_t len); - -std::string md5file(std::FILE *file); -std::string md5file(const char *filename); - -#endif // end of MD5_H +#pragma once + +#include + +namespace md5 { + +std::string md5sum(const std::string &dat); +std::string md5sum(const void *dat, size_t len); + +std::string md5file(std::FILE *file); +std::string md5file(const char *filename); + +} // namespace md5