VeraCrypt
aboutsummaryrefslogtreecommitdiff
path: root/src/Mount
diff options
context:
space:
mode:
authorMounir IDRASSI <mounir.idrassi@idrix.fr>2014-07-27 02:36:23 +0200
committerMounir IDRASSI <mounir.idrassi@idrix.fr>2014-11-08 23:21:43 +0100
commit1c11ee428d9e06be1440133f6d1163ce6c709410 (patch)
treed593910f3e6e3d2441bfd4bfe25d6e58c508a0b0 /src/Mount
parent97154aaf51efe787dd1678c8e1baeeb65ce46fe1 (diff)
downloadVeraCrypt-1c11ee428d9e06be1440133f6d1163ce6c709410.tar.gz
VeraCrypt-1c11ee428d9e06be1440133f6d1163ce6c709410.zip
Add option in select the number of passes for volume header over-writing. By default, it is set to 3 but it can be increased to 256 passes (which can lead to a delay of many hours for a single password change operation).
Diffstat (limited to 'src/Mount')
-rw-r--r--src/Mount/MainCom.cpp8
-rw-r--r--src/Mount/MainCom.h2
-rw-r--r--src/Mount/MainCom.idl2
-rw-r--r--src/Mount/Mount.c15
-rw-r--r--src/Mount/Mount.rc10
-rw-r--r--src/Mount/Mount.vcproj4
-rw-r--r--src/Mount/Resource.h2
7 files changed, 30 insertions, 13 deletions
diff --git a/src/Mount/MainCom.cpp b/src/Mount/MainCom.cpp
index 537a187f..829cd21f 100644
--- a/src/Mount/MainCom.cpp
+++ b/src/Mount/MainCom.cpp
@@ -100,13 +100,13 @@ public:
100 return BaseCom::CallDriver (ioctl, input, output); 100 return BaseCom::CallDriver (ioctl, input, output);
101 } 101 }
102 102
103 virtual int STDMETHODCALLTYPE ChangePassword (BSTR volumePath, Password *oldPassword, Password *newPassword, int pkcs5, LONG_PTR hWnd) 103 virtual int STDMETHODCALLTYPE ChangePassword (BSTR volumePath, Password *oldPassword, Password *newPassword, int pkcs5, int wipePassCount, LONG_PTR hWnd)
104 { 104 {
105 USES_CONVERSION; 105 USES_CONVERSION;
106 CW2A volumePathA(volumePath); 106 CW2A volumePathA(volumePath);
107 MainDlg = (HWND) hWnd; 107 MainDlg = (HWND) hWnd;
108 if (volumePathA.m_psz) 108 if (volumePathA.m_psz)
109 return ::ChangePwd (volumePathA.m_psz, oldPassword, newPassword, pkcs5, (HWND) hWnd); 109 return ::ChangePwd (volumePathA.m_psz, oldPassword, newPassword, pkcs5, wipePassCount,(HWND) hWnd);
110 else 110 else
111 return ERR_OUTOFMEMORY; 111 return ERR_OUTOFMEMORY;
112 } 112 }
@@ -261,7 +261,7 @@ extern "C" int UacRestoreVolumeHeader (HWND hwndDlg, char *lpszVolume)
261} 261}
262 262
263 263
264extern "C" int UacChangePwd (char *lpszVolume, Password *oldPassword, Password *newPassword, int pkcs5, HWND hwndDlg) 264extern "C" int UacChangePwd (char *lpszVolume, Password *oldPassword, Password *newPassword, int pkcs5, int wipePassCount, HWND hwndDlg)
265{ 265{
266 CComPtr<ITrueCryptMainCom> tc; 266 CComPtr<ITrueCryptMainCom> tc;
267 int r; 267 int r;
@@ -269,7 +269,7 @@ extern "C" int UacChangePwd (char *lpszVolume, Password *oldPassword, Password *
269 if (ComGetInstance (hwndDlg, &tc)) 269 if (ComGetInstance (hwndDlg, &tc))
270 { 270 {
271 WaitCursor (); 271 WaitCursor ();
272 r = tc->ChangePassword (CComBSTR (lpszVolume), oldPassword, newPassword, pkcs5, (LONG_PTR) hwndDlg); 272 r = tc->ChangePassword (CComBSTR (lpszVolume), oldPassword, newPassword, pkcs5, wipePassCount, (LONG_PTR) hwndDlg);
273 NormalCursor (); 273 NormalCursor ();
274 } 274 }
275 else 275 else
diff --git a/src/Mount/MainCom.h b/src/Mount/MainCom.h
index 44d9db45..a22eb345 100644
--- a/src/Mount/MainCom.h
+++ b/src/Mount/MainCom.h
@@ -23,7 +23,7 @@ BOOL ComServerMain ();
23void UacAnalyzeKernelMiniDump (HWND hwndDlg); 23void UacAnalyzeKernelMiniDump (HWND hwndDlg);
24int UacBackupVolumeHeader (HWND hwndDlg, BOOL bRequireConfirmation, char *lpszVolume); 24int UacBackupVolumeHeader (HWND hwndDlg, BOOL bRequireConfirmation, char *lpszVolume);
25int UacRestoreVolumeHeader (HWND hwndDlg, char *lpszVolume); 25int UacRestoreVolumeHeader (HWND hwndDlg, char *lpszVolume);
26int UacChangePwd (char *lpszVolume, Password *oldPassword, Password *newPassword, int pkcs5, HWND hwndDlg); 26int UacChangePwd (char *lpszVolume, Password *oldPassword, Password *newPassword, int pkcs5, int wipePassCount, HWND hwndDlg);
27 27
28#ifdef __cplusplus 28#ifdef __cplusplus
29} 29}
diff --git a/src/Mount/MainCom.idl b/src/Mount/MainCom.idl
index 8999d4ec..8550fe8f 100644
--- a/src/Mount/MainCom.idl
+++ b/src/Mount/MainCom.idl
@@ -27,7 +27,7 @@ library TrueCryptMainCom
27 void AnalyzeKernelMiniDump (LONG_PTR hwndDlg); 27 void AnalyzeKernelMiniDump (LONG_PTR hwndDlg);
28 int BackupVolumeHeader (LONG_PTR hwndDlg, BOOL bRequireConfirmation, BSTR lpszVolume); 28 int BackupVolumeHeader (LONG_PTR hwndDlg, BOOL bRequireConfirmation, BSTR lpszVolume);
29 DWORD CallDriver (DWORD ioctl, BSTR input, BSTR *output); 29 DWORD CallDriver (DWORD ioctl, BSTR input, BSTR *output);
30 int ChangePassword (BSTR volumePath, Password *oldPassword, Password *newPassword, int pkcs5, LONG_PTR hWnd); 30 int ChangePassword (BSTR volumePath, Password *oldPassword, Password *newPassword, int pkcs5, int wipePassCount, LONG_PTR hWnd);
31 DWORD CopyFile (BSTR sourceFile, BSTR destinationFile); 31 DWORD CopyFile (BSTR sourceFile, BSTR destinationFile);
32 DWORD DeleteFile (BSTR file); 32 DWORD DeleteFile (BSTR file);
33 BOOL IsPagingFileActive (BOOL checkNonWindowsPartitionsOnly); 33 BOOL IsPagingFileActive (BOOL checkNonWindowsPartitionsOnly);
diff --git a/src/Mount/Mount.c b/src/Mount/Mount.c
index 380cd04a..6b11c178 100644
--- a/src/Mount/Mount.c
+++ b/src/Mount/Mount.c
@@ -1396,6 +1396,7 @@ BOOL CALLBACK PasswordChangeDlgProc (HWND hwndDlg, UINT msg, WPARAM wParam, LPAR
1396 LPARAM nIndex; 1396 LPARAM nIndex;
1397 HWND hComboBox = GetDlgItem (hwndDlg, IDC_PKCS5_PRF_ID); 1397 HWND hComboBox = GetDlgItem (hwndDlg, IDC_PKCS5_PRF_ID);
1398 int i; 1398 int i;
1399 WipeAlgorithmId headerWipeMode = TC_WIPE_3_DOD_5220;
1399 1400
1400 ZeroMemory (&newKeyFilesParam, sizeof (newKeyFilesParam)); 1401 ZeroMemory (&newKeyFilesParam, sizeof (newKeyFilesParam));
1401 1402
@@ -1427,6 +1428,9 @@ BOOL CALLBACK PasswordChangeDlgProc (HWND hwndDlg, UINT msg, WPARAM wParam, LPAR
1427 1428
1428 SendMessage (hComboBox, CB_SETCURSEL, 0, 0); 1429 SendMessage (hComboBox, CB_SETCURSEL, 0, 0);
1429 1430
1431 PopulateWipeModeCombo (GetDlgItem (hwndDlg, IDC_WIPE_MODE), FALSE, FALSE, TRUE);
1432 SelectAlgo (GetDlgItem (hwndDlg, IDC_WIPE_MODE), (int *) &headerWipeMode);
1433
1430 switch (pwdChangeDlgMode) 1434 switch (pwdChangeDlgMode)
1431 { 1435 {
1432 case PCDM_CHANGE_PKCS5_PRF: 1436 case PCDM_CHANGE_PKCS5_PRF:
@@ -1751,6 +1755,11 @@ BOOL CALLBACK PasswordChangeDlgProc (HWND hwndDlg, UINT msg, WPARAM wParam, LPAR
1751 HWND hParent = GetParent (hwndDlg); 1755 HWND hParent = GetParent (hwndDlg);
1752 Password oldPassword; 1756 Password oldPassword;
1753 Password newPassword; 1757 Password newPassword;
1758 WipeAlgorithmId headerWiperMode = (WipeAlgorithmId) SendMessage (
1759 GetDlgItem (hwndDlg, IDC_WIPE_MODE),
1760 CB_GETITEMDATA,
1761 SendMessage (GetDlgItem (hwndDlg, IDC_WIPE_MODE), CB_GETCURSEL, 0, 0),
1762 0);
1754 int nStatus; 1763 int nStatus;
1755 int pkcs5 = SendMessage (GetDlgItem (hwndDlg, IDC_PKCS5_PRF_ID), CB_GETITEMDATA, 1764 int pkcs5 = SendMessage (GetDlgItem (hwndDlg, IDC_PKCS5_PRF_ID), CB_GETITEMDATA,
1756 SendMessage (GetDlgItem (hwndDlg, IDC_PKCS5_PRF_ID), CB_GETCURSEL, 0, 0), 0); 1765 SendMessage (GetDlgItem (hwndDlg, IDC_PKCS5_PRF_ID), CB_GETCURSEL, 0, 0), 0);
@@ -1813,7 +1822,7 @@ BOOL CALLBACK PasswordChangeDlgProc (HWND hwndDlg, UINT msg, WPARAM wParam, LPAR
1813 1822
1814 try 1823 try
1815 { 1824 {
1816 nStatus = BootEncObj->ChangePassword (&oldPassword, &newPassword, pkcs5); 1825 nStatus = BootEncObj->ChangePassword (&oldPassword, &newPassword, pkcs5, GetWipePassCount(headerWiperMode));
1817 } 1826 }
1818 catch (Exception &e) 1827 catch (Exception &e)
1819 { 1828 {
@@ -1825,14 +1834,14 @@ BOOL CALLBACK PasswordChangeDlgProc (HWND hwndDlg, UINT msg, WPARAM wParam, LPAR
1825 { 1834 {
1826 // Non-system 1835 // Non-system
1827 1836
1828 nStatus = ChangePwd (szFileName, &oldPassword, &newPassword, pkcs5, hwndDlg); 1837 nStatus = ChangePwd (szFileName, &oldPassword, &newPassword, pkcs5, GetWipePassCount(headerWiperMode), hwndDlg);
1829 1838
1830 if (nStatus == ERR_OS_ERROR 1839 if (nStatus == ERR_OS_ERROR
1831 && GetLastError () == ERROR_ACCESS_DENIED 1840 && GetLastError () == ERROR_ACCESS_DENIED
1832 && IsUacSupported () 1841 && IsUacSupported ()
1833 && IsVolumeDeviceHosted (szFileName)) 1842 && IsVolumeDeviceHosted (szFileName))
1834 { 1843 {
1835 nStatus = UacChangePwd (szFileName, &oldPassword, &newPassword, pkcs5, hwndDlg); 1844 nStatus = UacChangePwd (szFileName, &oldPassword, &newPassword, pkcs5, GetWipePassCount(headerWiperMode), hwndDlg);
1836 } 1845 }
1837 } 1846 }
1838 1847
diff --git a/src/Mount/Mount.rc b/src/Mount/Mount.rc
index 05dc0f23..fcae0c36 100644
--- a/src/Mount/Mount.rc
+++ b/src/Mount/Mount.rc
@@ -101,7 +101,7 @@ BEGIN
101 CONTROL "",IDC_VOLUME_PROPERTIES_LIST,"SysListView32",LVS_REPORT | LVS_ALIGNLEFT | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP,7,6,269,154 101 CONTROL "",IDC_VOLUME_PROPERTIES_LIST,"SysListView32",LVS_REPORT | LVS_ALIGNLEFT | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP,7,6,269,154
102END 102END
103 103
104IDD_PASSWORDCHANGE_DLG DIALOGEX 0, 0, 316, 162 104IDD_PASSWORDCHANGE_DLG DIALOGEX 0, 0, 316, 183
105STYLE DS_SETFONT | DS_MODALFRAME | DS_3DLOOK | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU 105STYLE DS_SETFONT | DS_MODALFRAME | DS_3DLOOK | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
106CAPTION "Change Password or Keyfiles" 106CAPTION "Change Password or Keyfiles"
107CLASS "CustomDlg" 107CLASS "CustomDlg"
@@ -124,7 +124,9 @@ BEGIN
124 RTEXT "Confirm Password:",IDT_CONFIRM_PASSWORD,9,93,75,16 124 RTEXT "Confirm Password:",IDT_CONFIRM_PASSWORD,9,93,75,16
125 RTEXT "PKCS-5 PRF:",IDT_PKCS5_PRF,9,137,74,10,SS_CENTERIMAGE 125 RTEXT "PKCS-5 PRF:",IDT_PKCS5_PRF,9,137,74,10,SS_CENTERIMAGE
126 GROUPBOX "Current",IDT_CURRENT,6,3,238,58 126 GROUPBOX "Current",IDT_CURRENT,6,3,238,58
127 GROUPBOX "New",IDT_NEW,6,63,238,93 127 GROUPBOX "New",IDT_NEW,6,63,238,113
128 COMBOBOX IDC_WIPE_MODE,89,155,125,90,CBS_DROPDOWNLIST | WS_TABSTOP
129 RTEXT "Wipe mode:",IDT_WIPE_MODE,9,157,74,8,0,WS_EX_RIGHT
128END 130END
129 131
130IDD_MOUNT_DLG DIALOGEX 0, 0, 375, 271 132IDD_MOUNT_DLG DIALOGEX 0, 0, 375, 271
@@ -351,7 +353,7 @@ BEGIN
351 LEFTMARGIN, 7 353 LEFTMARGIN, 7
352 RIGHTMARGIN, 309 354 RIGHTMARGIN, 309
353 TOPMARGIN, 7 355 TOPMARGIN, 7
354 BOTTOMMARGIN, 155 356 BOTTOMMARGIN, 176
355 END 357 END
356 358
357 IDD_MOUNT_DLG, DIALOG 359 IDD_MOUNT_DLG, DIALOG
@@ -593,7 +595,7 @@ BEGIN
593 MENUITEM "Beginner's Tutorial", IDM_ONLINE_TUTORIAL 595 MENUITEM "Beginner's Tutorial", IDM_ONLINE_TUTORIAL
594 MENUITEM "Frequently Asked Questions", IDM_FAQ 596 MENUITEM "Frequently Asked Questions", IDM_FAQ
595 MENUITEM SEPARATOR 597 MENUITEM SEPARATOR
596 MENUITEM "VeraCrypt Website", IDM_WEBSITE 598 MENUITEM "VeraCrypt Website", IDM_WEBSITE
597 MENUITEM "Downloads", IDM_TC_DOWNLOADS 599 MENUITEM "Downloads", IDM_TC_DOWNLOADS
598 MENUITEM "News", IDM_NEWS 600 MENUITEM "News", IDM_NEWS
599 MENUITEM "Version History", IDM_VERSION_HISTORY 601 MENUITEM "Version History", IDM_VERSION_HISTORY
diff --git a/src/Mount/Mount.vcproj b/src/Mount/Mount.vcproj
index f2c3f63f..cb0be04e 100644
--- a/src/Mount/Mount.vcproj
+++ b/src/Mount/Mount.vcproj
@@ -374,6 +374,10 @@
374 > 374 >
375 </File> 375 </File>
376 <File 376 <File
377 RelativePath="..\Common\Wipe.c"
378 >
379 </File>
380 <File
377 RelativePath="..\Common\Wipe.h" 381 RelativePath="..\Common\Wipe.h"
378 > 382 >
379 </File> 383 </File>
diff --git a/src/Mount/Resource.h b/src/Mount/Resource.h
index c410d36b..7ed08e06 100644
--- a/src/Mount/Resource.h
+++ b/src/Mount/Resource.h
@@ -106,11 +106,13 @@
106#define IDC_SHOW_PASSWORD_CHPWD_ORI 1083 106#define IDC_SHOW_PASSWORD_CHPWD_ORI 1083
107#define IDC_HK_DISMOUNT_PLAY_SOUND 1084 107#define IDC_HK_DISMOUNT_PLAY_SOUND 1084
108#define IDC_HOTKEY_ASSIGN 1085 108#define IDC_HOTKEY_ASSIGN 1085
109#define IDC_WIPE_MODE 1085
109#define IDC_HOTKEY_REMOVE 1086 110#define IDC_HOTKEY_REMOVE 1086
110#define IDC_HOTKEY_KEY 1087 111#define IDC_HOTKEY_KEY 1087
111#define IDT_HOTKEY_KEY 1088 112#define IDT_HOTKEY_KEY 1088
112#define IDC_HOTKEY_LIST 1089 113#define IDC_HOTKEY_LIST 1089
113#define IDC_RESET_HOTKEYS 1090 114#define IDC_RESET_HOTKEYS 1090
115#define IDT_WIPE_MODE 1090
114#define IDT_DISMOUNT_ACTION 1091 116#define IDT_DISMOUNT_ACTION 1091
115#define IDT_ASSIGN_HOTKEY 1092 117#define IDT_ASSIGN_HOTKEY 1092
116#define IDC_HK_MOD_SHIFT 1093 118#define IDC_HK_MOD_SHIFT 1093