Skip to content

Commit bb0da94

Browse files
bigbiffGerrit Code Review
authored and
Gerrit Code Review
committed
Merge "MD5 verification sanity" into android-7.0
2 parents e9a3ee2 + 5c39507 commit bb0da94

22 files changed

+74
-56
lines changed

gui/theme/common/languages/cz.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -542,6 +542,7 @@
542542
<string name="unable_resize">Nelze natáhnout {1}.</string>
543543
<string name="no_md5_found">Soubor MD5 se nenašel pro \'{1}\'. Prosím zvolte Vypnout kontrolu MD5 během obnovy.</string>
544544
<string name="md5_fail_match">MD5 neodpovídá souboru \'{1}\'.</string>
545+
<string name="md5_matched">MD5 matched for '{1}'.</string>
545546
<string name="fail_decrypt_tar">Nelze dešifrovat soubor tar \'{1}\'</string>
546547
<string name="format_data_msg">Měli by jste restartovat recovery aby jste mohli znova používat /data.</string>
547548
<string name="format_data_err">Nelze formátovat pro zrušení šifrování.</string>

gui/theme/common/languages/de.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -572,6 +572,7 @@
572572
<string name="unable_resize">Größe von {1} kann nicht geändert werden.</string>
573573
<string name="no_md5_found">Keine MD5-Datei für '{1}' gefunden. Bitte MD5-Prüfung für Wiederherstellung deaktivieren.</string>
574574
<string name="md5_fail_match">MD5-Prüfung für '{1}' fehlgeschlagen.</string>
575+
<string name="md5_matched">MD5 matched for '{1}'.</string>
575576
<string name="fail_decrypt_tar">TAR-Datei '{1}' konnte nicht entschlüsselt werden.</string>
576577
<string name="format_data_msg">Ein Neustart von TWRP kann notwendig sein, damit /data wieder verwendet werden kann.</string>
577578
<string name="format_data_err">Formatierung zum Entfernen der Verschlüsselung kann nicht durchgeführt werden.</string>

gui/theme/common/languages/el.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -552,6 +552,7 @@
552552
<string name="unable_resize">Δεν είναι δυνατή η αλλαγή μεγέθους {1}.</string>
553553
<string name="no_md5_found">Δεν βρέθηκε MD5 αρχείο για το '{1}'. Παρακαλώ απεπηλέξτε την επαλήθευση MD5 για επαναφορά.</string>
554554
<string name="md5_fail_match">Το MD5 απέτυχε να ταυτίσει με το '{1}'.</string>
555+
<string name="md5_matched">MD5 matched for '{1}'.</string>
555556
<string name="fail_decrypt_tar">Αποτυχία αποκρυπτογράφησης του αρχείου tar '{1}'</string>
556557
<string name="format_data_msg">Ίσως χρειαστεί να επανεκκινήσετε στο recovery για να ξαναχρησιμοποιήσετε το /data.</string>
557558
<string name="format_data_err">Αδύνατη η διαμόρφωση για να καταργήσετε την κρυπτογράφηση.</string>

gui/theme/common/languages/en.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -572,6 +572,7 @@
572572
<string name="unable_resize">Unable to resize {1}.</string>
573573
<string name="no_md5_found">No md5 file found for '{1}'. Please unselect Enable MD5 verification to restore.</string>
574574
<string name="md5_fail_match">MD5 failed to match on '{1}'.</string>
575+
<string name="md5_matched">MD5 matched for '{1}'.</string>
575576
<string name="fail_decrypt_tar">Failed to decrypt tar file '{1}'</string>
576577
<string name="format_data_msg">You may need to reboot recovery to be able to use /data again.</string>
577578
<string name="format_data_err">Unable to format to remove encryption.</string>

gui/theme/common/languages/es.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -555,6 +555,7 @@
555555
<string name="unable_resize">Incapaz de cambiar el tamaño de archivo de {1}.</string>
556556
<string name="no_md5_found">No se encuentra archivo md5 para \'{1}\'. Por favor, deselecciona Activar verificación de MD5 para restaurar.</string>
557557
<string name="md5_fail_match">MD5 no coincide en \'{1}\'.</string>
558+
<string name="md5_matched">MD5 matched for '{1}'.</string>
558559
<string name="fail_decrypt_tar">Fallo al desencriptar el archivo tar '{1}'</string>
559560
<string name="format_data_msg">Quizás necesites reiniciar el recovery para ser capaz de usar /data de nuevo.</string>
560561
<string name="format_data_err">Incapaz de formatear para remover encriptación.</string>

gui/theme/common/languages/fr.xml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -553,7 +553,8 @@
553553
<string name="repair_resize">Réparation de {1} avant de redimensionner.</string>
554554
<string name="unable_resize">Incapable de redimensionner {1}.</string>
555555
<string name="no_md5_found">Pas de fichier md5 trouvé pour '{1}'. Veuillez désactiver la vérification MD5 pour effectuer la restauration.</string>
556-
<string name="md5_fail_match">Le MD5 ne corresponds pas pour '{1}'.</string>
556+
<string name="md5_fail_match">Le MD5 ne correspond pas pour '{1}'.</string>
557+
<string name="md5_matched">Le MD5 correspond pour '{1}'.</string>
557558
<string name="restoring">Restauration en cours</string>
558559
<string name="format_data_msg">Vous aurez peut-être à redémarrer pour pouvoir utiliser /data à nouveau.</string>
559560
<string name="format_data_err">Incapable de formater pour enlever l'encryption.</string>

gui/theme/common/languages/hu.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -572,6 +572,7 @@
572572
<string name="unable_resize">Nem lehet átméretezni: {1}.</string>
573573
<string name="no_md5_found">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\".</string>
574574
<string name="md5_fail_match">MD5 nem egyezik ezzel: \'{1}\'.</string>
575+
<string name="md5_matched">MD5 matched for '{1}'.</string>
575576
<string name="fail_decrypt_tar">Nem sikerült visszafejteni a(z) \'{1}\' tar fájlt</string>
576577
<string name="format_data_msg">Lehet, hogy a recovery-be kell újraindítania ahhoz, hogy képes legyen használni az /adat partíciót.</string>
577578
<string name="format_data_err">Nem sikerült formázni a titkosítás eltávolításához.</string>

gui/theme/common/languages/it.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -572,6 +572,7 @@
572572
<string name="unable_resize">Impossibile ridimensionare {1}.</string>
573573
<string name="no_md5_found">Nessun MD5 trovato per '{1}'. Deseleziona "Abilita verifica MD5" per procedere con il ripristino.</string>
574574
<string name="md5_fail_match">Il valore MD5 non corrisponde per '{1}'.</string>
575+
<string name="md5_matched">MD5 matched for '{1}'.</string>
575576
<string name="fail_decrypt_tar">Decriptazione fallita per il file Tar '{1}'</string>
576577
<string name="format_data_msg">Potresti dover riavviare la Recovery per accedere nuovamente a Data.</string>
577578
<string name="format_data_err">Impossibile formattare al fine di rimuovere la crittografia.</string>

gui/theme/common/languages/nl.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -572,6 +572,7 @@
572572
<string name="unable_resize">Kan de grootte van {1} niet wijzigen.</string>
573573
<string name="no_md5_found">Geen md5 bestand gevonden voor \'{1}\'. Gelieve MD5 controle inschakelen uitzetten om te herstellen.</string>
574574
<string name="md5_fail_match">MD5 vergelijken mislukt op \'{1}\'.</string>
575+
<string name="md5_matched">MD5 matched for '{1}'.</string>
575576
<string name="fail_decrypt_tar">Het decoderen van tar bestand \'{1}\' is mislukt</string>
576577
<string name="format_data_msg">U zou in recovery moeten herstarten om /data opnieuw te kunnen gebruiken.</string>
577578
<string name="format_data_err">Kan niet formatteren om encryptie te verwijderen.</string>

gui/theme/common/languages/pl.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -572,6 +572,7 @@
572572
<string name="unable_resize">Nie można zmienić rozmiaru {1}.</string>
573573
<string name="no_md5_found">Nie znaleziono pliku MD5 '{1}'. Proszę wyłączyć weryfikację MD5, aby przywrócić.</string>
574574
<string name="md5_fail_match">MD5 nie pasuje do '{1}'.</string>
575+
<string name="md5_matched">MD5 matched for '{1}'.</string>
575576
<string name="fail_decrypt_tar">Nie udało się odszyfrować pliku tar '{1}'</string>
576577
<string name="format_data_msg">Może być konieczne ponowne uruchomienie recovery, aby móc ponownie użyć /date.</string>
577578
<string name="format_data_err">Nie można sformatować, aby usunąć szyfrowanie.</string>

gui/theme/common/languages/pt_BR.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -542,6 +542,7 @@
542542
<string name="unable_resize">Não é possível redimensionar {1}.</string>
543543
<string name="no_md5_found">Nenhum arquivo md5 foi encontrado para \'{1}\'. Por favor, cancelar a seleção de verificação MD5 habilitar para restaurar.</string>
544544
<string name="md5_fail_match">MD5 não conseguiram corresponder na \'{1}\'.</string>
545+
<string name="md5_matched">MD5 matched for '{1}'.</string>
545546
<string name="fail_decrypt_tar">Falha ao descriptografar arquivo tar \'{1}\'</string>
546547
<string name="format_data_msg">Você pode precisar reiniciar recuperação para ser capaz de usar /data novamente.</string>
547548
<string name="format_data_err">Não é possível formatar para remover a criptografia.</string>

gui/theme/common/languages/ru.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -573,6 +573,7 @@
573573
<string name="unable_resize">Не удается изменить размер {1}.</string>
574574
<string name="no_md5_found">Отсутствует файл md5 для '{1}'. Пожалуйста отмените выбор проверки MD5 при восстановлении.</string>
575575
<string name="md5_fail_match">MD5 не соответствует для '{1}'.</string>
576+
<string name="md5_matched">MD5 matched for '{1}'.</string>
576577
<string name="fail_decrypt_tar">Не удается расшифровать tar-файл '{1}'</string>
577578
<string name="format_data_msg">Вам, возможно, потребуется перезагрузись рекавери, чтобы иметь возможность использовать /data снова.</string>
578579
<string name="format_data_err">Невозможно отформатировать и удалить шифрование.</string>

gui/theme/common/languages/sk.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -542,6 +542,7 @@
542542
<string name="unable_resize">Nemožno natiahnuť {1}.</string>
543543
<string name="no_md5_found">Súbor MD5 sa nenašiel pre \'{1}\'. Prosím zvoľte Vypnúť kontrolu MD5 počas obnovy.</string>
544544
<string name="md5_fail_match">MD5 nezodpovedá súboru \'{1}\'.</string>
545+
<string name="md5_matched">MD5 matched for '{1}'.</string>
545546
<string name="fail_decrypt_tar">Nemožno dešifrovať súbor tar \'{1}\'</string>
546547
<string name="format_data_msg">Mali by ste reštartovať recovery aby ste mohli znova používať /data.</string>
547548
<string name="format_data_err">Nemožno formátovať pre zrušenie šifrovania.</string>

gui/theme/common/languages/sl.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -542,6 +542,7 @@
542542
<string name="unable_resize">Velikosti {1} ni mogoče spremeniti.</string>
543543
<string name="no_md5_found">Za \'{1}\' ni bilo najdene datoteke MD5. Odstranite izbiro \'Omogoči preverjanje razpršila MD5\' za obnovitev.</string>
544544
<string name="md5_fail_match">Ujemanje razpršila MD5 na \'{1}\' je spodletelo.</string>
545+
<string name="md5_matched">MD5 matched for '{1}'.</string>
545546
<string name="fail_decrypt_tar">Odšifriranje datoteke TAR \'{1}\' je spodletelo</string>
546547
<string name="format_data_msg">Za ponovno uporabo /data boste morda morali ponovno zagnati obnovitev.</string>
547548
<string name="format_data_err">Formatiranje za odstranitev šifriranja ni mogoče.</string>

gui/theme/extra-languages/languages/ja.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -566,6 +566,7 @@
566566
<string name="unable_resize">{1} をリサイズできません。</string>
567567
<string name="no_md5_found">\'{1}\' の MD5 ファイルが見つかりません。リストアするには MD5 の検証を無効化してください。</string>
568568
<string name="md5_fail_match">\'{1}\' で MD5 が一致しません。</string>
569+
<string name="md5_matched">MD5 matched for '{1}'.</string>
569570
<string name="fail_decrypt_tar">tar ファイル '{1}' を復号できませんでした</string>
570571
<string name="format_data_msg">/data を再度使用するにはリカバリを再起動してください。</string>
571572
<string name="format_data_err">暗号化を解除するための初期化ができません。</string>

gui/theme/extra-languages/languages/zh_CN.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -571,6 +571,7 @@
571571
<string name="unable_resize">无法修改 {1} 大小。</string>
572572
<string name="no_md5_found">无法为 '{1}' 找到 MD5 校验文件。请取消允许 MD5 校验选项。</string>
573573
<string name="md5_fail_match">MD5 校验失败 '{1}'。</string>
574+
<string name="md5_matched">MD5 matched for '{1}'.</string>
574575
<string name="fail_decrypt_tar">解密 tar 文件 '{1}' 失败</string>
575576
<string name="format_data_msg">你可能需要重启 recovery 才能使用/data。</string>
576577
<string name="format_data_err">无法格式化并删除加密。</string>

gui/theme/extra-languages/languages/zh_TW.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -571,6 +571,7 @@
571571
<string name="unable_resize">無法調整{1}大小。</string>
572572
<string name="no_md5_found">未找到'{1}'MD5校驗檔案,請取消“啟用MD5校驗備份檔案”選項。</string>
573573
<string name="md5_fail_match">'{1}' MD5校驗失敗。</string>
574+
<string name="md5_matched">MD5 matched for '{1}'.</string>
574575
<string name="fail_decrypt_tar">無法解密tar檔案:'{1}'</string>
575576
<string name="format_data_msg">您可能需要重啟recovery才能使用/data。</string>
576577
<string name="format_data_err">無法格式化並刪除加密。</string>

partition.cpp

Lines changed: 27 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1612,52 +1612,48 @@ bool TWPartition::Backup(PartitionSettings *part_settings, pid_t *tar_fork_pid)
16121612
return false;
16131613
}
16141614

1615+
bool TWPartition::Check_Restore_File_MD5(const string& Filename) {
1616+
twrpDigest md5sum;
1617+
1618+
md5sum.setfn(Filename);
1619+
switch (md5sum.verify_md5digest()) {
1620+
case MD5_OK:
1621+
gui_msg(Msg("md5_matched=MD5 matched for '{1}'.")(Filename));
1622+
return true;
1623+
case MD5_FILE_UNREADABLE:
1624+
case MD5_NOT_FOUND:
1625+
gui_msg(Msg(msg::kError, "no_md5_found=No md5 file found for '{1}'. Please unselect Enable MD5 verification to restore.")(Filename));
1626+
break;
1627+
case MD5_MATCH_FAIL:
1628+
gui_msg(Msg(msg::kError, "md5_fail_match=MD5 failed to match on '{1}'.")(Filename));
1629+
break;
1630+
}
1631+
return false;
1632+
}
1633+
16151634
bool TWPartition::Check_MD5(PartitionSettings *part_settings) {
1616-
string Full_Filename, md5file;
1635+
string Full_Filename;
16171636
char split_filename[512];
16181637
int index = 0;
1619-
twrpDigest md5sum;
16201638

16211639
sync();
16221640

1623-
memset(split_filename, 0, sizeof(split_filename));
16241641
Full_Filename = part_settings->Backup_Folder + "/" + Backup_FileName;
16251642
if (!TWFunc::Path_Exists(Full_Filename)) {
16261643
// This is a split archive, we presume
1627-
sprintf(split_filename, "%s%03i", Full_Filename.c_str(), index);
1628-
LOGINFO("split_filename: %s\n", split_filename);
1629-
md5file = split_filename;
1630-
md5file += ".md5";
1631-
if (!TWFunc::Path_Exists(md5file)) {
1632-
gui_msg(Msg(msg::kError, "no_md5_found=No md5 file found for '{1}'. Please unselect Enable MD5 verification to restore.")(split_filename));
1633-
return false;
1634-
}
1635-
md5sum.setfn(split_filename);
1644+
memset(split_filename, 0, sizeof(split_filename));
16361645
while (index < 1000) {
1637-
if (TWFunc::Path_Exists(split_filename) && md5sum.verify_md5digest() != 0) {
1638-
gui_msg(Msg(msg::kError, "md5_fail_match=MD5 failed to match on '{1}'.")(split_filename));
1646+
sprintf(split_filename, "%s%03i", Full_Filename.c_str(), index);
1647+
if (!TWFunc::Path_Exists(split_filename))
1648+
break;
1649+
LOGINFO("split_filename: %s\n", split_filename);
1650+
if (!Check_Restore_File_MD5(split_filename))
16391651
return false;
1640-
}
16411652
index++;
1642-
sprintf(split_filename, "%s%03i", Full_Filename.c_str(), index);
1643-
md5sum.setfn(split_filename);
16441653
}
16451654
return true;
1646-
} else {
1647-
// Single file archive
1648-
md5file = Full_Filename + ".md5";
1649-
if (!TWFunc::Path_Exists(md5file)) {
1650-
gui_msg(Msg(msg::kError, "no_md5_found=No md5 file found for '{1}'. Please unselect Enable MD5 verification to restore.")(md5file));
1651-
return false;
1652-
}
1653-
md5sum.setfn(Full_Filename);
1654-
if (md5sum.verify_md5digest() != 0) {
1655-
gui_msg(Msg(msg::kError, "md5_fail_match=MD5 failed to match on '{1}'.")(split_filename));
1656-
return false;
1657-
} else
1658-
return true;
16591655
}
1660-
return false;
1656+
return Check_Restore_File_MD5(Full_Filename); // Single file archive
16611657
}
16621658

16631659
bool TWPartition::Restore(PartitionSettings *part_settings) {

partitions.hpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -156,6 +156,7 @@ class TWPartition
156156
string Get_Restore_File_System(PartitionSettings *part_settings); // Returns the file system that was in place at the time of the backup
157157
bool Restore_Tar(PartitionSettings *part_settings); // Restore using tar for file systems
158158
bool Restore_Image(PartitionSettings *part_settings); // Restore using dd for images
159+
bool Check_Restore_File_MD5(const string& Filename); // Verifies MD5 matches for a file before restoration
159160
bool Get_Size_Via_statfs(bool Display_Error); // Get Partition size, used, and free space using statfs
160161
bool Get_Size_Via_df(bool Display_Error); // Get Partition size, used, and free space using df command
161162
bool Make_Dir(string Path, bool Display_Error); // Creates a directory if it doesn't already exist

twinstall.cpp

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -296,9 +296,18 @@ extern "C" int TWinstall_zip(const char* path, int* wipe_cache) {
296296
gui_msg("check_for_md5=Checking for MD5 file...");
297297
twrpDigest md5sum;
298298
md5sum.setfn(path);
299-
int md5_return = md5sum.verify_md5digest();
300-
if (md5_return == -2) { // md5 did not match
301-
LOGERR("Aborting zip install\n");
299+
switch (md5sum.verify_md5digest()) {
300+
case MD5_OK:
301+
gui_msg(Msg("md5_matched=MD5 matched for '{1}'.")(path));
302+
break;
303+
case MD5_NOT_FOUND:
304+
gui_msg("no_md5=Skipping MD5 check: no MD5 file found");
305+
break;
306+
case MD5_FILE_UNREADABLE:
307+
LOGERR("Skipping MD5 check: MD5 file unreadable\n");
308+
break;
309+
case MD5_MATCH_FAIL: // md5 did not match
310+
LOGERR("Aborting zip install: MD5 verification failed\n");
302311
return INSTALL_CORRUPT;
303312
}
304313
}

twrpDigest.cpp

Lines changed: 8 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ int twrpDigest::computeMD5(void) {
9191
initMD5();
9292
file = fopen(md5fn.c_str(), "rb");
9393
if (file == NULL)
94-
return -1;
94+
return MD5_NOT_FOUND;
9595
while ((len = fread(buf, 1, sizeof(buf), file)) > 0) {
9696
MD5Update(&md5c, buf, len);
9797
}
@@ -128,24 +128,14 @@ int twrpDigest::read_md5digest(void) {
128128
i++;
129129
}
130130

131-
if (!foundMd5File) {
132-
gui_msg("no_md5=Skipping MD5 check: no MD5 file found");
133-
return -1;
134-
} else if (TWFunc::read_file(md5file, line) != 0) {
135-
LOGERR("Skipping MD5 check: MD5 file unreadable %s\n", strerror(errno));
136-
return 1;
137-
}
131+
if (!foundMd5File)
132+
return MD5_NOT_FOUND;
133+
if (TWFunc::read_file(md5file, line) != 0)
134+
return MD5_FILE_UNREADABLE;
138135

139136
return 0;
140137
}
141138

142-
/* verify_md5digest return codes:
143-
-2: md5 did not match
144-
-1: no md5 file found
145-
0: md5 matches
146-
1: md5 file unreadable
147-
*/
148-
149139
int twrpDigest::verify_md5digest(void) {
150140
string buf;
151141
char hex[3];
@@ -164,11 +154,8 @@ int twrpDigest::verify_md5digest(void) {
164154
snprintf(hex, 3, "%02x", md5sum[i]);
165155
md5str += hex;
166156
}
167-
if (tokens.at(0) != md5str) {
168-
gui_err("md5_fail=MD5 does not match");
169-
return -2;
170-
}
157+
if (tokens.at(0) != md5str)
158+
return MD5_MATCH_FAIL;
171159

172-
gui_msg("md5_match=MD5 matched");
173-
return 0;
160+
return MD5_OK;
174161
}

twrpDigest.hpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,14 @@ extern "C" {
2020
#include "digest/md5.h"
2121
}
2222

23+
/* verify_md5digest return codes */
24+
enum {
25+
MD5_MATCH_FAIL = -2, // -2: md5 did not match
26+
MD5_NOT_FOUND, // -1: no md5 file found
27+
MD5_OK, // 0: md5 matches
28+
MD5_FILE_UNREADABLE // 1: md5 file unreadable
29+
};
30+
2331
using namespace std;
2432

2533
class twrpDigest

0 commit comments

Comments
 (0)