From 2d6a73e4f491230bed299e3dade051c5cb7b0099 Mon Sep 17 00:00:00 2001 From: Pete Batard Date: Thu, 25 Jun 2020 11:58:56 +0100 Subject: [PATCH] [checksum] enable toggling of SHA512 (Alt-H) * Also fix overflow digest test into message length * Also switch log font to Consolas * Also update version to rufus-next --- configure | 20 +++++------ configure.ac | 2 +- res/appstore/AppxManifest.xml | 2 +- res/appstore/packme.cmd | 2 +- res/loc/rufus.loc | 2 ++ src/checksum.c | 66 +++++++++++++++++++++++------------ src/localization.c | 2 +- src/resource.h | 1 + src/rufus.c | 16 ++++++--- src/rufus.rc | 26 +++++++------- src/settings.h | 1 + 11 files changed, 87 insertions(+), 53 deletions(-) diff --git a/configure b/configure index 8c319d50..343544f5 100755 --- a/configure +++ b/configure @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for rufus 3.11. +# Generated by GNU Autoconf 2.69 for rufus 3.12. # # Report bugs to . # @@ -580,8 +580,8 @@ MAKEFLAGS= # Identity of this package. PACKAGE_NAME='rufus' PACKAGE_TARNAME='rufus' -PACKAGE_VERSION='3.11' -PACKAGE_STRING='rufus 3.11' +PACKAGE_VERSION='3.12' +PACKAGE_STRING='rufus 3.12' PACKAGE_BUGREPORT='https://github.com/pbatard/rufus/issues' PACKAGE_URL='https://rufus.ie' @@ -1228,7 +1228,7 @@ if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures rufus 3.11 to adapt to many kinds of systems. +\`configure' configures rufus 3.12 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1294,7 +1294,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of rufus 3.11:";; + short | recursive ) echo "Configuration of rufus 3.12:";; esac cat <<\_ACEOF @@ -1385,7 +1385,7 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -rufus configure 3.11 +rufus configure 3.12 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -1440,7 +1440,7 @@ cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by rufus $as_me 3.11, which was +It was created by rufus $as_me 3.12, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -2303,7 +2303,7 @@ fi # Define the identity of the package. PACKAGE='rufus' - VERSION='3.11' + VERSION='3.12' cat >>confdefs.h <<_ACEOF @@ -4484,7 +4484,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by rufus $as_me 3.11, which was +This file was extended by rufus $as_me 3.12, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -4538,7 +4538,7 @@ _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -rufus config.status 3.11 +rufus config.status 3.12 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" diff --git a/configure.ac b/configure.ac index fec98784..9d8f44e0 100644 --- a/configure.ac +++ b/configure.ac @@ -1,4 +1,4 @@ -AC_INIT([rufus], [3.11], [https://github.com/pbatard/rufus/issues], [rufus], [https://rufus.ie]) +AC_INIT([rufus], [3.12], [https://github.com/pbatard/rufus/issues], [rufus], [https://rufus.ie]) AM_INIT_AUTOMAKE([-Wno-portability foreign no-dist no-dependencies]) AC_CONFIG_SRCDIR([src/rufus.c]) AC_CONFIG_MACRO_DIR([m4]) diff --git a/res/appstore/AppxManifest.xml b/res/appstore/AppxManifest.xml index 045606e0..68ba632a 100644 --- a/res/appstore/AppxManifest.xml +++ b/res/appstore/AppxManifest.xml @@ -8,7 +8,7 @@ for an interesting struggle, when you also happen to have a comma in one of the fields... --> diff --git a/res/appstore/packme.cmd b/res/appstore/packme.cmd index 202e187a..72a12567 100644 --- a/res/appstore/packme.cmd +++ b/res/appstore/packme.cmd @@ -1,6 +1,6 @@ @echo off setlocal EnableExtensions DisableDelayedExpansion -set VERSION=3.11 +set VERSION=3.12 del /q *.appx >NUL 2>&1 del /q *.appxbundle >NUL 2>&1 diff --git a/res/loc/rufus.loc b/res/loc/rufus.loc index 0f1c1543..b1d4dbe1 100644 --- a/res/loc/rufus.loc +++ b/res/loc/rufus.loc @@ -570,6 +570,8 @@ t MSG_309 "Compressed archive" t MSG_310 "The ISO you have selected uses UEFI and is small enough to be written as an EFI System Partition (ESP). " "Writing to an ESP, instead of writing to a generic data partition occupying the whole disk, can be preferable " "for some types of installations.\n\nPlease select the mode that you want to use to write this image:" +t MSG_311 "Use %s in the main application window to enable." +t MSG_312 "Extra hashes (SHA512)" ######################################################################### l "ar-SA" "Arabic (العربية)" 0x0401, 0x0801, 0x0c01, 0x1001, 0x1401, 0x1801, 0x1c01, 0x2001, 0x2401, 0x2801, 0x2c01, 0x3001, 0x3401, 0x3801, 0x3c01, 0x4001 diff --git a/src/checksum.c b/src/checksum.c index 6180d312..16fb0f3c 100644 --- a/src/checksum.c +++ b/src/checksum.c @@ -91,6 +91,7 @@ char sum_str[CHECKSUM_MAX][150]; uint32_t bufnum, sum_count[CHECKSUM_MAX] = { MD5_HASHSIZE, SHA1_HASHSIZE, SHA256_HASHSIZE, SHA512_HASHSIZE }; HANDLE data_ready[CHECKSUM_MAX] = { 0 }, thread_ready[CHECKSUM_MAX] = { 0 }; DWORD read_size[2]; +BOOL enable_extra_hashes = FALSE; uint8_t ALIGNED(64) buffer[2][BUFFER_SIZE]; /* @@ -408,7 +409,11 @@ static __inline void sha256_transform(SUM_CONTEXT *ctx, const uint8_t *data) ctx->state[7] += h; } -/* Transform the message X which consists of 16 64-bit-words (SHA-512) */ +/* + * Transform the message X which consists of 16 64-bit-words (SHA-512) + * This is an algorithm that *REALLY* benefits from being executed as 64-bit + * code rather than 32-bit, as it's more than twice as fast then... + */ static __inline void sha512_transform(SUM_CONTEXT* ctx, const uint8_t* data) { uint64_t a, b, c, d, e, f, g, h, W[80]; @@ -435,7 +440,11 @@ static __inline void sha512_transform(SUM_CONTEXT* ctx, const uint8_t* data) for (i = 0; i < 80; i++) { if (i < 16) +#ifdef BIG_ENDIAN_HOST + W[i] = *((uint64_t*)&data[8 * i])); +#else W[i] = read_swap64(&data[8 * i]); +#endif else W[i] = s1(W[i - 2]) + W[i - 7] + s0(W[i - 15]) + W[i - 16]; } @@ -1017,9 +1026,14 @@ INT_PTR CALLBACK ChecksumCallback(HWND hDlg, UINT message, WPARAM wParam, LPARAM SendDlgItemMessageA(hDlg, IDC_MD5, WM_SETFONT, (WPARAM)hFont, TRUE); SendDlgItemMessageA(hDlg, IDC_SHA1, WM_SETFONT, (WPARAM)hFont, TRUE); SendDlgItemMessageA(hDlg, IDC_SHA256, WM_SETFONT, (WPARAM)hFont, TRUE); + SendDlgItemMessageA(hDlg, IDC_SHA512, WM_SETFONT, (WPARAM)hFont, TRUE); SetWindowTextA(GetDlgItem(hDlg, IDC_MD5), sum_str[0]); SetWindowTextA(GetDlgItem(hDlg, IDC_SHA1), sum_str[1]); SetWindowTextA(GetDlgItem(hDlg, IDC_SHA256), sum_str[2]); + if (enable_extra_hashes) + SetWindowTextA(GetDlgItem(hDlg, IDC_SHA512), sum_str[3]); + else + SetWindowTextU(GetDlgItem(hDlg, IDC_SHA512), lmprintf(MSG_311, "-")); // Move/Resize the controls as needed to fit our text hDC = GetDC(GetDlgItem(hDlg, IDC_MD5)); @@ -1032,6 +1046,7 @@ INT_PTR CALLBACK ChecksumCallback(HWND hDlg, UINT message, WPARAM wParam, LPARAM dw = rc.right - rc.left - dw + 12; // Ideally we'd compute the field borders from the system, but hey... dh = rc.bottom - rc.top - dh + 6; ResizeMoveCtrl(hDlg, GetDlgItem(hDlg, IDC_SHA256), 0, 0, dw, dh, 1.0f); + ResizeMoveCtrl(hDlg, GetDlgItem(hDlg, IDC_SHA512), 0, 0, dw, dh, 1.0f); GetWindowRect(GetDlgItem(hDlg, IDC_SHA1), &rc); dw = rc.right - rc.left; @@ -1088,12 +1103,12 @@ DWORD WINAPI IndividualSumThread(void* param) sum_final[i](&sum_ctx); memset(&sum_str[i], 0, ARRAYSIZE(sum_str[i])); for (j = 0; j < sum_count[i]; j++) { - val[0] = ((sum_ctx.buf[j] >> 4) < 10) ? ((sum_ctx.buf[j] >> 4) + '0') : ((sum_ctx.buf[j] >> 4) - 0xa + 'a'); - val[1] = ((sum_ctx.buf[j] & 15) < 10) ? ((sum_ctx.buf[j] & 15) + '0') : ((sum_ctx.buf[j] & 15) - 0xa + 'a'); - static_strcat(sum_str[i], val); - if (j == 31) - static_strcat(sum_str[i], "\r\n "); + sum_str[i][2 * j] = ((sum_ctx.buf[j] >> 4) < 10) ? + ((sum_ctx.buf[j] >> 4) + '0') : ((sum_ctx.buf[j] >> 4) - 0xa + 'a'); + sum_str[i][2 * j + 1] = ((sum_ctx.buf[j] & 15) < 10) ? + ((sum_ctx.buf[j] & 15) + '0') : ((sum_ctx.buf[j] & 15) - 0xa + 'a'); } + sum_str[i][2 * j] = 0; return 0; } } @@ -1105,10 +1120,11 @@ error: DWORD WINAPI SumThread(void* param) { DWORD_PTR* thread_affinity = (DWORD_PTR*)param; - HANDLE sum_thread[CHECKSUM_MAX] = { NULL, NULL, NULL }; + HANDLE sum_thread[CHECKSUM_MAX] = { NULL, NULL, NULL, NULL }; HANDLE h = INVALID_HANDLE_VALUE; uint64_t rb; int i, _bufnum, r = -1; + int num_checksums = CHECKSUM_MAX - (enable_extra_hashes ? 0 : 1); if ((image_path == NULL) || (thread_affinity == NULL)) ExitThread(r); @@ -1122,7 +1138,7 @@ DWORD WINAPI SumThread(void* param) // is usually in this first mask, for other tasks. SetThreadAffinityMask(GetCurrentThread(), thread_affinity[0]); - for (i = 0; i < CHECKSUM_MAX; i++) { + for (i = 0; i < num_checksums; i++) { // NB: Can't use a single manual-reset event for data_ready as we // wouldn't be able to ensure the event is reset before the thread // gets into its next wait loop @@ -1164,7 +1180,7 @@ DWORD WINAPI SumThread(void* param) // Toggle the read buffer _bufnum = (bufnum + 1) % 2; // Signal the waiting threads - for (i = 0; i < CHECKSUM_MAX; i++) { + for (i = 0; i < num_checksums; i++) { if (!SetEvent(data_ready[i])) { uprintf("Could not signal checksum thread %d: %s", i, WindowsErrorString()); goto out; @@ -1184,14 +1200,14 @@ DWORD WINAPI SumThread(void* param) } // Wait for the thread to signal they are ready to process data - if (WaitForMultipleObjects(CHECKSUM_MAX, thread_ready, TRUE, WAIT_TIME) != WAIT_OBJECT_0) { + if (WaitForMultipleObjects(num_checksums, thread_ready, TRUE, WAIT_TIME) != WAIT_OBJECT_0) { uprintf("Checksum threads failed to signal: %s", WindowsErrorString()); goto out; } } // Our last event with read_size=0 signaled the threads to exit - wait for that to happen - if (WaitForMultipleObjects(CHECKSUM_MAX, sum_thread, TRUE, WAIT_TIME) != WAIT_OBJECT_0) { + if (WaitForMultipleObjects(num_checksums, sum_thread, TRUE, WAIT_TIME) != WAIT_OBJECT_0) { uprintf("Checksum threads did not finalize: %s", WindowsErrorString()); goto out; } @@ -1199,11 +1215,17 @@ DWORD WINAPI SumThread(void* param) uprintf(" MD5: %s", sum_str[0]); uprintf(" SHA1: %s", sum_str[1]); uprintf(" SHA256: %s", sum_str[2]); - uprintf(" SHA512: %s", sum_str[3]); + if (enable_extra_hashes) { + char c = sum_str[3][SHA512_HASHSIZE]; + sum_str[3][SHA512_HASHSIZE] = 0; + uprintf(" SHA512: %s", sum_str[3]); + sum_str[3][SHA512_HASHSIZE] = c; + uprintf(" %s", &sum_str[3][SHA512_HASHSIZE]); + } r = 0; out: - for (i = 0; i < CHECKSUM_MAX; i++) { + for (i = 0; i < num_checksums; i++) { if (sum_thread[i] != NULL) TerminateThread(sum_thread[i], 1); safe_closehandle(data_ready[i]); @@ -1287,22 +1309,19 @@ const char* test_hash[CHECKSUM_MAX][4] = { { "d41d8cd98f00b204e9800998ecf8427e", "74cac558072300385f7ab4dff7465e3c", - "88c7cb90ea8c60be51e8e20875b4d912", + "f99d37d3bee20f9c0ca3204991be2698", "e0ea372ac14a3574167543b851d4babb" - }, - { + }, { "da39a3ee5e6b4b0d3255bfef95601890afd80709", "a5bac908bf3e51ff0036a94d43b4f3bd2d01a75d", - "8af850c7238f320cba940299e0f4f2da66bd75f9", + "8aa6c0064b013b8a6f4e88a0421d39bbf07e2e1b", "09463ec0b5917706c9cb1d6b164b2582c04018e0" - }, - { + }, { "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "62c1a97974dfe6848942794be4f2f027b5f4815e1eb76db63a30f0e290b5c1c4", - "662a80c59d2a44023d3b111b5242bb7fc0bc7e50ab3ae986df005a630dd7ddb5", + "dbca61af192edba49ea215c49a23feee302c98cc4d2c018347fe78db572f07a5", "c9b43c1058bc7f7661619e9d983fc9d31356e97f9195a2405ab972d0737b11bf" - }, - { + }, { "cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e", "4913ace12f1169e5a5f524ef87ab8fc39dff0418851fbbbb1f609d3261b2b4072bd1746e6accb91bf38f3b1b3d59b0a60af5de67aab87b76c2456fde523efc1c", "33df8a16dd624cbc4613b5ae902b722411c7e90f37dd3947c9a86e01c51ada68fcf5a0cd4ca928d7cc1ed469bb34c2ed008af069d8b28cc4512e6c8b2e7a5592", @@ -1313,6 +1332,7 @@ const char* test_hash[CHECKSUM_MAX][4] = { /* Tests the message digest aglorithms */ int TestChecksum(void) { + const uint32_t blocksize[CHECKSUM_MAX] = { MD5_BLOCKSIZE, SHA1_BLOCKSIZE, SHA256_BLOCKSIZE, SHA512_BLOCKSIZE }; const char* hash_name[4] = { "MD5 ", "SHA1 ", "SHA256", "SHA512" }; int i, j, errors = 0; uint8_t sum[MAX_HASHSIZE], *sum_expected; @@ -1327,7 +1347,7 @@ int TestChecksum(void) copy_msg_len[1] = 3; // Designed to test the case where we pad into the total message length area // For SHA-512 this is 128 - 16 = 112 bytes, for others 64 - 8 = 56 bytes - copy_msg_len[2] = SHA512_BLOCKSIZE - (SHA512_BLOCKSIZE >> 3); + copy_msg_len[2] = blocksize[j] - (blocksize[j] >> 3); copy_msg_len[3] = full_msg_len; for (i = 0; i < 4; i++) { memset(msg, 0, full_msg_len); diff --git a/src/localization.c b/src/localization.c index b1c91dc3..96b53abe 100644 --- a/src/localization.c +++ b/src/localization.c @@ -389,7 +389,7 @@ char* lmprintf(uint32_t msg_id, ...) pos += sizeof(RIGHT_TO_LEFT_EMBEDDING) - 1; } va_start(args, msg_id); - safe_vsnprintf(&buf[buf_id][pos], LOC_MESSAGE_SIZE- 1 - 2*pos, format, args); + safe_vsnprintf(&buf[buf_id][pos], LOC_MESSAGE_SIZE - 1 - 2*pos, format, args); va_end(args); if (right_to_left_mode && (msg_table != default_msg_table)) { safe_strcat(buf[buf_id], LOC_MESSAGE_SIZE - 1, POP_DIRECTIONAL_FORMATTING); diff --git a/src/resource.h b/src/resource.h index 8d13c0ed..736c9214 100644 --- a/src/resource.h +++ b/src/resource.h @@ -158,6 +158,7 @@ #define IDC_MD5 1071 #define IDC_SHA1 1072 #define IDC_SHA256 1073 +#define IDC_SHA512 1112 #define IDC_SELECTION_ICON 1074 #define IDC_SELECTION_TEXT 1075 #define IDC_SELECTION_LINE 1076 diff --git a/src/rufus.c b/src/rufus.c index 9489ad45..dbd72960 100755 --- a/src/rufus.c +++ b/src/rufus.c @@ -84,7 +84,7 @@ static unsigned int timer; static char uppercase_select[2][64], uppercase_start[64], uppercase_close[64], uppercase_cancel[64]; extern HANDLE update_check_thread; -extern BOOL enable_iso, enable_joliet, enable_rockridge; +extern BOOL enable_iso, enable_joliet, enable_rockridge, enable_extra_hashes; extern BYTE* fido_script; extern HWND hFidoDlg; extern uint8_t* grub2_buf; @@ -927,10 +927,10 @@ BOOL CALLBACK LogCallback(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) PostMessage(hLog, EM_LIMITTEXT, MAX_LOG_SIZE , 0); // Set the font to Unicode so that we can display anything hDC = GetDC(NULL); - lfHeight = -MulDiv(8, GetDeviceCaps(hDC, LOGPIXELSY), 72); + lfHeight = -MulDiv(9, GetDeviceCaps(hDC, LOGPIXELSY), 72); safe_release_dc(NULL, hDC); hf = CreateFontA(lfHeight, 0, 0, 0, FW_NORMAL, FALSE, FALSE, FALSE, - DEFAULT_CHARSET, 0, 0, PROOF_QUALITY, 0, "Arial Unicode MS"); + DEFAULT_CHARSET, 0, 0, PROOF_QUALITY, 0, "Consolas"); SendDlgItemMessageA(hDlg, IDC_LOG_EDIT, WM_SETFONT, (WPARAM)hf, TRUE); // Set 'Close Log' as the selected button SendMessage(hDlg, WM_NEXTDLGCTL, (WPARAM)GetDlgItem(hDlg, IDCANCEL), TRUE); @@ -3164,6 +3164,7 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine enable_vmdk = ReadSettingBool(SETTING_ENABLE_VMDK_DETECTION); enable_file_indexing = ReadSettingBool(SETTING_ENABLE_FILE_INDEXING); enable_VHDs = !ReadSettingBool(SETTING_DISABLE_VHDS); + enable_extra_hashes = ReadSettingBool(SETTING_ENABLE_EXTRA_HASHES); // Initialize the global scaling, in case we need it before we initialize the dialog hDC = GetDC(NULL); @@ -3331,7 +3332,7 @@ relaunch: while(GetMessage(&msg, NULL, 0, 0)) { static BOOL ctrl_without_focus = FALSE; BOOL no_focus = (msg.message == WM_SYSKEYDOWN) && !(msg.lParam & 0x20000000); - // ** ****** **** ************* + // ** *********** ************* // .,ABCDEFGHIJKLMNOPQRSTUVWXYZ // Sigh... The things one need to do to detect standalone use of the 'Alt' key. @@ -3451,6 +3452,13 @@ relaunch: GetDevices(0); continue; } + // Alt-H => Toggle computation of SHA512 digest + if ((msg.message == WM_SYSKEYDOWN) && (msg.wParam == 'H')) { + enable_extra_hashes = !enable_extra_hashes; + WriteSettingBool(SETTING_ENABLE_EXTRA_HASHES, enable_extra_hashes); + PrintStatusTimeout(lmprintf(MSG_312), enable_extra_hashes); + continue; + } // Alt-I => Toggle ISO support // This is useful if you have an ISOHybrid image and you want to force Rufus to use // DD-mode when writing the data. diff --git a/src/rufus.rc b/src/rufus.rc index d3de0b44..713185a2 100644 --- a/src/rufus.rc +++ b/src/rufus.rc @@ -33,7 +33,7 @@ LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL IDD_DIALOG DIALOGEX 12, 12, 232, 326 STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_MINIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU EXSTYLE WS_EX_ACCEPTFILES -CAPTION "Rufus 3.11.1684" +CAPTION "Rufus 3.12.1685" FONT 9, "Segoe UI Symbol", 400, 0, 0x0 BEGIN LTEXT "Drive Properties",IDS_DRIVE_PROPERTIES_TXT,8,6,53,12,NOT WS_GROUP @@ -95,18 +95,20 @@ BEGIN DEFPUSHBUTTON "OK",IDOK,253,216,50,12,WS_GROUP END -IDD_CHECKSUM DIALOGEX 0, 0, 301, 70 -STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU +IDD_CHECKSUM DIALOGEX 0, 0, 301, 110 +STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Checksums" FONT 9, "Segoe UI Symbol", 400, 0, 0x0 BEGIN LTEXT "MD5:",IDC_STATIC,9,10,18,8 - EDITTEXT IDC_MD5,40,9,197,12,ES_LOWERCASE | ES_AUTOHSCROLL | ES_READONLY + EDITTEXT IDC_MD5,40,9,197,12,ES_AUTOHSCROLL | ES_READONLY LTEXT "SHA1:",IDC_STATIC,9,26,20,8 - EDITTEXT IDC_SHA1,40,25,197,12,ES_LOWERCASE | ES_AUTOHSCROLL | ES_READONLY + EDITTEXT IDC_SHA1,40,25,197,12,ES_AUTOHSCROLL | ES_READONLY LTEXT "SHA256:",IDC_STATIC,9,42,27,8 - EDITTEXT IDC_SHA256,40,41,197,22,ES_MULTILINE | ES_LOWERCASE | ES_READONLY - DEFPUSHBUTTON "OK",IDOK,243,49,50,12,WS_GROUP + EDITTEXT IDC_SHA256,40,41,197,22,ES_MULTILINE | ES_READONLY + DEFPUSHBUTTON "OK",IDOK,243,86,50,12,WS_GROUP + LTEXT "SHA512:",IDC_STATIC,9,69,27,8 + EDITTEXT IDC_SHA512,40,67,197,35,ES_MULTILINE | ES_READONLY END IDD_LICENSE DIALOGEX 0, 0, 335, 213 @@ -395,8 +397,8 @@ END // VS_VERSION_INFO VERSIONINFO - FILEVERSION 3,11,1684,0 - PRODUCTVERSION 3,11,1684,0 + FILEVERSION 3,12,1685,0 + PRODUCTVERSION 3,12,1685,0 FILEFLAGSMASK 0x3fL #ifdef _DEBUG FILEFLAGS 0x1L @@ -414,13 +416,13 @@ BEGIN VALUE "Comments", "https://rufus.ie" VALUE "CompanyName", "Akeo Consulting" VALUE "FileDescription", "Rufus" - VALUE "FileVersion", "3.11.1684" + VALUE "FileVersion", "3.12.1685" VALUE "InternalName", "Rufus" VALUE "LegalCopyright", "© 2011-2020 Pete Batard (GPL v3)" VALUE "LegalTrademarks", "https://www.gnu.org/licenses/gpl-3.0.html" - VALUE "OriginalFilename", "rufus-3.11.exe" + VALUE "OriginalFilename", "rufus-3.12.exe" VALUE "ProductName", "Rufus" - VALUE "ProductVersion", "3.11.1684" + VALUE "ProductVersion", "3.12.1685" END END BLOCK "VarFileInfo" diff --git a/src/settings.h b/src/settings.h index 0cb40450..768e1a3f 100644 --- a/src/settings.h +++ b/src/settings.h @@ -35,6 +35,7 @@ extern char* ini_file; #define SETTING_DISABLE_LGP "DisableLGP" #define SETTING_DISABLE_SECURE_BOOT_NOTICE "DisableSecureBootNotice" #define SETTING_DISABLE_VHDS "DisableVHDs" +#define SETTING_ENABLE_EXTRA_HASHES "EnableExtraHashes" #define SETTING_ENABLE_FILE_INDEXING "EnableFileIndexing" #define SETTING_ENABLE_USB_DEBUG "EnableUsbDebug" #define SETTING_ENABLE_VMDK_DETECTION "EnableVmdkDetection"