From cdcfee48b9720d589a4e2cd43725e8229ca336f9 Mon Sep 17 00:00:00 2001 From: bigbiff bigbiff Date: Wed, 27 Feb 2013 21:11:26 -0500 Subject: use md5.c for computation of md5sums create a framework for computing digests and reading digests in TWRP add space for backwards compatibility with bb md5sum Change-Id: Ia18e3f430eed5eba22e5052d39b9b8d88ecd4536 --- twrpDigest.cpp | 112 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 112 insertions(+) create mode 100644 twrpDigest.cpp (limited to 'twrpDigest.cpp') diff --git a/twrpDigest.cpp b/twrpDigest.cpp new file mode 100644 index 000000000..16cda3d68 --- /dev/null +++ b/twrpDigest.cpp @@ -0,0 +1,112 @@ +/* + Copyright 2012 bigbiff/Dees_Troy TeamWin + This file is part of TWRP/TeamWin Recovery Project. + + TWRP is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + TWRP is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with TWRP. If not, see . +*/ + +extern "C" { + #include "digest/md5.h" + #include "libcrecovery/common.h" +} +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "common.h" +#include "data.hpp" +#include "variables.h" +#include "twrp-functions.hpp" +#include "twrpDigest.hpp" + +using namespace std; + +void twrpDigest::setfn(string fn) { + md5fn = fn; +} + +int twrpDigest::computeMD5(void) { + string line; + struct MD5Context md5c; + FILE *file; + int len; + unsigned char buf[1024]; + MD5Init(&md5c); + file = fopen(md5fn.c_str(), "rb"); + if (file == NULL) + return -1; + while ((len = fread(buf, 1, sizeof(buf), file)) > 0) { + MD5Update(&md5c, buf, len); + } + MD5Final(md5sum ,&md5c); + return 0; +} + +int twrpDigest::write_md5digest(void) { + int i; + string md5string, md5file; + char hex[3]; + md5file = md5fn + ".md5"; + + for (i = 0; i < 16; ++i) { + snprintf(hex, 3 ,"%02x", md5sum[i]); + md5string += hex; + } + md5string += " "; + md5string += basename((char*) md5fn.c_str()); + md5string += + "\n"; + TWFunc::write_file(md5file, md5string); + return 0; +} + +int twrpDigest::read_md5digest(void) { + string md5file = md5fn + ".md5"; + if (TWFunc::read_file(md5file, lines) != 0) + return -1; + return 0; +} + +int twrpDigest::verify_md5digest(void) { + string buf; + char hex[3]; + int i; + string md5string; + + if (read_md5digest() != 0) + return -1; + stringstream ss(lines.at(0)); + vector tokens; + while (ss >> buf) + tokens.push_back(buf); + computeMD5(); + for (i = 0; i < 16; ++i) { + snprintf(hex, 3, "%02x", md5sum[i]); + md5string += hex; + } + if (tokens.at(0) != md5string) + return -2; + return 0; +} -- cgit v1.2.3