1
0
mirror of https://github.com/veracrypt/VeraCrypt.git synced 2026-06-10 06:46:59 -05:00

Windows: allow selecting KDFs in benchmark dialog

Add a KDF checklist to the Windows benchmark dialog while keeping all algorithms selected by default.

Filter KDF benchmark execution to the checked algorithms and silently skip when none are selected.

Reuse existing KDF localization strings and keep Language.xml unchanged.
This commit is contained in:
Mounir IDRASSI
2026-06-05 21:03:49 +09:00
parent df3bb7c5e6
commit fd80bc0679
3 changed files with 194 additions and 13 deletions
+9 -7
View File
@@ -141,7 +141,7 @@ BEGIN
CONTROL "",IDC_STATIC,"Static",SS_ETCHEDHORZ,1,158,208,1,WS_EX_STATICEDGE CONTROL "",IDC_STATIC,"Static",SS_ETCHEDHORZ,1,158,208,1,WS_EX_STATICEDGE
END END
IDD_BENCHMARK_DLG DIALOGEX 0, 0, 330, 247 IDD_BENCHMARK_DLG DIALOGEX 0, 0, 420, 247
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "VeraCrypt - Algorithms Benchmark" CAPTION "VeraCrypt - Algorithms Benchmark"
FONT 8, "MS Shell Dlg", 400, 0, 0x1 FONT 8, "MS Shell Dlg", 400, 0, 0x1
@@ -151,18 +151,20 @@ BEGIN
EDITTEXT IDC_PIM,209,11,42,14,ES_RIGHT | ES_AUTOHSCROLL | ES_NUMBER | NOT WS_VISIBLE EDITTEXT IDC_PIM,209,11,42,14,ES_RIGHT | ES_AUTOHSCROLL | ES_NUMBER | NOT WS_VISIBLE
CONTROL "Pre-Boot",IDC_BENCHMARK_PREBOOT,"Button",BS_AUTOCHECKBOX | NOT WS_VISIBLE | WS_TABSTOP,258,14,71,10 CONTROL "Pre-Boot",IDC_BENCHMARK_PREBOOT,"Button",BS_AUTOCHECKBOX | NOT WS_VISIBLE | WS_TABSTOP,258,14,71,10
COMBOBOX IDC_BENCHMARK_SORT_METHOD,55,40,139,74,CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP COMBOBOX IDC_BENCHMARK_SORT_METHOD,55,40,139,74,CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP
DEFPUSHBUTTON "Benchmark",IDC_PERFORM_BENCHMARK,265,60,58,14 DEFPUSHBUTTON "Benchmark",IDC_PERFORM_BENCHMARK,355,60,58,14
PUSHBUTTON "Close",IDCLOSE,265,79,58,14 PUSHBUTTON "Close",IDCLOSE,355,79,58,14
CONTROL "",IDC_RESULTS,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_ALIGNLEFT | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP,7,60,249,160 CONTROL "",IDC_RESULTS,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_ALIGNLEFT | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP,7,60,249,160
LTEXT "KDF:",IDT_KDF,265,107,148,9,NOT WS_VISIBLE
CONTROL "",IDC_BENCHMARK_KDF_LIST,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_ALIGNLEFT | LVS_NOCOLUMNHEADER | LVS_NOSORTHEADER | WS_BORDER | NOT WS_VISIBLE | WS_TABSTOP,265,119,148,101
LTEXT "Hardware-accelerated AES:",IDC_HW_AES_LABEL_LINK,148,233,108,9,SS_NOTIFY,WS_EX_RIGHT LTEXT "Hardware-accelerated AES:",IDC_HW_AES_LABEL_LINK,148,233,108,9,SS_NOTIFY,WS_EX_RIGHT
CONTROL "",IDC_HW_AES,"Static",SS_LEFTNOWORDWRAP | WS_GROUP,262,232,57,11,WS_EX_STATICEDGE CONTROL "",IDC_HW_AES,"Static",SS_LEFTNOWORDWRAP | WS_GROUP,262,232,57,11,WS_EX_STATICEDGE
LTEXT "Parallelization:",IDC_PARALLELIZATION_LABEL_LINK,4,233,67,9,SS_NOTIFY,WS_EX_RIGHT LTEXT "Parallelization:",IDC_PARALLELIZATION_LABEL_LINK,4,233,67,9,SS_NOTIFY,WS_EX_RIGHT
CONTROL "",IDC_PARALLELIZATION,"Static",SS_LEFTNOWORDWRAP | WS_GROUP,77,232,57,11,WS_EX_STATICEDGE CONTROL "",IDC_PARALLELIZATION,"Static",SS_LEFTNOWORDWRAP | WS_GROUP,77,232,57,11,WS_EX_STATICEDGE
CONTROL "",IDC_STATIC,"Static",SS_ETCHEDHORZ,2,32,328,1,WS_EX_STATICEDGE CONTROL "",IDC_STATIC,"Static",SS_ETCHEDHORZ,2,32,418,1,WS_EX_STATICEDGE
LTEXT "Buffer Size:",IDT_BUFFER_SIZE,154,14,53,8,0,WS_EX_RIGHT LTEXT "Buffer Size:",IDT_BUFFER_SIZE,154,14,53,8,0,WS_EX_RIGHT
LTEXT "Sort Method:",IDT_SORT_METHOD,0,42,53,8,0,WS_EX_RIGHT LTEXT "Sort Method:",IDT_SORT_METHOD,0,42,53,8,0,WS_EX_RIGHT
LTEXT "Speed is affected by CPU load and storage device characteristics.\n\nThese tests take place in RAM.",IDT_BOX_BENCHMARK_INFO,266,107,57,100 LTEXT "Speed is affected by CPU load and storage device characteristics.\n\nThese tests take place in RAM.",IDT_BOX_BENCHMARK_INFO,266,107,148,100
CONTROL "",IDC_STATIC,"Static",SS_ETCHEDHORZ,2,228,328,1,WS_EX_STATICEDGE CONTROL "",IDC_STATIC,"Static",SS_ETCHEDHORZ,2,228,418,1,WS_EX_STATICEDGE
LTEXT "Benchmark: ",IDT_BENCHMARK,0,14,53,8,0,WS_EX_RIGHT LTEXT "Benchmark: ",IDT_BENCHMARK,0,14,53,8,0,WS_EX_RIGHT
RTEXT "Volume PIM:",IDT_PIM,154,14,53,8,NOT WS_VISIBLE RTEXT "Volume PIM:",IDT_PIM,154,14,53,8,NOT WS_VISIBLE
END END
@@ -402,7 +404,7 @@ BEGIN
IDD_BENCHMARK_DLG, DIALOG IDD_BENCHMARK_DLG, DIALOG
BEGIN BEGIN
LEFTMARGIN, 7 LEFTMARGIN, 7
RIGHTMARGIN, 323 RIGHTMARGIN, 413
TOPMARGIN, 7 TOPMARGIN, 7
BOTTOMMARGIN, 240 BOTTOMMARGIN, 240
END END
+183 -5
View File
@@ -414,6 +414,8 @@ int benchmarkType = BENCHMARK_TYPE_ENCRYPTION;
int benchmarkPim = -1; int benchmarkPim = -1;
BOOL benchmarkPreBoot = FALSE; BOOL benchmarkPreBoot = FALSE;
BOOL benchmarkGPT = FALSE; BOOL benchmarkGPT = FALSE;
BOOL benchmarkSelectedKdfs[LAST_PRF_ID + 1];
BOOL benchmarkKdfListUpdating = FALSE;
#endif // #ifndef SETUP #endif // #ifndef SETUP
@@ -6202,6 +6204,161 @@ void GetSpeedString (unsigned __int64 speed, wchar_t *str, size_t cbStr)
StringCbPrintfW (str, cbStr, L"%I64d %s", speed, b); StringCbPrintfW (str, cbStr, L"%I64d %s", speed, b);
} }
static void ResetBenchmarkList (HWND hwndDlg);
static void ResetBenchmarkKdfSelections (void)
{
int kdf;
memset (benchmarkSelectedKdfs, 0, sizeof (benchmarkSelectedKdfs));
for (kdf = FIRST_PRF_ID; kdf <= LAST_PRF_ID; kdf++)
benchmarkSelectedKdfs[kdf] = TRUE;
}
static BOOL BenchmarkKdfAllowedForCurrentOptions (int kdf)
{
PRF_BOOT_TYPE bootType = PRF_BOOT_NO;
if (benchmarkPreBoot)
bootType = benchmarkGPT ? PRF_BOOT_GPT : PRF_BOOT_MBR;
return is_pkcs5_prf_supported (kdf, bootType) && HashIsAvailable (kdf);
}
static BOOL BenchmarkKdfSelectedForCurrentOptions (int kdf)
{
return BenchmarkKdfAllowedForCurrentOptions (kdf) && benchmarkSelectedKdfs[kdf];
}
static int GetBenchmarkKdfListItem (HWND hList, int itemIndex)
{
LVITEMW LvItem;
memset (&LvItem, 0, sizeof (LvItem));
LvItem.mask = LVIF_PARAM;
LvItem.iItem = itemIndex;
if (!ListView_GetItem (hList, &LvItem))
return 0;
return (int) LvItem.lParam;
}
static void InitBenchmarkKdfList (HWND hwndDlg)
{
LVCOLUMNW LvCol;
int thid, itemIndex = 0;
HWND hList = GetDlgItem (hwndDlg, IDC_BENCHMARK_KDF_LIST);
if (!hList)
return;
benchmarkKdfListUpdating = TRUE;
ListView_DeleteAllItems (hList);
SendMessage (hList, LVM_SETEXTENDEDLISTVIEWSTYLE, 0,
LVS_EX_CHECKBOXES | LVS_EX_FULLROWSELECT | LVS_EX_LABELTIP);
memset (&LvCol, 0, sizeof (LvCol));
LvCol.mask = LVCF_TEXT | LVCF_WIDTH | LVCF_SUBITEM | LVCF_FMT;
LvCol.pszText = GetString ("KDF");
LvCol.cx = CompensateXDPI (126);
LvCol.fmt = LVCFMT_LEFT;
SendMessageW (hList, LVM_INSERTCOLUMNW, 0, (LPARAM) &LvCol);
for (thid = FIRST_PRF_ID; thid <= LAST_PRF_ID; thid++)
{
LVITEMW LvItem;
memset (&LvItem, 0, sizeof (LvItem));
LvItem.mask = LVIF_TEXT | LVIF_PARAM | LVIF_STATE;
LvItem.iItem = itemIndex;
LvItem.pszText = get_kdf_name (thid);
LvItem.lParam = (LPARAM) thid;
LvItem.stateMask = LVIS_STATEIMAGEMASK;
LvItem.state = INDEXTOSTATEIMAGEMASK (benchmarkSelectedKdfs[thid] ? 2 : 1);
ListView_InsertItem (hList, &LvItem);
itemIndex++;
}
benchmarkKdfListUpdating = FALSE;
}
static void UpdateBenchmarkKdfListForCurrentOptions (HWND hwndDlg)
{
int itemIndex;
HWND hList = GetDlgItem (hwndDlg, IDC_BENCHMARK_KDF_LIST);
int itemCount = ListView_GetItemCount (hList);
benchmarkKdfListUpdating = TRUE;
for (itemIndex = 0; itemIndex < itemCount; itemIndex++)
{
int kdf = GetBenchmarkKdfListItem (hList, itemIndex);
ListView_SetCheckState (hList, itemIndex, BenchmarkKdfSelectedForCurrentOptions (kdf));
}
benchmarkKdfListUpdating = FALSE;
}
static void UpdateBenchmarkKdfSelectorVisibility (HWND hwndDlg)
{
BOOL show = (benchmarkType == BENCHMARK_TYPE_PRF);
ShowWindow (GetDlgItem (hwndDlg, IDT_KDF), show ? SW_SHOW : SW_HIDE);
ShowWindow (GetDlgItem (hwndDlg, IDC_BENCHMARK_KDF_LIST), show ? SW_SHOW : SW_HIDE);
ShowWindow (GetDlgItem (hwndDlg, IDT_BOX_BENCHMARK_INFO), show ? SW_HIDE : SW_SHOW);
if (show)
UpdateBenchmarkKdfListForCurrentOptions (hwndDlg);
}
static BOOL BenchmarkHasSelectedKdfForCurrentOptions (void)
{
int kdf;
for (kdf = FIRST_PRF_ID; kdf <= LAST_PRF_ID; kdf++)
{
if (BenchmarkKdfSelectedForCurrentOptions (kdf))
return TRUE;
}
return FALSE;
}
static BOOL HandleBenchmarkKdfListItemChanged (HWND hwndDlg, LPNMLISTVIEW changedItem)
{
int kdf;
BOOL selected;
HWND hList = GetDlgItem (hwndDlg, IDC_BENCHMARK_KDF_LIST);
if (benchmarkKdfListUpdating
|| changedItem->iItem < 0
|| !(changedItem->uChanged & LVIF_STATE)
|| !((changedItem->uOldState ^ changedItem->uNewState) & LVIS_STATEIMAGEMASK))
{
return TRUE;
}
kdf = GetBenchmarkKdfListItem (hList, changedItem->iItem);
selected = ListView_GetCheckState (hList, changedItem->iItem);
if (!BenchmarkKdfAllowedForCurrentOptions (kdf))
{
if (selected)
ListView_SetCheckState (hList, changedItem->iItem, FALSE);
return TRUE;
}
benchmarkSelectedKdfs[kdf] = selected;
benchmarkTotalItems = 0;
ResetBenchmarkList (hwndDlg);
return TRUE;
}
static void ResetBenchmarkList (HWND hwndDlg) static void ResetBenchmarkList (HWND hwndDlg)
{ {
LVCOLUMNW LvCol; LVCOLUMNW LvCol;
@@ -6527,11 +6684,7 @@ static BOOL PerformBenchmark(HWND hBenchDlg, HWND hwndDlg)
for (thid = FIRST_PRF_ID; thid <= LAST_PRF_ID; thid++) for (thid = FIRST_PRF_ID; thid <= LAST_PRF_ID; thid++)
{ {
if (benchmarkPreBoot && !benchmarkGPT && !HashForSystemEncryption (thid)) if (!BenchmarkKdfSelectedForCurrentOptions (thid))
continue;
// we don't support Argon2 for system encryption
if (benchmarkPreBoot && thid == ARGON2)
continue; continue;
if (QueryPerformanceCounter (&performanceCountStart) == 0) if (QueryPerformanceCounter (&performanceCountStart) == 0)
@@ -6762,6 +6915,8 @@ BOOL CALLBACK BenchmarkDlgProc (HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lP
benchmarkBufferSize = BENCHMARK_DEFAULT_BUF_SIZE; benchmarkBufferSize = BENCHMARK_DEFAULT_BUF_SIZE;
benchmarkSortMethod = BENCHMARK_SORT_BY_SPEED; benchmarkSortMethod = BENCHMARK_SORT_BY_SPEED;
benchmarkType = BENCHMARK_TYPE_ENCRYPTION; benchmarkType = BENCHMARK_TYPE_ENCRYPTION;
benchmarkPreBoot = FALSE;
ResetBenchmarkKdfSelections ();
if (lParam) if (lParam)
{ {
@@ -6782,6 +6937,8 @@ BOOL CALLBACK BenchmarkDlgProc (HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lP
SendMessage (hList,LVM_INSERTCOLUMNW,0,(LPARAM)&LvCol); SendMessage (hList,LVM_INSERTCOLUMNW,0,(LPARAM)&LvCol);
ResetBenchmarkList (hwndDlg); ResetBenchmarkList (hwndDlg);
InitBenchmarkKdfList (hwndDlg);
UpdateBenchmarkKdfSelectorVisibility (hwndDlg);
/* Combo boxes */ /* Combo boxes */
@@ -6903,6 +7060,14 @@ BOOL CALLBACK BenchmarkDlgProc (HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lP
} }
break; break;
case WM_NOTIFY:
if (((LPNMHDR) lParam)->idFrom == IDC_BENCHMARK_KDF_LIST
&& ((LPNMHDR) lParam)->code == LVN_ITEMCHANGED)
{
return HandleBenchmarkKdfListItemChanged (hwndDlg, (LPNMLISTVIEW) lParam);
}
break;
case WM_COMMAND: case WM_COMMAND:
switch (lw) switch (lw)
@@ -6929,6 +7094,7 @@ BOOL CALLBACK BenchmarkDlgProc (HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lP
if (benchmarkType == BENCHMARK_TYPE_PRF) if (benchmarkType == BENCHMARK_TYPE_PRF)
{ {
benchmarkPreBoot = GetCheckBox (hwndDlg, IDC_BENCHMARK_PREBOOT);
ShowWindow (GetDlgItem (hwndDlg, IDC_BENCHMARK_BUFFER_SIZE), SW_HIDE); ShowWindow (GetDlgItem (hwndDlg, IDC_BENCHMARK_BUFFER_SIZE), SW_HIDE);
ShowWindow (GetDlgItem (hwndDlg, IDT_BUFFER_SIZE), SW_HIDE); ShowWindow (GetDlgItem (hwndDlg, IDT_BUFFER_SIZE), SW_HIDE);
ShowWindow (GetDlgItem (hwndDlg, IDC_PIM), SW_SHOW); ShowWindow (GetDlgItem (hwndDlg, IDC_PIM), SW_SHOW);
@@ -6943,6 +7109,16 @@ BOOL CALLBACK BenchmarkDlgProc (HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lP
ShowWindow (GetDlgItem (hwndDlg, IDT_PIM), SW_HIDE); ShowWindow (GetDlgItem (hwndDlg, IDT_PIM), SW_HIDE);
ShowWindow (GetDlgItem (hwndDlg, IDC_BENCHMARK_PREBOOT), SW_HIDE); ShowWindow (GetDlgItem (hwndDlg, IDC_BENCHMARK_PREBOOT), SW_HIDE);
} }
UpdateBenchmarkKdfSelectorVisibility (hwndDlg);
return 1;
case IDC_BENCHMARK_PREBOOT:
benchmarkPreBoot = GetCheckBox (hwndDlg, IDC_BENCHMARK_PREBOOT);
UpdateBenchmarkKdfListForCurrentOptions (hwndDlg);
benchmarkTotalItems = 0;
ResetBenchmarkList (hwndDlg);
return 1; return 1;
case IDC_PERFORM_BENCHMARK: case IDC_PERFORM_BENCHMARK:
@@ -6951,6 +7127,8 @@ BOOL CALLBACK BenchmarkDlgProc (HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lP
{ {
benchmarkPim = GetPim (hwndDlg, IDC_PIM, 0); benchmarkPim = GetPim (hwndDlg, IDC_PIM, 0);
benchmarkPreBoot = GetCheckBox (hwndDlg, IDC_BENCHMARK_PREBOOT); benchmarkPreBoot = GetCheckBox (hwndDlg, IDC_BENCHMARK_PREBOOT);
if (!BenchmarkHasSelectedKdfForCurrentOptions ())
return 1;
} }
else else
{ {
+2 -1
View File
@@ -227,6 +227,7 @@
#define IDC_LINK_KEYFILES_EXTENSIONS_WARNING 5144 #define IDC_LINK_KEYFILES_EXTENSIONS_WARNING 5144
#define IDC_DISABLE_MEMORY_PROTECTION 5145 #define IDC_DISABLE_MEMORY_PROTECTION 5145
#define IDC_DISABLE_MEMORY_PROTECTION_HELP 5146 #define IDC_DISABLE_MEMORY_PROTECTION_HELP 5146
#define IDC_BENCHMARK_KDF_LIST 5147
// Next default values for new objects // Next default values for new objects
// //
@@ -235,7 +236,7 @@
#define _APS_NO_MFC 1 #define _APS_NO_MFC 1
#define _APS_NEXT_RESOURCE_VALUE 585 #define _APS_NEXT_RESOURCE_VALUE 585
#define _APS_NEXT_COMMAND_VALUE 40001 #define _APS_NEXT_COMMAND_VALUE 40001
#define _APS_NEXT_CONTROL_VALUE 5147 #define _APS_NEXT_CONTROL_VALUE 5148
#define _APS_NEXT_SYMED_VALUE 101 #define _APS_NEXT_SYMED_VALUE 101
#endif #endif
#endif #endif