diff options
author | Mounir IDRASSI <mounir.idrassi@idrix.fr> | 2014-07-27 02:36:23 +0200 |
---|---|---|
committer | Mounir IDRASSI <mounir.idrassi@idrix.fr> | 2014-11-08 23:21:43 +0100 |
commit | 1c11ee428d9e06be1440133f6d1163ce6c709410 (patch) | |
tree | d593910f3e6e3d2441bfd4bfe25d6e58c508a0b0 /src/Mount | |
parent | 97154aaf51efe787dd1678c8e1baeeb65ce46fe1 (diff) | |
download | VeraCrypt-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.cpp | 8 | ||||
-rw-r--r-- | src/Mount/MainCom.h | 2 | ||||
-rw-r--r-- | src/Mount/MainCom.idl | 2 | ||||
-rw-r--r-- | src/Mount/Mount.c | 15 | ||||
-rw-r--r-- | src/Mount/Mount.rc | 10 | ||||
-rw-r--r-- | src/Mount/Mount.vcproj | 4 | ||||
-rw-r--r-- | src/Mount/Resource.h | 2 |
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 | ||
264 | extern "C" int UacChangePwd (char *lpszVolume, Password *oldPassword, Password *newPassword, int pkcs5, HWND hwndDlg) | 264 | extern "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 (); | |||
23 | void UacAnalyzeKernelMiniDump (HWND hwndDlg); | 23 | void UacAnalyzeKernelMiniDump (HWND hwndDlg); |
24 | int UacBackupVolumeHeader (HWND hwndDlg, BOOL bRequireConfirmation, char *lpszVolume); | 24 | int UacBackupVolumeHeader (HWND hwndDlg, BOOL bRequireConfirmation, char *lpszVolume); |
25 | int UacRestoreVolumeHeader (HWND hwndDlg, char *lpszVolume); | 25 | int UacRestoreVolumeHeader (HWND hwndDlg, char *lpszVolume); |
26 | int UacChangePwd (char *lpszVolume, Password *oldPassword, Password *newPassword, int pkcs5, HWND hwndDlg); | 26 | int 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 |
102 | END | 102 | END |
103 | 103 | ||
104 | IDD_PASSWORDCHANGE_DLG DIALOGEX 0, 0, 316, 162 | 104 | IDD_PASSWORDCHANGE_DLG DIALOGEX 0, 0, 316, 183 |
105 | STYLE DS_SETFONT | DS_MODALFRAME | DS_3DLOOK | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU | 105 | STYLE DS_SETFONT | DS_MODALFRAME | DS_3DLOOK | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU |
106 | CAPTION "Change Password or Keyfiles" | 106 | CAPTION "Change Password or Keyfiles" |
107 | CLASS "CustomDlg" | 107 | CLASS "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 | ||
128 | END | 130 | END |
129 | 131 | ||
130 | IDD_MOUNT_DLG DIALOGEX 0, 0, 375, 271 | 132 | IDD_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 |