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/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>