From 56cf56465857e79e814b1e2d50f13e176170fcb3 Mon Sep 17 00:00:00 2001 From: bigbiff bigbiff Date: Fri, 19 Aug 2016 17:43:45 -0400 Subject: twrpDigest refactor This patch is to refactor twrpDigest using polymorphism and inheritance to use the same call patterns for creating and reading a digest. Now a library. Use SHA2 from libcrypto. SHA2 is default if device has libcrypto. Change string MD5 everywhere to use digest or Digest instead. Updated string tags to digest. Translation will be required. Switch out digest code into a driver class from partitionmanager. SHA2 is better for digest creation due to decreased collision space compared to MD5 and SHA1. See https://en.wikipedia.org/wiki/SHA-2 Change-Id: I74b5546789990b12aa4ce2e389d25f80a3fe213f --- twrpDigest.cpp | 161 --------------------------------------------------------- 1 file changed, 161 deletions(-) delete mode 100644 twrpDigest.cpp (limited to 'twrpDigest.cpp') diff --git a/twrpDigest.cpp b/twrpDigest.cpp deleted file mode 100644 index a9ba20a38..000000000 --- a/twrpDigest.cpp +++ /dev/null @@ -1,161 +0,0 @@ -/* - Copyright 2012 to 2016 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 "twcommon.h" -#include "data.hpp" -#include "variables.h" -#include "twrp-functions.hpp" -#include "twrpDigest.hpp" -#include "set_metadata.h" -#include "gui/gui.hpp" - -using namespace std; - -void twrpDigest::setfn(const string& fn) { - md5fn = fn; -} - -void twrpDigest::initMD5(void) { - MD5Init(&md5c); - md5string = ""; -} - -int twrpDigest::updateMD5stream(unsigned char* stream, int len) { - if (md5fn.empty()) { - MD5Update(&md5c, stream, len); - } - else { - return -1; - } - return 0; -} - -void twrpDigest::finalizeMD5stream() { - MD5Final(md5sum, &md5c); -} - -string twrpDigest::createMD5string() { - int i; - char hex[3]; - - for (i = 0; i < 16; ++i) { - snprintf(hex, 3, "%02x", md5sum[i]); - md5string += hex; - } - if (!md5fn.empty()) { - md5string += " "; - md5string += basename((char*) md5fn.c_str()); - md5string += + "\n"; - } - return md5string; -} - -int twrpDigest::computeMD5(void) { - string line; - FILE *file; - int len; - unsigned char buf[1024]; - initMD5(); - file = fopen(md5fn.c_str(), "rb"); - if (file == NULL) - return MD5_NOT_FOUND; - while ((len = fread(buf, 1, sizeof(buf), file)) > 0) { - MD5Update(&md5c, buf, len); - } - fclose(file); - MD5Final(md5sum, &md5c); - return 0; -} - -int twrpDigest::write_md5digest(void) { - string md5file, md5str; - md5file = md5fn + ".md5"; - - md5str = createMD5string(); - TWFunc::write_file(md5file, md5str); - tw_set_default_metadata(md5file.c_str()); - LOGINFO("MD5 for %s: %s\n", md5fn.c_str(), md5str.c_str()); - return 0; -} - -int twrpDigest::read_md5digest(void) { - size_t i = 0; - bool foundMd5File = false; - string md5file = ""; - vector md5ext; - md5ext.push_back(".md5"); - md5ext.push_back(".md5sum"); - - while (i < md5ext.size()) { - md5file = md5fn + md5ext[i]; - if (TWFunc::Path_Exists(md5file)) { - foundMd5File = true; - break; - } - i++; - } - - if (!foundMd5File) - return MD5_NOT_FOUND; - if (TWFunc::read_file(md5file, line) != 0) - return MD5_FILE_UNREADABLE; - - return 0; -} - -int twrpDigest::verify_md5digest(void) { - string buf; - char hex[3]; - int i, ret; - string md5str; - - ret = read_md5digest(); - if (ret != 0) - return ret; - stringstream ss(line); - vector tokens; - while (ss >> buf) - tokens.push_back(buf); - computeMD5(); - for (i = 0; i < 16; ++i) { - snprintf(hex, 3, "%02x", md5sum[i]); - md5str += hex; - } - if (tokens.empty() || tokens.at(0) != md5str) - return MD5_MATCH_FAIL; - - return MD5_OK; -} -- cgit v1.2.3