diff --git a/gui/theme/common/languages/cz.xml b/gui/theme/common/languages/cz.xml
index 9d6ade65..83cd0b2c 100644
--- a/gui/theme/common/languages/cz.xml
+++ b/gui/theme/common/languages/cz.xml
@@ -542,6 +542,7 @@
Nelze natáhnout {1}.
Soubor MD5 se nenašel pro \'{1}\'. Prosím zvolte Vypnout kontrolu MD5 během obnovy.
MD5 neodpovídá souboru \'{1}\'.
+ MD5 matched for '{1}'.
Nelze dešifrovat soubor tar \'{1}\'
Měli by jste restartovat recovery aby jste mohli znova používat /data.
Nelze formátovat pro zrušení šifrování.
diff --git a/gui/theme/common/languages/de.xml b/gui/theme/common/languages/de.xml
index d0946f57..0fc8fcc3 100644
--- a/gui/theme/common/languages/de.xml
+++ b/gui/theme/common/languages/de.xml
@@ -572,6 +572,7 @@
Größe von {1} kann nicht geändert werden.
Keine MD5-Datei für '{1}' gefunden. Bitte MD5-Prüfung für Wiederherstellung deaktivieren.
MD5-Prüfung für '{1}' fehlgeschlagen.
+ MD5 matched for '{1}'.
TAR-Datei '{1}' konnte nicht entschlüsselt werden.
Ein Neustart von TWRP kann notwendig sein, damit /data wieder verwendet werden kann.
Formatierung zum Entfernen der Verschlüsselung kann nicht durchgeführt werden.
diff --git a/gui/theme/common/languages/el.xml b/gui/theme/common/languages/el.xml
index 7a939fb6..7ec4d15a 100644
--- a/gui/theme/common/languages/el.xml
+++ b/gui/theme/common/languages/el.xml
@@ -552,6 +552,7 @@
Δεν είναι δυνατή η αλλαγή μεγέθους {1}.
Δεν βρέθηκε MD5 αρχείο για το '{1}'. Παρακαλώ απεπηλέξτε την επαλήθευση MD5 για επαναφορά.
Το MD5 απέτυχε να ταυτίσει με το '{1}'.
+ MD5 matched for '{1}'.
Αποτυχία αποκρυπτογράφησης του αρχείου tar '{1}'
Ίσως χρειαστεί να επανεκκινήσετε στο recovery για να ξαναχρησιμοποιήσετε το /data.
Αδύνατη η διαμόρφωση για να καταργήσετε την κρυπτογράφηση.
diff --git a/gui/theme/common/languages/en.xml b/gui/theme/common/languages/en.xml
index 0a89083d..6b05a861 100644
--- a/gui/theme/common/languages/en.xml
+++ b/gui/theme/common/languages/en.xml
@@ -572,6 +572,7 @@
Unable to resize {1}.
No md5 file found for '{1}'. Please unselect Enable MD5 verification to restore.
MD5 failed to match on '{1}'.
+ MD5 matched for '{1}'.
Failed to decrypt tar file '{1}'
You may need to reboot recovery to be able to use /data again.
Unable to format to remove encryption.
diff --git a/gui/theme/common/languages/es.xml b/gui/theme/common/languages/es.xml
index 0b15108d..6fd69390 100644
--- a/gui/theme/common/languages/es.xml
+++ b/gui/theme/common/languages/es.xml
@@ -555,6 +555,7 @@
Incapaz de cambiar el tamaño de archivo de {1}.
No se encuentra archivo md5 para \'{1}\'. Por favor, deselecciona Activar verificación de MD5 para restaurar.
MD5 no coincide en \'{1}\'.
+ MD5 matched for '{1}'.
Fallo al desencriptar el archivo tar '{1}'
Quizás necesites reiniciar el recovery para ser capaz de usar /data de nuevo.
Incapaz de formatear para remover encriptación.
diff --git a/gui/theme/common/languages/fr.xml b/gui/theme/common/languages/fr.xml
index a1891ad4..f3844611 100644
--- a/gui/theme/common/languages/fr.xml
+++ b/gui/theme/common/languages/fr.xml
@@ -553,7 +553,8 @@
Réparation de {1} avant de redimensionner.
Incapable de redimensionner {1}.
Pas de fichier md5 trouvé pour '{1}'. Veuillez désactiver la vérification MD5 pour effectuer la restauration.
- Le MD5 ne corresponds pas pour '{1}'.
+ Le MD5 ne correspond pas pour '{1}'.
+ Le MD5 correspond pour '{1}'.
Restauration en cours
Vous aurez peut-être à redémarrer pour pouvoir utiliser /data à nouveau.
Incapable de formater pour enlever l'encryption.
diff --git a/gui/theme/common/languages/hu.xml b/gui/theme/common/languages/hu.xml
index a8b525a0..ce142189 100644
--- a/gui/theme/common/languages/hu.xml
+++ b/gui/theme/common/languages/hu.xml
@@ -572,6 +572,7 @@
Nem lehet átméretezni: {1}.
Nem található MD5 fájl ehhez: \'{1}\'. Kérjük, a visszaállításhoz szüntesse meg a kijelölést: \"MD5 ellenőrzés engedélyezése\".
MD5 nem egyezik ezzel: \'{1}\'.
+ MD5 matched for '{1}'.
Nem sikerült visszafejteni a(z) \'{1}\' tar fájlt
Lehet, hogy a recovery-be kell újraindítania ahhoz, hogy képes legyen használni az /adat partíciót.
Nem sikerült formázni a titkosítás eltávolításához.
diff --git a/gui/theme/common/languages/it.xml b/gui/theme/common/languages/it.xml
index 30ba8bbe..24c8ba07 100644
--- a/gui/theme/common/languages/it.xml
+++ b/gui/theme/common/languages/it.xml
@@ -572,6 +572,7 @@
Impossibile ridimensionare {1}.
Nessun MD5 trovato per '{1}'. Deseleziona "Abilita verifica MD5" per procedere con il ripristino.
Il valore MD5 non corrisponde per '{1}'.
+ MD5 matched for '{1}'.
Decriptazione fallita per il file Tar '{1}'
Potresti dover riavviare la Recovery per accedere nuovamente a Data.
Impossibile formattare al fine di rimuovere la crittografia.
diff --git a/gui/theme/common/languages/nl.xml b/gui/theme/common/languages/nl.xml
index cb03d109..340ce6d2 100644
--- a/gui/theme/common/languages/nl.xml
+++ b/gui/theme/common/languages/nl.xml
@@ -572,6 +572,7 @@
Kan de grootte van {1} niet wijzigen.
Geen md5 bestand gevonden voor \'{1}\'. Gelieve MD5 controle inschakelen uitzetten om te herstellen.
MD5 vergelijken mislukt op \'{1}\'.
+ MD5 matched for '{1}'.
Het decoderen van tar bestand \'{1}\' is mislukt
U zou in recovery moeten herstarten om /data opnieuw te kunnen gebruiken.
Kan niet formatteren om encryptie te verwijderen.
diff --git a/gui/theme/common/languages/pl.xml b/gui/theme/common/languages/pl.xml
index b28a488b..7721421a 100644
--- a/gui/theme/common/languages/pl.xml
+++ b/gui/theme/common/languages/pl.xml
@@ -572,6 +572,7 @@
Nie można zmienić rozmiaru {1}.
Nie znaleziono pliku MD5 '{1}'. Proszę wyłączyć weryfikację MD5, aby przywrócić.
MD5 nie pasuje do '{1}'.
+ MD5 matched for '{1}'.
Nie udało się odszyfrować pliku tar '{1}'
Może być konieczne ponowne uruchomienie recovery, aby móc ponownie użyć /date.
Nie można sformatować, aby usunąć szyfrowanie.
diff --git a/gui/theme/common/languages/pt_BR.xml b/gui/theme/common/languages/pt_BR.xml
index 23c0f804..f747631c 100644
--- a/gui/theme/common/languages/pt_BR.xml
+++ b/gui/theme/common/languages/pt_BR.xml
@@ -542,6 +542,7 @@
Não é possível redimensionar {1}.
Nenhum arquivo md5 foi encontrado para \'{1}\'. Por favor, cancelar a seleção de verificação MD5 habilitar para restaurar.
MD5 não conseguiram corresponder na \'{1}\'.
+ MD5 matched for '{1}'.
Falha ao descriptografar arquivo tar \'{1}\'
Você pode precisar reiniciar recuperação para ser capaz de usar /data novamente.
Não é possível formatar para remover a criptografia.
diff --git a/gui/theme/common/languages/ru.xml b/gui/theme/common/languages/ru.xml
index 485d1e85..8be30454 100644
--- a/gui/theme/common/languages/ru.xml
+++ b/gui/theme/common/languages/ru.xml
@@ -573,6 +573,7 @@
Не удается изменить размер {1}.
Отсутствует файл md5 для '{1}'. Пожалуйста отмените выбор проверки MD5 при восстановлении.
MD5 не соответствует для '{1}'.
+ MD5 matched for '{1}'.
Не удается расшифровать tar-файл '{1}'
Вам, возможно, потребуется перезагрузись рекавери, чтобы иметь возможность использовать /data снова.
Невозможно отформатировать и удалить шифрование.
diff --git a/gui/theme/common/languages/sk.xml b/gui/theme/common/languages/sk.xml
index 544a1226..4773579f 100644
--- a/gui/theme/common/languages/sk.xml
+++ b/gui/theme/common/languages/sk.xml
@@ -542,6 +542,7 @@
Nemožno natiahnuť {1}.
Súbor MD5 sa nenašiel pre \'{1}\'. Prosím zvoľte Vypnúť kontrolu MD5 počas obnovy.
MD5 nezodpovedá súboru \'{1}\'.
+ MD5 matched for '{1}'.
Nemožno dešifrovať súbor tar \'{1}\'
Mali by ste reštartovať recovery aby ste mohli znova používať /data.
Nemožno formátovať pre zrušenie šifrovania.
diff --git a/gui/theme/common/languages/sl.xml b/gui/theme/common/languages/sl.xml
index 8b120156..2bf2ffe7 100644
--- a/gui/theme/common/languages/sl.xml
+++ b/gui/theme/common/languages/sl.xml
@@ -542,6 +542,7 @@
Velikosti {1} ni mogoče spremeniti.
Za \'{1}\' ni bilo najdene datoteke MD5. Odstranite izbiro \'Omogoči preverjanje razpršila MD5\' za obnovitev.
Ujemanje razpršila MD5 na \'{1}\' je spodletelo.
+ MD5 matched for '{1}'.
Odšifriranje datoteke TAR \'{1}\' je spodletelo
Za ponovno uporabo /data boste morda morali ponovno zagnati obnovitev.
Formatiranje za odstranitev šifriranja ni mogoče.
diff --git a/gui/theme/extra-languages/languages/ja.xml b/gui/theme/extra-languages/languages/ja.xml
index 8b1973f3..552665e9 100644
--- a/gui/theme/extra-languages/languages/ja.xml
+++ b/gui/theme/extra-languages/languages/ja.xml
@@ -566,6 +566,7 @@
{1} をリサイズできません。
\'{1}\' の MD5 ファイルが見つかりません。リストアするには MD5 の検証を無効化してください。
\'{1}\' で MD5 が一致しません。
+ MD5 matched for '{1}'.
tar ファイル '{1}' を復号できませんでした
/data を再度使用するにはリカバリを再起動してください。
暗号化を解除するための初期化ができません。
diff --git a/gui/theme/extra-languages/languages/zh_CN.xml b/gui/theme/extra-languages/languages/zh_CN.xml
index 0d8bfd3a..ef2042f6 100644
--- a/gui/theme/extra-languages/languages/zh_CN.xml
+++ b/gui/theme/extra-languages/languages/zh_CN.xml
@@ -571,6 +571,7 @@
无法修改 {1} 大小。
无法为 '{1}' 找到 MD5 校验文件。请取消允许 MD5 校验选项。
MD5 校验失败 '{1}'。
+ MD5 matched for '{1}'.
解密 tar 文件 '{1}' 失败
你可能需要重启 recovery 才能使用/data。
无法格式化并删除加密。
diff --git a/gui/theme/extra-languages/languages/zh_TW.xml b/gui/theme/extra-languages/languages/zh_TW.xml
index b7d6b1e7..860b6cc2 100644
--- a/gui/theme/extra-languages/languages/zh_TW.xml
+++ b/gui/theme/extra-languages/languages/zh_TW.xml
@@ -571,6 +571,7 @@
無法調整{1}大小。
未找到'{1}'MD5校驗檔案,請取消“啟用MD5校驗備份檔案”選項。
'{1}' MD5校驗失敗。
+ MD5 matched for '{1}'.
無法解密tar檔案:'{1}'
您可能需要重啟recovery才能使用/data。
無法格式化並刪除加密。
diff --git a/partition.cpp b/partition.cpp
index f22a283d..d6cadf90 100644
--- a/partition.cpp
+++ b/partition.cpp
@@ -1612,52 +1612,48 @@ bool TWPartition::Backup(PartitionSettings *part_settings, pid_t *tar_fork_pid)
return false;
}
+bool TWPartition::Check_Restore_File_MD5(const string& Filename) {
+ twrpDigest md5sum;
+
+ md5sum.setfn(Filename);
+ switch (md5sum.verify_md5digest()) {
+ case MD5_OK:
+ gui_msg(Msg("md5_matched=MD5 matched for '{1}'.")(Filename));
+ return true;
+ case MD5_FILE_UNREADABLE:
+ case MD5_NOT_FOUND:
+ gui_msg(Msg(msg::kError, "no_md5_found=No md5 file found for '{1}'. Please unselect Enable MD5 verification to restore.")(Filename));
+ break;
+ case MD5_MATCH_FAIL:
+ gui_msg(Msg(msg::kError, "md5_fail_match=MD5 failed to match on '{1}'.")(Filename));
+ break;
+ }
+ return false;
+}
+
bool TWPartition::Check_MD5(PartitionSettings *part_settings) {
- string Full_Filename, md5file;
+ string Full_Filename;
char split_filename[512];
int index = 0;
- twrpDigest md5sum;
sync();
- memset(split_filename, 0, sizeof(split_filename));
Full_Filename = part_settings->Backup_Folder + "/" + Backup_FileName;
if (!TWFunc::Path_Exists(Full_Filename)) {
// This is a split archive, we presume
- sprintf(split_filename, "%s%03i", Full_Filename.c_str(), index);
- LOGINFO("split_filename: %s\n", split_filename);
- md5file = split_filename;
- md5file += ".md5";
- if (!TWFunc::Path_Exists(md5file)) {
- gui_msg(Msg(msg::kError, "no_md5_found=No md5 file found for '{1}'. Please unselect Enable MD5 verification to restore.")(split_filename));
- return false;
- }
- md5sum.setfn(split_filename);
+ memset(split_filename, 0, sizeof(split_filename));
while (index < 1000) {
- if (TWFunc::Path_Exists(split_filename) && md5sum.verify_md5digest() != 0) {
- gui_msg(Msg(msg::kError, "md5_fail_match=MD5 failed to match on '{1}'.")(split_filename));
- return false;
- }
- index++;
sprintf(split_filename, "%s%03i", Full_Filename.c_str(), index);
- md5sum.setfn(split_filename);
+ if (!TWFunc::Path_Exists(split_filename))
+ break;
+ LOGINFO("split_filename: %s\n", split_filename);
+ if (!Check_Restore_File_MD5(split_filename))
+ return false;
+ index++;
}
return true;
- } else {
- // Single file archive
- md5file = Full_Filename + ".md5";
- if (!TWFunc::Path_Exists(md5file)) {
- gui_msg(Msg(msg::kError, "no_md5_found=No md5 file found for '{1}'. Please unselect Enable MD5 verification to restore.")(md5file));
- return false;
- }
- md5sum.setfn(Full_Filename);
- if (md5sum.verify_md5digest() != 0) {
- gui_msg(Msg(msg::kError, "md5_fail_match=MD5 failed to match on '{1}'.")(split_filename));
- return false;
- } else
- return true;
}
- return false;
+ return Check_Restore_File_MD5(Full_Filename); // Single file archive
}
bool TWPartition::Restore(PartitionSettings *part_settings) {
diff --git a/partitions.hpp b/partitions.hpp
index e301d9c7..4b9354fd 100644
--- a/partitions.hpp
+++ b/partitions.hpp
@@ -156,6 +156,7 @@ private:
string Get_Restore_File_System(PartitionSettings *part_settings); // Returns the file system that was in place at the time of the backup
bool Restore_Tar(PartitionSettings *part_settings); // Restore using tar for file systems
bool Restore_Image(PartitionSettings *part_settings); // Restore using dd for images
+ bool Check_Restore_File_MD5(const string& Filename); // Verifies MD5 matches for a file before restoration
bool Get_Size_Via_statfs(bool Display_Error); // Get Partition size, used, and free space using statfs
bool Get_Size_Via_df(bool Display_Error); // Get Partition size, used, and free space using df command
bool Make_Dir(string Path, bool Display_Error); // Creates a directory if it doesn't already exist
diff --git a/twinstall.cpp b/twinstall.cpp
index c2f98feb..50d286c4 100644
--- a/twinstall.cpp
+++ b/twinstall.cpp
@@ -296,9 +296,18 @@ extern "C" int TWinstall_zip(const char* path, int* wipe_cache) {
gui_msg("check_for_md5=Checking for MD5 file...");
twrpDigest md5sum;
md5sum.setfn(path);
- int md5_return = md5sum.verify_md5digest();
- if (md5_return == -2) { // md5 did not match
- LOGERR("Aborting zip install\n");
+ switch (md5sum.verify_md5digest()) {
+ case MD5_OK:
+ gui_msg(Msg("md5_matched=MD5 matched for '{1}'.")(path));
+ break;
+ case MD5_NOT_FOUND:
+ gui_msg("no_md5=Skipping MD5 check: no MD5 file found");
+ break;
+ case MD5_FILE_UNREADABLE:
+ LOGERR("Skipping MD5 check: MD5 file unreadable\n");
+ break;
+ case MD5_MATCH_FAIL: // md5 did not match
+ LOGERR("Aborting zip install: MD5 verification failed\n");
return INSTALL_CORRUPT;
}
}
diff --git a/twrpDigest.cpp b/twrpDigest.cpp
index ab8f456f..d1217cb6 100644
--- a/twrpDigest.cpp
+++ b/twrpDigest.cpp
@@ -91,7 +91,7 @@ int twrpDigest::computeMD5(void) {
initMD5();
file = fopen(md5fn.c_str(), "rb");
if (file == NULL)
- return -1;
+ return MD5_NOT_FOUND;
while ((len = fread(buf, 1, sizeof(buf), file)) > 0) {
MD5Update(&md5c, buf, len);
}
@@ -128,24 +128,14 @@ int twrpDigest::read_md5digest(void) {
i++;
}
- if (!foundMd5File) {
- gui_msg("no_md5=Skipping MD5 check: no MD5 file found");
- return -1;
- } else if (TWFunc::read_file(md5file, line) != 0) {
- LOGERR("Skipping MD5 check: MD5 file unreadable %s\n", strerror(errno));
- return 1;
- }
+ if (!foundMd5File)
+ return MD5_NOT_FOUND;
+ if (TWFunc::read_file(md5file, line) != 0)
+ return MD5_FILE_UNREADABLE;
return 0;
}
-/* verify_md5digest return codes:
- -2: md5 did not match
- -1: no md5 file found
- 0: md5 matches
- 1: md5 file unreadable
-*/
-
int twrpDigest::verify_md5digest(void) {
string buf;
char hex[3];
@@ -164,11 +154,8 @@ int twrpDigest::verify_md5digest(void) {
snprintf(hex, 3, "%02x", md5sum[i]);
md5str += hex;
}
- if (tokens.at(0) != md5str) {
- gui_err("md5_fail=MD5 does not match");
- return -2;
- }
+ if (tokens.at(0) != md5str)
+ return MD5_MATCH_FAIL;
- gui_msg("md5_match=MD5 matched");
- return 0;
+ return MD5_OK;
}
diff --git a/twrpDigest.hpp b/twrpDigest.hpp
index 7ec25eda..ec4a65f7 100644
--- a/twrpDigest.hpp
+++ b/twrpDigest.hpp
@@ -20,6 +20,14 @@ extern "C" {
#include "digest/md5.h"
}
+/* verify_md5digest return codes */
+enum {
+ MD5_MATCH_FAIL = -2, // -2: md5 did not match
+ MD5_NOT_FOUND, // -1: no md5 file found
+ MD5_OK, // 0: md5 matches
+ MD5_FILE_UNREADABLE // 1: md5 file unreadable
+};
+
using namespace std;
class twrpDigest