mirror of
https://github.com/veracrypt/VeraCrypt.git
synced 2025-11-11 11:08:02 -06:00
Windows: Add colors (Red, Yellow, Green) to the collected randomness indicator depending on how much entropy was gathered. Code re-factoring.
This commit is contained in:
@@ -53,6 +53,7 @@
|
||||
#include "Xml.h"
|
||||
#include "Xts.h"
|
||||
#include "Boot/Windows/BootCommon.h"
|
||||
#include "Progress.h"
|
||||
|
||||
#ifdef TCMOUNT
|
||||
#include "Mount/Mount.h"
|
||||
@@ -5409,6 +5410,7 @@ static BOOL CALLBACK RandomPoolEnrichementDlgProc (HWND hwndDlg, UINT msg, WPARA
|
||||
hEntropyBar = GetDlgItem (hwndDlg, IDC_ENTROPY_BAR);
|
||||
SendMessage (hEntropyBar, PBM_SETRANGE32, 0, maxEntropyLevel);
|
||||
SendMessage (hEntropyBar, PBM_SETSTEP, 1, 0);
|
||||
SendMessage (hEntropyBar, PBM_SETSTATE, PBST_ERROR, 0);
|
||||
return 1;
|
||||
}
|
||||
|
||||
@@ -5421,27 +5423,7 @@ static BOOL CALLBACK RandomPoolEnrichementDlgProc (HWND hwndDlg, UINT msg, WPARA
|
||||
|
||||
RandpeekBytes (hwndDlg, randPool, sizeof (randPool), &mouseEventsCounter);
|
||||
|
||||
/* conservative estimate: 1 mouse move event brings 1 bit of entropy
|
||||
* https://security.stackexchange.com/questions/32844/for-how-much-time-should-i-randomly-move-the-mouse-for-generating-encryption-key/32848#32848
|
||||
*/
|
||||
if (mouseEntropyGathered == 0xFFFFFFFF)
|
||||
{
|
||||
mouseEventsInitialCount = mouseEventsCounter;
|
||||
mouseEntropyGathered = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( mouseEntropyGathered < maxEntropyLevel
|
||||
&& (mouseEventsCounter >= mouseEventsInitialCount)
|
||||
&& (mouseEventsCounter - mouseEventsInitialCount) <= maxEntropyLevel)
|
||||
mouseEntropyGathered = mouseEventsCounter - mouseEventsInitialCount;
|
||||
else
|
||||
mouseEntropyGathered = maxEntropyLevel;
|
||||
|
||||
SendMessage (hEntropyBar, PBM_SETPOS,
|
||||
(WPARAM) (mouseEntropyGathered),
|
||||
0);
|
||||
}
|
||||
ProcessEntropyEstimate (hEntropyBar, &mouseEventsInitialCount, mouseEventsCounter, maxEntropyLevel, &mouseEntropyGathered);
|
||||
|
||||
if (memcmp (lastRandPool, randPool, sizeof(lastRandPool)) != 0)
|
||||
{
|
||||
@@ -5618,6 +5600,7 @@ BOOL CALLBACK KeyfileGeneratorDlgProc (HWND hwndDlg, UINT msg, WPARAM wParam, LP
|
||||
hEntropyBar = GetDlgItem (hwndDlg, IDC_ENTROPY_BAR);
|
||||
SendMessage (hEntropyBar, PBM_SETRANGE32, 0, maxEntropyLevel);
|
||||
SendMessage (hEntropyBar, PBM_SETSTEP, 1, 0);
|
||||
SendMessage (hEntropyBar, PBM_SETSTATE, PBST_ERROR, 0);
|
||||
|
||||
#ifndef VOLFORMAT
|
||||
if (Randinit ())
|
||||
@@ -5648,27 +5631,7 @@ BOOL CALLBACK KeyfileGeneratorDlgProc (HWND hwndDlg, UINT msg, WPARAM wParam, LP
|
||||
|
||||
RandpeekBytes (hwndDlg, randPool, sizeof (randPool), &mouseEventsCounter);
|
||||
|
||||
/* conservative estimate: 1 mouse move event brings 1 bit of entropy
|
||||
* https://security.stackexchange.com/questions/32844/for-how-much-time-should-i-randomly-move-the-mouse-for-generating-encryption-key/32848#32848
|
||||
*/
|
||||
if (mouseEntropyGathered == 0xFFFFFFFF)
|
||||
{
|
||||
mouseEventsInitialCount = mouseEventsCounter;
|
||||
mouseEntropyGathered = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( mouseEntropyGathered < maxEntropyLevel
|
||||
&& (mouseEventsCounter >= mouseEventsInitialCount)
|
||||
&& (mouseEventsCounter - mouseEventsInitialCount) <= maxEntropyLevel)
|
||||
mouseEntropyGathered = mouseEventsCounter - mouseEventsInitialCount;
|
||||
else
|
||||
mouseEntropyGathered = maxEntropyLevel;
|
||||
|
||||
SendMessage (hEntropyBar, PBM_SETPOS,
|
||||
(WPARAM) (mouseEntropyGathered),
|
||||
0);
|
||||
}
|
||||
ProcessEntropyEstimate (hEntropyBar, &mouseEventsInitialCount, mouseEventsCounter, maxEntropyLevel, &mouseEntropyGathered);
|
||||
|
||||
if (memcmp (lastRandPool, randPool, sizeof(lastRandPool)) != 0)
|
||||
{
|
||||
@@ -11508,3 +11471,40 @@ HRESULT VCStrDupW(LPCWSTR psz, LPWSTR *ppwsz)
|
||||
{
|
||||
return SHStrDupWFn (psz, ppwsz);
|
||||
}
|
||||
|
||||
|
||||
void ProcessEntropyEstimate (HWND hProgress, DWORD* pdwInitialValue, DWORD dwCounter, DWORD dwMaxLevel, DWORD* pdwEntropy)
|
||||
{
|
||||
/* conservative estimate: 1 mouse move event brings 1 bit of entropy
|
||||
* https://security.stackexchange.com/questions/32844/for-how-much-time-should-i-randomly-move-the-mouse-for-generating-encryption-key/32848#32848
|
||||
*/
|
||||
if (*pdwEntropy == 0xFFFFFFFF)
|
||||
{
|
||||
*pdwInitialValue = dwCounter;
|
||||
*pdwEntropy = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( *pdwEntropy < dwMaxLevel
|
||||
&& (dwCounter >= *pdwInitialValue)
|
||||
&& (dwCounter - *pdwInitialValue) <= dwMaxLevel)
|
||||
*pdwEntropy = dwCounter - *pdwInitialValue;
|
||||
else
|
||||
*pdwEntropy = dwMaxLevel;
|
||||
|
||||
if (IsOSAtLeast (WIN_VISTA))
|
||||
{
|
||||
int state = PBST_ERROR;
|
||||
if (*pdwEntropy >= (dwMaxLevel/2))
|
||||
state = PBST_NORMAL;
|
||||
else if (*pdwEntropy >= (dwMaxLevel/4))
|
||||
state = PBST_PAUSED;
|
||||
|
||||
SendMessage (hProgress, PBM_SETSTATE, state, 0);
|
||||
}
|
||||
|
||||
SendMessage (hProgress, PBM_SETPOS,
|
||||
(WPARAM) (*pdwEntropy),
|
||||
0);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -498,6 +498,7 @@ LSTATUS DeleteRegistryKey (HKEY, LPCTSTR);
|
||||
HIMAGELIST CreateImageList(int cx, int cy, UINT flags, int cInitial, int cGrow);
|
||||
int AddBitmapToImageList(HIMAGELIST himl, HBITMAP hbmImage, HBITMAP hbmMask);
|
||||
HRESULT VCStrDupW(LPCWSTR psz, LPWSTR *ppwsz);
|
||||
void ProcessEntropyEstimate (HWND hProgress, DWORD* pdwInitialValue, DWORD dwCounter, DWORD dwMaxLevel, DWORD* pdwEntropy);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
||||
@@ -15,6 +15,15 @@
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#ifndef PBM_SETSTATE
|
||||
|
||||
#define PBM_SETSTATE (WM_USER+16) // wParam = PBST_[State] (NORMAL, ERROR, PAUSED)
|
||||
#define PBST_NORMAL 0x0001
|
||||
#define PBST_ERROR 0x0002
|
||||
#define PBST_PAUSED 0x0003
|
||||
|
||||
#endif
|
||||
|
||||
void InitProgressBar (__int64 totalBytes, __int64 bytesDone, BOOL bReverse, BOOL bIOThroughput, BOOL bDisplayStatus, BOOL bShowPercent);
|
||||
BOOL UpdateProgressBar (__int64 byteOffset);
|
||||
BOOL UpdateProgressBarProc (__int64 byteOffset);
|
||||
|
||||
@@ -346,27 +346,7 @@ BOOL CALLBACK ExpandVolProgressDlgProc (HWND hwndDlg, UINT msg, WPARAM wParam, L
|
||||
|
||||
RandpeekBytes (hwndDlg, randPool, sizeof (randPool),&mouseEventsCounter);
|
||||
|
||||
/* conservative estimate: 1 mouse move event brings 1 bit of entropy
|
||||
* https://security.stackexchange.com/questions/32844/for-how-much-time-should-i-randomly-move-the-mouse-for-generating-encryption-key/32848#32848
|
||||
*/
|
||||
if (mouseEntropyGathered == 0xFFFFFFFF)
|
||||
{
|
||||
mouseEventsInitialCount = mouseEventsCounter;
|
||||
mouseEntropyGathered = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( mouseEntropyGathered < maxEntropyLevel
|
||||
&& (mouseEventsCounter >= mouseEventsInitialCount)
|
||||
&& (mouseEventsCounter - mouseEventsInitialCount) <= maxEntropyLevel)
|
||||
mouseEntropyGathered = mouseEventsCounter - mouseEventsInitialCount;
|
||||
else
|
||||
mouseEntropyGathered = maxEntropyLevel;
|
||||
|
||||
SendMessage (hEntropyBar, PBM_SETPOS,
|
||||
(WPARAM) (mouseEntropyGathered),
|
||||
0);
|
||||
}
|
||||
ProcessEntropyEstimate (hEntropyBar, &mouseEventsInitialCount, mouseEventsCounter, maxEntropyLevel, &mouseEntropyGathered);
|
||||
|
||||
if (showRandPool)
|
||||
StringCbPrintfW (szRndPool, sizeof(szRndPool), L"%08X%08X%08X%08X",
|
||||
|
||||
Binary file not shown.
Reference in New Issue
Block a user