VeraCrypt
aboutsummaryrefslogtreecommitdiff
path: root/src/Common
diff options
context:
space:
mode:
Diffstat (limited to 'src/Common')
-rw-r--r--src/Common/BootEncryption.cpp8
-rw-r--r--src/Common/BootEncryption.h2
-rw-r--r--src/Common/Dlgcode.c19
-rw-r--r--src/Common/Dlgcode.h2
-rw-r--r--src/Common/Password.c8
-rw-r--r--src/Common/Password.h2
-rw-r--r--src/Common/Wipe.c4
-rw-r--r--src/Common/Wipe.h3
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
1568void PopulateWipeModeCombo (HWND hComboBox, BOOL bNA, BOOL bInPlaceEncryption) 1568void 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 ();
259void AddComboPair (HWND hComboBox, const char *lpszItem, int value); 259void AddComboPair (HWND hComboBox, const char *lpszItem, int value);
260void AddComboPairW (HWND hComboBox, const wchar_t *lpszItem, int value); 260void AddComboPairW (HWND hComboBox, const wchar_t *lpszItem, int value);
261void SelectAlgo ( HWND hComboBox , int *nCipher ); 261void SelectAlgo ( HWND hComboBox , int *nCipher );
262void PopulateWipeModeCombo (HWND hComboBox, BOOL bNA, BOOL bInPlaceEncryption); 262void PopulateWipeModeCombo (HWND hComboBox, BOOL bNA, BOOL bInPlaceEncryption, BOOL bHeaderWipe);
263wchar_t *GetWipeModeName (WipeAlgorithmId modeId); 263wchar_t *GetWipeModeName (WipeAlgorithmId modeId);
264wchar_t *GetPathType (const char *path, BOOL bUpperCase, BOOL *bIsPartition); 264wchar_t *GetPathType (const char *path, BOOL bUpperCase, BOOL *bIsPartition);
265LRESULT CALLBACK CustomDlgProc ( HWND hwnd , UINT uMsg , WPARAM wParam , LPARAM lParam ); 265LRESULT 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
122int ChangePwd (const char *lpszVolume, Password *oldPassword, Password *newPassword, int pkcs5, HWND hwndDlg) 122int 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
35void VerifyPasswordAndUpdate ( HWND hwndDlg , HWND hButton , HWND hPassword , HWND hVerify , unsigned char *szPassword , char *szVerify, BOOL keyFilesEnabled ); 35void VerifyPasswordAndUpdate ( HWND hwndDlg , HWND hButton , HWND hPassword , HWND hVerify , unsigned char *szPassword , char *szVerify, BOOL keyFilesEnabled );
36BOOL CheckPasswordLength (HWND hwndDlg, HWND hwndItem); 36BOOL CheckPasswordLength (HWND hwndDlg, HWND hwndItem);
37BOOL CheckPasswordCharEncoding (HWND hPassword, Password *ptrPw); 37BOOL CheckPasswordCharEncoding (HWND hPassword, Password *ptrPw);
38int ChangePwd (const char *lpszVolume, Password *oldPassword, Password *newPassword, int pkcs5, HWND hwndDlg); 38int 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