diff options
Diffstat (limited to 'src/Common')
-rw-r--r-- | src/Common/BootEncryption.cpp | 8 | ||||
-rw-r--r-- | src/Common/BootEncryption.h | 2 | ||||
-rw-r--r-- | src/Common/Dlgcode.c | 19 | ||||
-rw-r--r-- | src/Common/Dlgcode.h | 2 | ||||
-rw-r--r-- | src/Common/Password.c | 8 | ||||
-rw-r--r-- | src/Common/Password.h | 2 | ||||
-rw-r--r-- | src/Common/Wipe.c | 4 | ||||
-rw-r--r-- | src/Common/Wipe.h | 3 |
8 files changed, 31 insertions, 17 deletions
diff --git a/src/Common/BootEncryption.cpp b/src/Common/BootEncryption.cpp index 0fec2878..e57a434e 100644 --- a/src/Common/BootEncryption.cpp +++ b/src/Common/BootEncryption.cpp | |||
@@ -2060,7 +2060,7 @@ namespace VeraCrypt | |||
2060 | } | 2060 | } |
2061 | 2061 | ||
2062 | 2062 | ||
2063 | int BootEncryption::ChangePassword (Password *oldPassword, Password *newPassword, int pkcs5) | 2063 | int BootEncryption::ChangePassword (Password *oldPassword, Password *newPassword, int pkcs5, int wipePassCount) |
2064 | { | 2064 | { |
2065 | BootEncryptionStatus encStatus = GetStatus(); | 2065 | BootEncryptionStatus encStatus = GetStatus(); |
2066 | 2066 | ||
@@ -2125,7 +2125,7 @@ namespace VeraCrypt | |||
2125 | UserEnrichRandomPool (ParentWindow); | 2125 | UserEnrichRandomPool (ParentWindow); |
2126 | WaitCursor(); | 2126 | WaitCursor(); |
2127 | 2127 | ||
2128 | /* The header will be re-encrypted PRAND_DISK_WIPE_PASSES times to prevent adversaries from using | 2128 | /* The header will be re-encrypted wipePassCount times to prevent adversaries from using |
2129 | techniques such as magnetic force microscopy or magnetic force scanning tunnelling microscopy | 2129 | techniques such as magnetic force microscopy or magnetic force scanning tunnelling microscopy |
2130 | to recover the overwritten header. According to Peter Gutmann, data should be overwritten 22 | 2130 | to recover the overwritten header. According to Peter Gutmann, data should be overwritten 22 |
2131 | times (ideally, 35 times) using non-random patterns and pseudorandom data. However, as users might | 2131 | times (ideally, 35 times) using non-random patterns and pseudorandom data. However, as users might |
@@ -2145,7 +2145,7 @@ namespace VeraCrypt | |||
2145 | BOOL backupHeader = FALSE; | 2145 | BOOL backupHeader = FALSE; |
2146 | while (TRUE) | 2146 | while (TRUE) |
2147 | { | 2147 | { |
2148 | for (int wipePass = 0; wipePass < PRAND_DISK_WIPE_PASSES; wipePass++) | 2148 | for (int wipePass = 0; wipePass < wipePassCount; wipePass++) |
2149 | { | 2149 | { |
2150 | PCRYPTO_INFO tmpCryptoInfo = NULL; | 2150 | PCRYPTO_INFO tmpCryptoInfo = NULL; |
2151 | 2151 | ||
@@ -2164,7 +2164,7 @@ namespace VeraCrypt | |||
2164 | cryptoInfo->RequiredProgramVersion, | 2164 | cryptoInfo->RequiredProgramVersion, |
2165 | cryptoInfo->HeaderFlags | TC_HEADER_FLAG_ENCRYPTED_SYSTEM, | 2165 | cryptoInfo->HeaderFlags | TC_HEADER_FLAG_ENCRYPTED_SYSTEM, |
2166 | cryptoInfo->SectorSize, | 2166 | cryptoInfo->SectorSize, |
2167 | wipePass < PRAND_DISK_WIPE_PASSES - 1); | 2167 | wipePass < wipePassCount - 1); |
2168 | 2168 | ||
2169 | if (tmpCryptoInfo) | 2169 | if (tmpCryptoInfo) |
2170 | crypto_close (tmpCryptoInfo); | 2170 | crypto_close (tmpCryptoInfo); |
diff --git a/src/Common/BootEncryption.h b/src/Common/BootEncryption.h index 88830988..a52f286b 100644 --- a/src/Common/BootEncryption.h +++ b/src/Common/BootEncryption.h | |||
@@ -141,7 +141,7 @@ namespace VeraCrypt | |||
141 | void AbortSetup (); | 141 | void AbortSetup (); |
142 | void AbortSetupWait (); | 142 | void AbortSetupWait (); |
143 | void CallDriver (DWORD ioctl, void *input = nullptr, DWORD inputSize = 0, void *output = nullptr, DWORD outputSize = 0); | 143 | void CallDriver (DWORD ioctl, void *input = nullptr, DWORD inputSize = 0, void *output = nullptr, DWORD outputSize = 0); |
144 | int ChangePassword (Password *oldPassword, Password *newPassword, int pkcs5); | 144 | int ChangePassword (Password *oldPassword, Password *newPassword, int pkcs5, int wipePassCount); |
145 | void CheckDecoyOSWipeResult (); | 145 | void CheckDecoyOSWipeResult (); |
146 | void CheckEncryptionSetupResult (); | 146 | void CheckEncryptionSetupResult (); |
147 | void CheckRequirements (); | 147 | void CheckRequirements (); |
diff --git a/src/Common/Dlgcode.c b/src/Common/Dlgcode.c index 092c8c6f..a7c5e788 100644 --- a/src/Common/Dlgcode.c +++ b/src/Common/Dlgcode.c | |||
@@ -1565,7 +1565,7 @@ SelectAlgo (HWND hComboBox, int *algo_id) | |||
1565 | 1565 | ||
1566 | } | 1566 | } |
1567 | 1567 | ||
1568 | void PopulateWipeModeCombo (HWND hComboBox, BOOL bNA, BOOL bInPlaceEncryption) | 1568 | void PopulateWipeModeCombo (HWND hComboBox, BOOL bNA, BOOL bInPlaceEncryption, BOOL bHeaderWipe) |
1569 | { | 1569 | { |
1570 | if (bNA) | 1570 | if (bNA) |
1571 | { | 1571 | { |
@@ -1573,14 +1573,20 @@ void PopulateWipeModeCombo (HWND hComboBox, BOOL bNA, BOOL bInPlaceEncryption) | |||
1573 | } | 1573 | } |
1574 | else | 1574 | else |
1575 | { | 1575 | { |
1576 | if (bInPlaceEncryption) | 1576 | if (!bHeaderWipe) |
1577 | AddComboPairW (hComboBox, GetString ("WIPE_MODE_NONE"), TC_WIPE_NONE); | 1577 | { |
1578 | else | 1578 | if (bInPlaceEncryption) |
1579 | AddComboPairW (hComboBox, GetString ("WIPE_MODE_1_RAND"), TC_WIPE_1_RAND); | 1579 | AddComboPairW (hComboBox, GetString ("WIPE_MODE_NONE"), TC_WIPE_NONE); |
1580 | else | ||
1581 | AddComboPairW (hComboBox, GetString ("WIPE_MODE_1_RAND"), TC_WIPE_1_RAND); | ||
1582 | } | ||
1580 | 1583 | ||
1581 | AddComboPairW (hComboBox, GetString ("WIPE_MODE_3_DOD_5220"), TC_WIPE_3_DOD_5220); | 1584 | AddComboPairW (hComboBox, GetString ("WIPE_MODE_3_DOD_5220"), TC_WIPE_3_DOD_5220); |
1582 | AddComboPairW (hComboBox, GetString ("WIPE_MODE_7_DOD_5220"), TC_WIPE_7_DOD_5220); | 1585 | AddComboPairW (hComboBox, GetString ("WIPE_MODE_7_DOD_5220"), TC_WIPE_7_DOD_5220); |
1583 | AddComboPairW (hComboBox, GetString ("WIPE_MODE_35_GUTMANN"), TC_WIPE_35_GUTMANN); | 1586 | AddComboPairW (hComboBox, GetString ("WIPE_MODE_35_GUTMANN"), TC_WIPE_35_GUTMANN); |
1587 | |||
1588 | if (bHeaderWipe) | ||
1589 | AddComboPairW (hComboBox, GetString ("WIPE_MODE_256"), TC_WIPE_256); // paranoid wipe for volume header | ||
1584 | } | 1590 | } |
1585 | } | 1591 | } |
1586 | 1592 | ||
@@ -1603,6 +1609,9 @@ wchar_t *GetWipeModeName (WipeAlgorithmId modeId) | |||
1603 | case TC_WIPE_35_GUTMANN: | 1609 | case TC_WIPE_35_GUTMANN: |
1604 | return GetString ("WIPE_MODE_35_GUTMANN"); | 1610 | return GetString ("WIPE_MODE_35_GUTMANN"); |
1605 | 1611 | ||
1612 | case TC_WIPE_256: | ||
1613 | return GetString ("WIPE_MODE_256"); | ||
1614 | |||
1606 | default: | 1615 | default: |
1607 | return GetString ("NOT_APPLICABLE_OR_NOT_AVAILABLE"); | 1616 | return GetString ("NOT_APPLICABLE_OR_NOT_AVAILABLE"); |
1608 | } | 1617 | } |
diff --git a/src/Common/Dlgcode.h b/src/Common/Dlgcode.h index 11686f89..7faf6bc0 100644 --- a/src/Common/Dlgcode.h +++ b/src/Common/Dlgcode.h | |||
@@ -259,7 +259,7 @@ void HandCursor (); | |||
259 | void AddComboPair (HWND hComboBox, const char *lpszItem, int value); | 259 | void AddComboPair (HWND hComboBox, const char *lpszItem, int value); |
260 | void AddComboPairW (HWND hComboBox, const wchar_t *lpszItem, int value); | 260 | void AddComboPairW (HWND hComboBox, const wchar_t *lpszItem, int value); |
261 | void SelectAlgo ( HWND hComboBox , int *nCipher ); | 261 | void SelectAlgo ( HWND hComboBox , int *nCipher ); |
262 | void PopulateWipeModeCombo (HWND hComboBox, BOOL bNA, BOOL bInPlaceEncryption); | 262 | void PopulateWipeModeCombo (HWND hComboBox, BOOL bNA, BOOL bInPlaceEncryption, BOOL bHeaderWipe); |
263 | wchar_t *GetWipeModeName (WipeAlgorithmId modeId); | 263 | wchar_t *GetWipeModeName (WipeAlgorithmId modeId); |
264 | wchar_t *GetPathType (const char *path, BOOL bUpperCase, BOOL *bIsPartition); | 264 | wchar_t *GetPathType (const char *path, BOOL bUpperCase, BOOL *bIsPartition); |
265 | LRESULT CALLBACK CustomDlgProc ( HWND hwnd , UINT uMsg , WPARAM wParam , LPARAM lParam ); | 265 | LRESULT CALLBACK CustomDlgProc ( HWND hwnd , UINT uMsg , WPARAM wParam , LPARAM lParam ); |
diff --git a/src/Common/Password.c b/src/Common/Password.c index ca86f9c4..c23bd4fa 100644 --- a/src/Common/Password.c +++ b/src/Common/Password.c | |||
@@ -119,7 +119,7 @@ BOOL CheckPasswordLength (HWND hwndDlg, HWND hwndItem) | |||
119 | return TRUE; | 119 | return TRUE; |
120 | } | 120 | } |
121 | 121 | ||
122 | int ChangePwd (const char *lpszVolume, Password *oldPassword, Password *newPassword, int pkcs5, HWND hwndDlg) | 122 | int ChangePwd (const char *lpszVolume, Password *oldPassword, Password *newPassword, int pkcs5, int wipePassCount, HWND hwndDlg) |
123 | { | 123 | { |
124 | int nDosLinkCreated = 1, nStatus = ERR_OS_ERROR; | 124 | int nDosLinkCreated = 1, nStatus = ERR_OS_ERROR; |
125 | char szDiskFile[TC_MAX_PATH], szCFDevice[TC_MAX_PATH]; | 125 | char szDiskFile[TC_MAX_PATH], szCFDevice[TC_MAX_PATH]; |
@@ -323,7 +323,7 @@ int ChangePwd (const char *lpszVolume, Password *oldPassword, Password *newPassw | |||
323 | 323 | ||
324 | while (TRUE) | 324 | while (TRUE) |
325 | { | 325 | { |
326 | /* The header will be re-encrypted PRAND_DISK_WIPE_PASSES times to prevent adversaries from using | 326 | /* The header will be re-encrypted wipePassCount times to prevent adversaries from using |
327 | techniques such as magnetic force microscopy or magnetic force scanning tunnelling microscopy | 327 | techniques such as magnetic force microscopy or magnetic force scanning tunnelling microscopy |
328 | to recover the overwritten header. According to Peter Gutmann, data should be overwritten 22 | 328 | to recover the overwritten header. According to Peter Gutmann, data should be overwritten 22 |
329 | times (ideally, 35 times) using non-random patterns and pseudorandom data. However, as users might | 329 | times (ideally, 35 times) using non-random patterns and pseudorandom data. However, as users might |
@@ -335,7 +335,7 @@ int ChangePwd (const char *lpszVolume, Password *oldPassword, Password *newPassw | |||
335 | of the header to differ substantially and in a random manner from the versions written during the | 335 | of the header to differ substantially and in a random manner from the versions written during the |
336 | other passes. */ | 336 | other passes. */ |
337 | 337 | ||
338 | for (wipePass = 0; wipePass < PRAND_DISK_WIPE_PASSES; wipePass++) | 338 | for (wipePass = 0; wipePass < wipePassCount; wipePass++) |
339 | { | 339 | { |
340 | // Prepare new volume header | 340 | // Prepare new volume header |
341 | nStatus = CreateVolumeHeaderInMemory (FALSE, | 341 | nStatus = CreateVolumeHeaderInMemory (FALSE, |
@@ -353,7 +353,7 @@ int ChangePwd (const char *lpszVolume, Password *oldPassword, Password *newPassw | |||
353 | cryptoInfo->RequiredProgramVersion, | 353 | cryptoInfo->RequiredProgramVersion, |
354 | cryptoInfo->HeaderFlags, | 354 | cryptoInfo->HeaderFlags, |
355 | cryptoInfo->SectorSize, | 355 | cryptoInfo->SectorSize, |
356 | wipePass < PRAND_DISK_WIPE_PASSES - 1); | 356 | wipePass < wipePassCount - 1); |
357 | 357 | ||
358 | if (ci != NULL) | 358 | if (ci != NULL) |
359 | crypto_close (ci); | 359 | crypto_close (ci); |
diff --git a/src/Common/Password.h b/src/Common/Password.h index d4f1f928..887c6160 100644 --- a/src/Common/Password.h +++ b/src/Common/Password.h | |||
@@ -35,7 +35,7 @@ typedef struct | |||
35 | void VerifyPasswordAndUpdate ( HWND hwndDlg , HWND hButton , HWND hPassword , HWND hVerify , unsigned char *szPassword , char *szVerify, BOOL keyFilesEnabled ); | 35 | void VerifyPasswordAndUpdate ( HWND hwndDlg , HWND hButton , HWND hPassword , HWND hVerify , unsigned char *szPassword , char *szVerify, BOOL keyFilesEnabled ); |
36 | BOOL CheckPasswordLength (HWND hwndDlg, HWND hwndItem); | 36 | BOOL CheckPasswordLength (HWND hwndDlg, HWND hwndItem); |
37 | BOOL CheckPasswordCharEncoding (HWND hPassword, Password *ptrPw); | 37 | BOOL CheckPasswordCharEncoding (HWND hPassword, Password *ptrPw); |
38 | int ChangePwd (const char *lpszVolume, Password *oldPassword, Password *newPassword, int pkcs5, HWND hwndDlg); | 38 | int ChangePwd (const char *lpszVolume, Password *oldPassword, Password *newPassword, int pkcs5, int wipePassCount, HWND hwndDlg); |
39 | 39 | ||
40 | #endif // defined(_WIN32) && !defined(TC_WINDOWS_DRIVER) | 40 | #endif // defined(_WIN32) && !defined(TC_WINDOWS_DRIVER) |
41 | 41 | ||
diff --git a/src/Common/Wipe.c b/src/Common/Wipe.c index 265ac217..f06862e2 100644 --- a/src/Common/Wipe.c +++ b/src/Common/Wipe.c | |||
@@ -155,6 +155,9 @@ int GetWipePassCount (WipeAlgorithmId algorithm) | |||
155 | case TC_WIPE_35_GUTMANN: | 155 | case TC_WIPE_35_GUTMANN: |
156 | return 35; | 156 | return 35; |
157 | 157 | ||
158 | case TC_WIPE_256: | ||
159 | return 256; | ||
160 | |||
158 | default: | 161 | default: |
159 | TC_THROW_FATAL_EXCEPTION; | 162 | TC_THROW_FATAL_EXCEPTION; |
160 | } | 163 | } |
@@ -168,6 +171,7 @@ BOOL WipeBuffer (WipeAlgorithmId algorithm, byte randChars[TC_WIPE_RAND_CHAR_COU | |||
168 | switch (algorithm) | 171 | switch (algorithm) |
169 | { | 172 | { |
170 | case TC_WIPE_1_RAND: | 173 | case TC_WIPE_1_RAND: |
174 | case TC_WIPE_256: | ||
171 | return Wipe1PseudoRandom (pass, buffer, size); | 175 | return Wipe1PseudoRandom (pass, buffer, size); |
172 | 176 | ||
173 | case TC_WIPE_3_DOD_5220: | 177 | case TC_WIPE_3_DOD_5220: |
diff --git a/src/Common/Wipe.h b/src/Common/Wipe.h index dd331c9d..a30a9139 100644 --- a/src/Common/Wipe.h +++ b/src/Common/Wipe.h | |||
@@ -24,7 +24,8 @@ typedef enum | |||
24 | TC_WIPE_1_RAND = 100, | 24 | TC_WIPE_1_RAND = 100, |
25 | TC_WIPE_3_DOD_5220 = 300, | 25 | TC_WIPE_3_DOD_5220 = 300, |
26 | TC_WIPE_7_DOD_5220 = 700, | 26 | TC_WIPE_7_DOD_5220 = 700, |
27 | TC_WIPE_35_GUTMANN = 3500 | 27 | TC_WIPE_35_GUTMANN = 3500, |
28 | TC_WIPE_256 = 25600 | ||
28 | 29 | ||
29 | } WipeAlgorithmId; | 30 | } WipeAlgorithmId; |
30 | 31 | ||