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
diff --git a/gui/theme/extra-languages/languages/ja.xml b/gui/theme/extra-languages/languages/ja.xml
index 552665e..58fe3aa 100644
--- a/gui/theme/extra-languages/languages/ja.xml
+++ b/gui/theme/extra-languages/languages/ja.xml
@@ -202,7 +202,7 @@
 		<string name="enc_disabled">無効 - パスワード設定で有効化します</string>
 		<string name="enc_enabled">有効</string>
 		<string name="enable_backup_comp_chk">圧縮する</string>
-		<string name="skip_md5_backup_chk">バックアップ時に MD5 を生成しない</string>
+		<string name="skip_digest_backup_chk">バックアップ時に Digest を生成しない</string>
 		<string name="disable_backup_space_chk">空き容量のチェックを無効化する</string>
 		<string name="refresh_sizes_btn">サイズの更新</string>
 		<string name="swipe_backup">スワイプでバックアップ</string>
@@ -235,7 +235,7 @@
 		<string name="restore_try_decrypt_s">復号の試行中</string>
 		<string name="restore_backup_date">%tw_restore_file_date% に作成されたバックアップ</string>
 		<string name="restore_sel_part">リストアするパーティションの選択:</string>
-		<string name="restore_enable_md5_chk">バックアップファイルの MD5 検証を有効化する</string>
+		<string name="restore_enable_digest_chk">バックアップファイルの Digest 検証を有効化する</string>
 		<string name="restore_complete">リストアしました</string>
 		<string name="swipe_restore">スワイプでリストア</string>
 		<string name="swipe_restore_s">   リストア</string>
@@ -475,12 +475,12 @@
 		<string name="mtp_crash">MTP がクラッシュしました。起動時に開始しません。</string>
 		<string name="decrypt_success">デフォルトのパスワードで復号しました。</string>
 		<string name="unable_to_decrypt">デフォルトのパスワードで復号できません。data の初期化が必要です。</string>
-		<string name="generating_md51">MD5 の生成中</string>
-		<!-- Message displayed during a backup if we are generating an MD5, ideally, leave the leading " * " to help align and separate this text from other console text -->
-		<string name="generating_md52"> * MD5 の生成中...</string>
-		<string name="md5_created"> * MD5 を生成しました。</string>
-		<string name="md5_error"> * MD5 エラー!</string>
-		<string name="md5_compute_error"> * MD5の計算エラーが起きました。</string>
+		<string name="generating_digest1">Digest の生成中</string>
+		<!-- Message displayed during a backup if we are generating an Digest, ideally, leave the leading " * " to help align and separate this text from other console text -->
+		<string name="generating_digest2"> * Digest の生成中...</string>
+		<string name="digest_created"> * Digest を生成しました。</string>
+		<string name="digest_error"> * Digest エラー!</string>
+		<string name="digest_compute_error"> * Digestの計算エラーが起きました。</string>
 		<string name="current_date">(現在の日付)</string>
 		<string name="auto_generate">(自動生成)</string>
 		<string name="unable_to_locate_partition">バックアップの計算で \'{1}\' パーティションが見つかりません。</string>
@@ -501,8 +501,8 @@
 		<string name="restore_folder">リストアフォルダ: \'{1}\'</string>
 		<!-- {1} is the partition display name and {2} is the number of seconds -->
 		<string name="restore_part_done">[{1} 完了 ({2} 秒)]</string>
-		<string name="verifying_md5">MD5 の検証中</string>
-		<string name="skip_md5">ユーザー設定に基づき MD5 の検証をスキップします。</string>
+		<string name="verifying_digest">Digest の検証中</string>
+		<string name="skip_digest">ユーザー設定に基づき Digest の検証をスキップします。</string>
 		<string name="calc_restore">リストアの詳細を計算中...</string>
 		<string name="restore_read_only">{1} をリストアできません -- 読み取り専用でマウントされています。</string>
 		<string name="restore_unable_locate">リストアする \'{1}\' パーティションが見つかりません。</string>
@@ -564,9 +564,9 @@
 		<string name="cannot_resize">{1} をリサイズできません。</string>
 		<string name="repair_resize">リサイズの前に {1} を修復しています。</string>
 		<string name="unable_resize">{1} をリサイズできません。</string>
-		<string name="no_md5_found">\'{1}\' の MD5 ファイルが見つかりません。リストアするには MD5 の検証を無効化してください。</string>
-		<string name="md5_fail_match">\'{1}\' で MD5 が一致しません。</string>
-		<string name="md5_matched">MD5 matched for '{1}'.</string>
+		<string name="no_digest_found">\'{1}\' の Digest ファイルが見つかりません。リストアするには Digest の検証を無効化してください。</string>
+		<string name="digest_fail_match">\'{1}\' で Digest が一致しません。</string>
+		<string name="digest_matched">Digest matched for '{1}'.</string>
 		<string name="fail_decrypt_tar">tar ファイル '{1}' を復号できませんでした</string>
 		<string name="format_data_msg">/data を再度使用するにはリカバリを再起動してください。</string>
 		<string name="format_data_err">暗号化を解除するための初期化ができません。</string>
@@ -587,7 +587,7 @@
 		<string name="backup_folder_set">バックアップフォルダを '{1}' に設定しました</string>
 		<string name="locate_backup_err">バックアップ \'{1}\' が見つかりません</string>
 		<string name="set_restore_opt">リストアオプションの設定中: \'{1}\':</string>
-		<string name="md5_check_skip">MD5 チェックのスキップが有効です</string>
+		<string name="digest_check_skip">Digest チェックのスキップが有効です</string>
 		<string name="ors_encrypt_restore_err">OpenRecoveryScript を使用して暗号化されたバックアップをリストアできません。</string>
 		<string name="mounting">マウント中</string>
 		<string name="unmounting">マウント解除中</string>
@@ -608,7 +608,7 @@
 		<string name="installing_zip">ZIP ファイル \'{1}\' をインストール中</string>
 		<string name="select_backup_opt">バックアップオプションの設定中:</string>
 		<string name="compression_on">圧縮は有効です</string>
-		<string name="md5_off">MD5 生成は無効です</string>
+		<string name="digest_off">Digest 生成は無効です</string>
 		<string name="backup_fail">バックアップに失敗しました</string>
 		<string name="backup_clean">バックアップに失敗しました。バックアップフォルダを掃除中です。</string>
 		<string name="running_recovery_commands">リカバリコマンドの実行中</string>
@@ -616,15 +616,15 @@
 		<string name="running_ors">OpenRecoveryScript の実行中</string>
 		<string name="ors_complete">OpenRecoveryScript を実行しました</string>
 		<string name="no_updater_binary">ZIP ファイルの中で \'{1}\' が見つかりませんでした。</string>
-		<string name="check_for_md5">MD5 ファイルをチェック中...</string>
+		<string name="check_for_digest">Digest ファイルをチェック中...</string>
 		<string name="fail_sysmap">ファイル \'{1}\' のマップに失敗しました</string>
 		<string name="verify_zip_sig">ZIP の署名を検証中...</string>
 		<string name="verify_zip_fail">ZIP の署名の検証に失敗しました!</string>
 		<string name="verify_zip_done">ZIP の署名の検証に成功しました。</string>
 		<string name="zip_corrupt">ZIP ファイルが破損しています!</string>
-		<string name="no_md5">MD5 チェックをスキップ中: MD5 ファイルが見つかりません</string>
-		<string name="md5_fail">MD5 が一致しません</string>
-		<string name="md5_match">MD5 が一致しました</string>
+		<string name="no_digest">Digest チェックをスキップ中: Digest ファイルが見つかりません</string>
+		<string name="digest_fail">Digest が一致しません</string>
+		<string name="digest_match">Digest が一致しました</string>
 		<string name="pid_signal">{1} プロセスはこのシグナルで終了しました: {2}</string>
 		<string name="pid_error">{1} プロセスはこのエラーで終了しました: {2}</string>
 		<string name="install_dumlock">HTC Dumlock を system にインストール中...</string>
diff --git a/gui/theme/extra-languages/languages/zh_CN.xml b/gui/theme/extra-languages/languages/zh_CN.xml
index 9abbe21..6ba56e3 100644
--- a/gui/theme/extra-languages/languages/zh_CN.xml
+++ b/gui/theme/extra-languages/languages/zh_CN.xml
@@ -215,7 +215,7 @@
 		<string name="enc_disabled">已禁用 - 设置密码以启用</string>
 		<string name="enc_enabled">已启用</string>
 		<string name="enable_backup_comp_chk">启用压缩</string>
-		<string name="skip_md5_backup_chk">当备份时跳过生成 MD5</string>
+		<string name="skip_digest_backup_chk" version="2">当备份时跳过生成 Digest</string>
 		<string name="disable_backup_space_chk">禁用剩余空间检查</string>
 		<string name="current_boot_slot">当前分区:%tw_active_slot%</string>
 		<string name="boot_slot_a">分区 A</string>
@@ -253,7 +253,7 @@
 		<string name="restore_try_decrypt_s">正在尝试解密</string>
 		<string name="restore_backup_date">备份于 %tw_restore_file_date%</string>
 		<string name="restore_sel_part">选择要恢复的分区:</string>
-		<string name="restore_enable_md5_chk">启用 MD5 校验备份文件</string>
+		<string name="restore_enable_digest_chk" version="2">启用 Digest 校验备份文件</string>
 		<string name="restore_complete">恢复完成</string>
 		<string name="swipe_restore">滑动按钮确认恢复</string>
 		<string name="swipe_restore_s">   恢复</string>
@@ -494,12 +494,12 @@
 		<string name="mtp_crash">MTP 已崩溃。启动时不再加载 MTP。</string>
 		<string name="decrypt_success">已使用默认密码解密成功。</string>
 		<string name="unable_to_decrypt">无法使用默认密码来解密,您可能需要格式化 Data 分区。</string>
-		<string name="generating_md51">正在生成 MD5</string>
-		<!-- Message displayed during a backup if we are generating an MD5, ideally, leave the leading " * " to help align and separate this text from other console text -->
-		<string name="generating_md52"> * 正在生成 MD5…</string>
-		<string name="md5_created"> * MD5 已生成。</string>
-		<string name="md5_error"> * MD5 错误!</string>
-		<string name="md5_compute_error"> * 计算 MD5 错误。</string>
+		<string name="generating_digest1" version="2">正在生成 Digest</string>
+		<!-- Message displayed during a backup if we are generating an Digest, ideally, leave the leading " * " to help align and separate this text from other console text -->
+		<string name="generating_digest2" version="2"> * 正在生成 Digest…</string>
+		<string name="digest_created" version="2"> * Digest 已生成。</string>
+		<string name="digest_error" version="2"> * Digest 错误!</string>
+		<string name="digest_compute_error" version="2"> * 计算 Digest 错误。</string>
 		<string name="current_date">(Current Date)</string>
 		<string name="auto_generate">(Auto Generate)</string>
 		<string name="unable_to_locate_partition">未找到 '{1}' 分区。</string>
@@ -520,8 +520,8 @@
 		<string name="restore_folder">恢复文件夹:'{1}'</string>
 		<!-- {1} is the partition display name and {2} is the number of seconds -->
 		<string name="restore_part_done">[{1} 恢复完成({2} 秒)]</string>
-		<string name="verifying_md5">正在校验 MD5</string>
-		<string name="skip_md5">基于用户设置,已跳过 MD5 检查。</string>
+		<string name="verifying_digest" version="2">正在校验 Digest</string>
+		<string name="skip_digest" version="2">基于用户设置,已跳过 Digest 检查。</string>
 		<string name="calc_restore">正在计算恢复详情…</string>
 		<string name="restore_read_only">无法恢复 {1} -- 已挂载为只读。</string>
 		<string name="restore_unable_locate">未找到 '{1}' 分区。</string>
@@ -584,9 +584,9 @@
 		<string name="cannot_resize">无法更改 {1} 大小。</string>
 		<string name="repair_resize">在调整大小之前修复 {1}。</string>
 		<string name="unable_resize">无法调整 {1} 大小。</string>
-		<string name="no_md5_found">未找到 '{1}' 的 MD5 校验文件。请取消选中“启用 MD5 校验备份文件”复选框。</string>
-		<string name="md5_fail_match">'{1}' MD5 校验失败。</string>
-		<string name="md5_matched">MD5 匹配 '{1}'。</string>
+		<string name="no_digest_found" version="2">未找到 '{1}' 的 Digest 校验文件。请取消选中“启用 Digest 校验备份文件”复选框。</string>
+		<string name="digest_fail_match" version="2">'{1}' Digest 校验失败。</string>
+		<string name="digest_matched" version="2">Digest 匹配 '{1}'。</string>
 		<string name="fail_decrypt_tar">无法解密 tar 文件 '{1}'</string>
 		<string name="format_data_msg">您可能需要重启 Recovery 才能使用/data。</string>
 		<string name="format_data_err">无法格式化并删除加密。</string>
@@ -608,7 +608,7 @@
 		<string name="backup_folder">备份文件夹设置为:'{1}'</string>
 		<string name="locate_backup_err">未找到备份文件 '{1}'</string>
 		<string name="set_restore_opt">设置恢复选项:'{1}':</string>
-		<string name="md5_check_skip">跳过校验 MD5 已开启</string>
+		<string name="digest_check_skip" version="2">跳过校验 Digest 已开启</string>
 		<string name="ors_encrypt_restore_err">无法使用 OpenRecoveryScript 脚本恢复加密备份。</string>
 		<string name="mounting">正在挂载</string>
 		<string name="unmounting">正在卸载</string>
@@ -629,7 +629,7 @@
 		<string name="installing_zip">正在安装 Zip 刷机包 '{1}'</string>
 		<string name="select_backup_opt">设置备份选项:</string>
 		<string name="compression_on">压缩选项已开启</string>
-		<string name="md5_off">MD5 生成已关闭</string>
+		<string name="digest_off" version="2">Digest 生成已关闭</string>
 		<string name="backup_fail">备份失败</string>
 		<string name="backup_clean">备份失败。正在清理备份文件夹。</string>
 		<string name="running_recovery_commands">运行 Recovery 命令</string>
@@ -637,15 +637,15 @@
 		<string name="running_ors">运行 OpenRecoveryScript 脚本</string>
 		<string name="ors_complete">运行 OpenRecoveryScript 脚本完成</string>
 		<string name="invalid_zip_format">Zip 文件格式无效!</string>
-		<string name="check_for_md5">正在检测 MD5…</string>
+		<string name="check_for_digest" version="2">正在检测 Digest…</string>
 		<string name="fail_sysmap">映射文件 '{1}' 失败</string>
 		<string name="verify_zip_sig">正在校验 Zip 刷机包签名…</string>
 		<string name="verify_zip_fail">刷机包签名校验失败!</string>
 		<string name="verify_zip_done">刷机包签名校验成功。</string>
 		<string name="zip_corrupt">刷机包已损坏!</string>
-		<string name="no_md5">跳过 MD5 校验:未找到 MD5 文件</string>
-		<string name="md5_fail">MD5 不匹配</string>
-		<string name="md5_match">MD5 校验成功</string>
+		<string name="no_digest" version="2">跳过 Digest 校验:未找到 Digest 文件</string>
+		<string name="digest_fail" version="2">Digest 不匹配</string>
+		<string name="digest_match" version="2">Digest 校验成功</string>
 		<string name="pid_signal">{1} 过程结束,标志:{2}</string>
 		<string name="pid_error">{1} 过程结束,错误:{2}</string>
 		<string name="install_dumlock">安装 HTC Dumlock 到系统…</string>
diff --git a/gui/theme/extra-languages/languages/zh_TW.xml b/gui/theme/extra-languages/languages/zh_TW.xml
index 55a9dcc..d52f8bf 100644
--- a/gui/theme/extra-languages/languages/zh_TW.xml
+++ b/gui/theme/extra-languages/languages/zh_TW.xml
@@ -215,7 +215,7 @@
 		<string name="enc_disabled">已禁用 - 設置密碼以啟用</string>
 		<string name="enc_enabled">已啟用</string>
 		<string name="enable_backup_comp_chk">啟用壓縮</string>
-		<string name="skip_md5_backup_chk">備份時跳過生成 MD5</string>
+		<string name="skip_digest_backup_chk" version="2">備份時跳過生成 Digest</string>
 		<string name="disable_backup_space_chk">禁用剩餘空間檢查</string>
 		<string name="current_boot_slot">當前分區:%tw_active_slot%</string>
 		<string name="boot_slot_a">分區 A</string>
@@ -253,7 +253,7 @@
 		<string name="restore_try_decrypt_s">正在嘗試解密</string>
 		<string name="restore_backup_date">備份於 %tw_restore_file_date%</string>
 		<string name="restore_sel_part">選擇要恢復的分區:</string>
-		<string name="restore_enable_md5_chk">啟用 MD5 校驗備份檔案</string>
+		<string name="restore_enable_digest_chk" version="2">啟用 Digest 校驗備份檔案</string>
 		<string name="restore_complete">恢復完成</string>
 		<string name="swipe_restore">滑動按鈕確認恢復</string>
 		<string name="swipe_restore_s">   恢復</string>
@@ -494,12 +494,12 @@
 		<string name="mtp_crash">MTP 已崩潰。啟動時不再加載 MTP。</string>
 		<string name="decrypt_success">已使用默認密碼解密成功。</string>
 		<string name="unable_to_decrypt">無法使用默認密碼來解密,您可能需要格式化 Data 分區。</string>
-		<string name="generating_md51">正在生成 MD5</string>
-		<!-- Message displayed during a backup if we are generating an MD5, ideally, leave the leading " * " to help align and separate this text from other console text -->
-		<string name="generating_md52"> * 正在生成 MD5…</string>
-		<string name="md5_created"> * MD5 已生成。</string>
-		<string name="md5_error"> * MD5 錯誤!</string>
-		<string name="md5_compute_error"> * 計算 MD5 錯誤。</string>
+		<string name="generating_digest1" version="2">正在生成 Digest</string>
+		<!-- Message displayed during a backup if we are generating an Digest, ideally, leave the leading " * " to help align and separate this text from other console text -->
+		<string name="generating_digest2" version="2"> * 正在生成 Digest…</string>
+		<string name="digest_created" version="2"> * Digest 已生成。</string>
+		<string name="digest_error" version="2"> * Digest 錯誤!</string>
+		<string name="digest_compute_error" version="2"> * 計算 Digest 錯誤。</string>
 		<string name="current_date">(Current Date)</string>
 		<string name="auto_generate">(Auto Generate)</string>
 		<string name="unable_to_locate_partition">未找到 '{1}' 分區。</string>
@@ -520,8 +520,8 @@
 		<string name="restore_folder">恢復檔案夾:'{1}'</string>
 		<!-- {1} is the partition display name and {2} is the number of seconds -->
 		<string name="restore_part_done">[{1} 恢復完成({2} 秒)]</string>
-		<string name="verifying_md5">正在校驗 MD5</string>
-		<string name="skip_md5">基於用戶設置,已跳過 MD5 檢查。</string>
+		<string name="verifying_digest" version="2">正在校驗 Digest</string>
+		<string name="skip_digest" version="2">基於用戶設置,已跳過 Digest 檢查。</string>
 		<string name="calc_restore">正在計算恢復詳情…</string>
 		<string name="restore_read_only">無法恢復 {1} -- 已掛載為只讀。</string>
 		<string name="restore_unable_locate">未找到 '{1}' 分區。</string>
@@ -584,9 +584,9 @@
 		<string name="cannot_resize">無法更改 {1} 大小。</string>
 		<string name="repair_resize">在調整大小之前修復 {1}。</string>
 		<string name="unable_resize">無法調整 {1} 大小。</string>
-		<string name="no_md5_found">未找到 '{1}' 的 MD5 校驗檔案。請取消選中“啟用 MD5 校驗備份檔案”複選框。</string>
-		<string name="md5_fail_match">'{1}' MD5 校驗失敗。</string>
-		<string name="md5_matched">MD5 匹配 '{1}'。</string>
+		<string name="no_digest_found" version="2">未找到 '{1}' 的 Digest 校驗檔案。請取消選中“啟用 Digest 校驗備份檔案”複選框。</string>
+		<string name="digest_fail_match" version="2">'{1}' Digest 校驗失敗。</string>
+		<string name="digest_matched" version="2">Digest 匹配 '{1}'。</string>
 		<string name="fail_decrypt_tar">無法解密 tar 檔案 '{1}'</string>
 		<string name="format_data_msg">您可能需要重啟 Recovery 才能使用/data。</string>
 		<string name="format_data_err">無法格式化並刪除加密。</string>
@@ -608,7 +608,7 @@
 		<string name="backup_folder">備份檔案夾設置為:'{1}'</string>
 		<string name="locate_backup_err">未找到備份檔案 '{1}'</string>
 		<string name="set_restore_opt">設置恢復選項:'{1}':</string>
-		<string name="md5_check_skip">跳過校驗 MD5 已開啟</string>
+		<string name="digest_check_skip" version="2">跳過校驗 Digest 已開啟</string>
 		<string name="ors_encrypt_restore_err">無法使用 OpenRecoveryScript 腳本恢復加密備份。</string>
 		<string name="mounting">正在掛載</string>
 		<string name="unmounting">正在卸載</string>
@@ -629,7 +629,7 @@
 		<string name="installing_zip">正在安裝 Zip 刷機包 '{1}'</string>
 		<string name="select_backup_opt">設置備份選項:</string>
 		<string name="compression_on">壓縮選項已開啟</string>
-		<string name="md5_off">MD5 生成已關閉</string>
+		<string name="digest_off" version="2">Digest 生成已關閉</string>
 		<string name="backup_fail">備份失敗</string>
 		<string name="backup_clean">備份失敗。正在清理備份檔案夾。</string>
 		<string name="running_recovery_commands">運行 Recovery 命令</string>
@@ -637,15 +637,15 @@
 		<string name="running_ors">運行 OpenRecoveryScript 腳本</string>
 		<string name="ors_complete">運行 OpenRecoveryScript 腳本完成</string>
 		<string name="invalid_zip_format">Zip 檔案格式無效!</string>
-		<string name="check_for_md5">正在檢測 MD5…</string>
+		<string name="check_for_digest" version="2">正在檢測 Digest…</string>
 		<string name="fail_sysmap">映射檔案 '{1}' 失敗</string>
 		<string name="verify_zip_sig">正在校驗 Zip 刷機包簽名…</string>
 		<string name="verify_zip_fail">刷機包簽名校驗失敗!</string>
 		<string name="verify_zip_done">刷機包簽名校驗成功。</string>
 		<string name="zip_corrupt">刷機包已損壞!</string>
-		<string name="no_md5">跳過 MD5 校驗:未找到 MD5 檔案</string>
-		<string name="md5_fail">MD5 不匹配</string>
-		<string name="md5_match">MD5 校驗成功</string>
+		<string name="no_digest" version="2">跳過 Digest 校驗:未找到 Digest 檔案</string>
+		<string name="digest_fail" version="2">Digest 不匹配</string>
+		<string name="digest_match" version="2">Digest 校驗成功</string>
 		<string name="pid_signal">{1} 過程結束,標誌:{2}</string>
 		<string name="pid_error">{1} 過程結束,錯誤:{2}</string>
 		<string name="install_dumlock">安裝 HTC Dumlock 到系統…</string>