VeraCrypt
aboutsummaryrefslogtreecommitdiff
path: root/src/Common
diff options
context:
space:
mode:
Diffstat (limited to 'src/Common')
-rw-r--r--src/Common/Common.rc28
-rw-r--r--src/Common/Dlgcode.c186
-rw-r--r--src/Common/Language.xml11
-rw-r--r--src/Common/Resource.h24
4 files changed, 206 insertions, 43 deletions
diff --git a/src/Common/Common.rc b/src/Common/Common.rc
index 5eff1b4d..29d35d23 100644
--- a/src/Common/Common.rc
+++ b/src/Common/Common.rc
@@ -162,84 +162,88 @@ BEGIN
CONTROL "XTS mode",IDC_XTS_MODE_ENABLED,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,221,12,95,10
EDITTEXT IDC_PLAINTEXT,8,151,159,14,ES_AUTOHSCROLL
COMBOBOX IDC_PLAINTEXT_SIZE,258,151,36,30,CBS_DROPDOWNLIST | WS_DISABLED | WS_VSCROLL | WS_TABSTOP
EDITTEXT IDC_CIPHERTEXT,8,185,159,14,ES_AUTOHSCROLL
DEFPUSHBUTTON "&Encrypt",IDC_ENCRYPT,8,229,52,14
PUSHBUTTON "&Decrypt",IDC_DECRYPT,65,229,52,14
PUSHBUTTON "&Auto-Test All",IDC_AUTO,129,229,67,14,BS_MULTILINE
PUSHBUTTON "&Reset",IDC_RESET,208,229,52,14
PUSHBUTTON "Close",IDCLOSE,266,229,52,14
GROUPBOX "Key (hexadecimal)",IDT_TEST_KEY,1,26,323,49
GROUPBOX "Plaintext (hexadecimal)",IDT_TEST_PLAINTEXT,1,140,323,33
GROUPBOX "Ciphertext (hexadecimal)",IDT_TEST_CIPHERTEXT,1,174,323,33
RTEXT "",IDC_TESTS_MESSAGE,50,213,178,10
CONTROL "",IDC_REDTICK,"REDTICK",0x0,234,214,10,8
RTEXT "Key size:",IDT_KEY,8,57,56,8
RTEXT "Plaintext size:",IDT_PLAINTEXT,190,153,63,8
LTEXT "bits",IDT_KEY_UNIT,114,57,45,8
RTEXT "Cipher:",IDT_CIPHER,38,13,68,8
LTEXT "bits",IDT_PLAINTEXT_SIZE_UNIT,298,153,22,8
GROUPBOX "XTS mode",IDT_XTS_MODE,1,75,323,65
LTEXT "Secondary key (hexadecimal)",IDT_SECONDARY_KEY,8,84,187,8
LTEXT "Data unit number (64-bit hexadecimal, data unit size is 512 bytes)",IDT_TEST_DATA_UNIT_NUMBER,8,109,308,8
RTEXT "Block number:",IDT_TEST_BLOCK_NUMBER,134,122,119,8
COMBOBOX IDC_TEST_BLOCK_NUMBER,258,119,36,126,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
END
IDD_TEXT_INFO_DIALOG_BOX_DLG DIALOGEX 0, 0, 372, 220
STYLE DS_SETFONT | DS_MODALFRAME | DS_3DLOOK | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
FONT 8, "MS Shell Dlg", 0, 0, 0x0
BEGIN
DEFPUSHBUTTON "OK",IDOK,305,200,58,14
PUSHBUTTON "&Print",IDC_PRINT,156,200,58,14
CONTROL "",IDC_INFO_BOX_TEXT,"RichEdit20A",ES_MULTILINE | ES_READONLY | ES_NUMBER | WS_BORDER | WS_VSCROLL | WS_TABSTOP,5,6,361,188
END
-IDD_KEYFILE_GENERATOR DIALOGEX 0, 0, 308, 270
+IDD_KEYFILE_GENERATOR DIALOGEX 0, 0, 308, 303
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "VeraCrypt - Keyfile Generator"
FONT 8, "MS Shell Dlg", 400, 0, 0x1
BEGIN
DEFPUSHBUTTON "Close",IDCLOSE,237,10,59,14
COMBOBOX IDC_PRF_ID,79,49,91,90,CBS_DROPDOWNLIST | WS_TABSTOP
- PUSHBUTTON "Generate and Save Keyfile...",IDC_GENERATE_AND_SAVE_KEYFILE,89,248,131,14
+ PUSHBUTTON "Generate and Save Keyfile...",IDC_GENERATE_AND_SAVE_KEYFILE,92,281,131,14
LTEXT "IMPORTANT: Move your mouse as randomly as possible within this window. The longer you move it, the better. This significantly increases the cryptographic strength of the keyfile.",IDT_KEYFILE_GENERATOR_NOTE,11,5,213,33
CONTROL "",IDC_STATIC,"Static",SS_ETCHEDHORZ,1,40,307,1,WS_EX_STATICEDGE
RTEXT "Mixing PRF:",IDT_PRF,6,51,67,10,SS_CENTERIMAGE
GROUPBOX "Current Pool Content",IDT_POOL_CONTENTS,6,70,296,170
CONTROL "",IDC_POOL_CONTENTS,"Static",SS_LEFTNOWORDWRAP | WS_GROUP,16,83,282,148,WS_EX_TRANSPARENT
CONTROL "Display pool content",IDC_DISPLAY_POOL_CONTENTS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,191,51,111,10
+ LTEXT "Number of keyfiles:",IDT_NUMBER_KEYFILES,9,247,75,8
+ EDITTEXT IDC_NUMBER_KEYFILES,92,244,51,14,ES_RIGHT | ES_AUTOHSCROLL | ES_NUMBER
+ LTEXT "Keyfiles base name:",IDT_KEYFILES_BASE_NAME,9,266,75,8
+ EDITTEXT IDC_KEYFILES_BASE_NAME,92,263,131,14,ES_AUTOHSCROLL
END
IDD_MULTI_CHOICE_DLG DIALOGEX 0, 0, 167, 322
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
FONT 8, "MS Shell Dlg", 0, 0, 0x0
BEGIN
PUSHBUTTON "",IDC_CHOICE10,7,292,153,24,BS_CENTER | BS_MULTILINE,WS_EX_STATICEDGE
PUSHBUTTON "",IDC_CHOICE9,7,268,153,24,BS_CENTER | BS_MULTILINE,WS_EX_STATICEDGE
PUSHBUTTON "",IDC_CHOICE8,7,244,153,24,BS_CENTER | BS_MULTILINE,WS_EX_STATICEDGE
PUSHBUTTON "",IDC_CHOICE7,7,220,153,24,BS_CENTER | BS_MULTILINE,WS_EX_STATICEDGE
PUSHBUTTON "",IDC_CHOICE6,7,196,153,24,BS_CENTER | BS_MULTILINE,WS_EX_STATICEDGE
PUSHBUTTON "",IDC_CHOICE5,7,172,153,24,BS_CENTER | BS_MULTILINE,WS_EX_STATICEDGE
PUSHBUTTON "",IDC_CHOICE4,7,148,153,24,BS_CENTER | BS_MULTILINE,WS_EX_STATICEDGE
PUSHBUTTON "",IDC_CHOICE3,7,124,153,24,BS_CENTER | BS_MULTILINE,WS_EX_STATICEDGE
PUSHBUTTON "",IDC_CHOICE2,7,100,153,24,BS_CENTER | BS_MULTILINE,WS_EX_STATICEDGE
PUSHBUTTON "",IDC_CHOICE1,7,76,153,24,BS_CENTER | BS_MULTILINE,WS_EX_STATICEDGE
LTEXT "",IDC_MULTI_CHOICE_MSG,7,7,153,56,0,WS_EX_TRANSPARENT
CONTROL "",IDC_MC_DLG_HR2,"Static",SS_ETCHEDHORZ,0,69,168,1,WS_EX_STATICEDGE
CONTROL "",IDC_MC_DLG_HR1,"Static",SS_ETCHEDHORZ,0,1,168,1,WS_EX_STATICEDGE
END
IDD_AUXILIARY_DLG DIALOGEX 0, 0, 426, 296
STYLE DS_SETFONT | DS_FIXEDSYS | DS_NOFAILCREATE | WS_POPUP
EXSTYLE WS_EX_TRANSPARENT
FONT 8, "MS Shell Dlg", 400, 0, 0x1
BEGIN
LTEXT "",IDC_ASPECT_RATIO_CALIBRATION_BOX,3,2,282,282,WS_DISABLED
END
IDD_TOKEN_PASSWORD DIALOGEX 0, 0, 281, 47
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Security token password/PIN required"
FONT 8, "MS Shell Dlg", 400, 0, 0x1
BEGIN
EDITTEXT IDC_TOKEN_PASSWORD,8,20,199,14,ES_PASSWORD | ES_AUTOHSCROLL
@@ -341,71 +345,71 @@ BEGIN
LEFTMARGIN, 6
RIGHTMARGIN, 202
TOPMARGIN, 7
BOTTOMMARGIN, 176
END
IDD_BENCHMARK_DLG, DIALOG
BEGIN
LEFTMARGIN, 7
RIGHTMARGIN, 323
TOPMARGIN, 7
BOTTOMMARGIN, 216
END
IDD_CIPHER_TEST_DLG, DIALOG
BEGIN
LEFTMARGIN, 7
RIGHTMARGIN, 319
TOPMARGIN, 7
BOTTOMMARGIN, 242
END
IDD_TEXT_INFO_DIALOG_BOX_DLG, DIALOG
BEGIN
LEFTMARGIN, 7
RIGHTMARGIN, 365
TOPMARGIN, 7
BOTTOMMARGIN, 213
END
IDD_KEYFILE_GENERATOR, DIALOG
BEGIN
LEFTMARGIN, 7
RIGHTMARGIN, 299
TOPMARGIN, 7
- BOTTOMMARGIN, 266
+ BOTTOMMARGIN, 299
END
IDD_MULTI_CHOICE_DLG, DIALOG
BEGIN
LEFTMARGIN, 7
RIGHTMARGIN, 160
TOPMARGIN, 7
BOTTOMMARGIN, 316
END
IDD_AUXILIARY_DLG, DIALOG
BEGIN
LEFTMARGIN, 7
RIGHTMARGIN, 419
TOPMARGIN, 7
BOTTOMMARGIN, 289
END
IDD_TOKEN_PASSWORD, DIALOG
BEGIN
LEFTMARGIN, 7
RIGHTMARGIN, 274
TOPMARGIN, 7
BOTTOMMARGIN, 40
END
IDD_TOKEN_KEYFILES, DIALOG
BEGIN
LEFTMARGIN, 7
RIGHTMARGIN, 330
TOPMARGIN, 7
BOTTOMMARGIN, 178
END
IDD_NEW_TOKEN_KEYFILE, DIALOG
@@ -418,97 +422,97 @@ BEGIN
IDD_RANDOM_POOL_ENRICHMENT, DIALOG
BEGIN
LEFTMARGIN, 7
RIGHTMARGIN, 301
TOPMARGIN, 7
BOTTOMMARGIN, 267
END
IDD_STATIC_MODELESS_WAIT_DLG, DIALOG
BEGIN
LEFTMARGIN, 7
RIGHTMARGIN, 285
TOPMARGIN, 7
BOTTOMMARGIN, 35
END
END
#endif // APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// BIN
//
IDR_BOOT_SECTOR BIN "..\\Boot\\Windows\\Release\\BootSector.bin"
IDR_BOOT_SECTOR_AES BIN "..\\Boot\\Windows\\Release_AES\\BootSector.bin"
IDR_BOOT_SECTOR_SERPENT BIN "..\\Boot\\Windows\\Release_Serpent\\BootSector.bin"
IDR_BOOT_SECTOR_TWOFISH BIN "..\\Boot\\Windows\\Release_Twofish\\BootSector.bin"
IDR_BOOT_LOADER_DECOMPRESSOR BIN "..\\Boot\\Windows\\Release\\Decompressor.com"
IDR_BOOT_LOADER BIN "..\\Boot\\Windows\\Release\\BootLoader.com.gz"
IDR_BOOT_LOADER_AES BIN "..\\Boot\\Windows\\Release_AES\\BootLoader.com.gz"
IDR_BOOT_LOADER_SERPENT BIN "..\\Boot\\Windows\\Release_Serpent\\BootLoader.com.gz"
IDR_BOOT_LOADER_TWOFISH BIN "..\\Boot\\Windows\\Release_Twofish\\BootLoader.com.gz"
-IDR_BOOT_SECTOR_SHA2 BIN "..\\Boot\\Windows\\Release_SHA2\\BootSector.bin"
-IDR_BOOT_SECTOR_AES_SHA2 BIN "..\\Boot\\Windows\\Release_AES_SHA2\\BootSector.bin"
+IDR_BOOT_SECTOR_SHA2 BIN "..\\Boot\\Windows\\Release_SHA2\\BootSector.bin"
+IDR_BOOT_SECTOR_AES_SHA2 BIN "..\\Boot\\Windows\\Release_AES_SHA2\\BootSector.bin"
IDR_BOOT_SECTOR_SERPENT_SHA2 BIN "..\\Boot\\Windows\\Release_Serpent_SHA2\\BootSector.bin"
IDR_BOOT_SECTOR_TWOFISH_SHA2 BIN "..\\Boot\\Windows\\Release_Twofish_SHA2\\BootSector.bin"
-IDR_BOOT_LOADER_SHA2 BIN "..\\Boot\\Windows\\Release_SHA2\\BootLoader.com.gz"
-IDR_BOOT_LOADER_AES_SHA2 BIN "..\\Boot\\Windows\\Release_AES_SHA2\\BootLoader.com.gz"
+IDR_BOOT_LOADER_SHA2 BIN "..\\Boot\\Windows\\Release_SHA2\\BootLoader.com.gz"
+IDR_BOOT_LOADER_AES_SHA2 BIN "..\\Boot\\Windows\\Release_AES_SHA2\\BootLoader.com.gz"
IDR_BOOT_LOADER_SERPENT_SHA2 BIN "..\\Boot\\Windows\\Release_Serpent_SHA2\\BootLoader.com.gz"
IDR_BOOT_LOADER_TWOFISH_SHA2 BIN "..\\Boot\\Windows\\Release_Twofish_SHA2\\BootLoader.com.gz"
IDR_RESCUE_BOOT_SECTOR BIN "..\\Boot\\Windows\\Rescue\\BootSector.bin"
IDR_RESCUE_BOOT_SECTOR_AES BIN "..\\Boot\\Windows\\Rescue_AES\\BootSector.bin"
IDR_RESCUE_BOOT_SECTOR_SERPENT BIN "..\\Boot\\Windows\\Rescue_Serpent\\BootSector.bin"
IDR_RESCUE_BOOT_SECTOR_TWOFISH BIN "..\\Boot\\Windows\\Rescue_Twofish\\BootSector.bin"
IDR_RESCUE_LOADER BIN "..\\Boot\\Windows\\Rescue\\BootLoader.com.gz"
IDR_RESCUE_LOADER_AES BIN "..\\Boot\\Windows\\Rescue_AES\\BootLoader.com.gz"
IDR_RESCUE_LOADER_SERPENT BIN "..\\Boot\\Windows\\Rescue_Serpent\\BootLoader.com.gz"
IDR_RESCUE_LOADER_TWOFISH BIN "..\\Boot\\Windows\\Rescue_Twofish\\BootLoader.com.gz"
-IDR_RESCUE_BOOT_SECTOR_SHA2 BIN "..\\Boot\\Windows\\Rescue_SHA2\\BootSector.bin"
+IDR_RESCUE_BOOT_SECTOR_SHA2 BIN "..\\Boot\\Windows\\Rescue_SHA2\\BootSector.bin"
IDR_RESCUE_BOOT_SECTOR_AES_SHA2 BIN "..\\Boot\\Windows\\Rescue_AES_SHA2\\BootSector.bin"
IDR_RESCUE_BOOT_SECTOR_SERPENT_SHA2 BIN "..\\Boot\\Windows\\Rescue_Serpent_SHA2\\BootSector.bin"
IDR_RESCUE_BOOT_SECTOR_TWOFISH_SHA2 BIN "..\\Boot\\Windows\\Rescue_Twofish_SHA2\\BootSector.bin"
-IDR_RESCUE_LOADER_SHA2 BIN "..\\Boot\\Windows\\Rescue_SHA2\\BootLoader.com.gz"
-IDR_RESCUE_LOADER_AES_SHA2 BIN "..\\Boot\\Windows\\Rescue_AES_SHA2\\BootLoader.com.gz"
-IDR_RESCUE_LOADER_SERPENT_SHA2 BIN "..\\Boot\\Windows\\Rescue_Serpent_SHA2\\BootLoader.com.gz"
-IDR_RESCUE_LOADER_TWOFISH_SHA2 BIN "..\\Boot\\Windows\\Rescue_Twofish_SHA2\\BootLoader.com.gz"
+IDR_RESCUE_LOADER_SHA2 BIN "..\\Boot\\Windows\\Rescue_SHA2\\BootLoader.com.gz"
+IDR_RESCUE_LOADER_AES_SHA2 BIN "..\\Boot\\Windows\\Rescue_AES_SHA2\\BootLoader.com.gz"
+IDR_RESCUE_LOADER_SERPENT_SHA2 BIN "..\\Boot\\Windows\\Rescue_Serpent_SHA2\\BootLoader.com.gz"
+IDR_RESCUE_LOADER_TWOFISH_SHA2 BIN "..\\Boot\\Windows\\Rescue_Twofish_SHA2\\BootLoader.com.gz"
/////////////////////////////////////////////////////////////////////////////
//
// XML
//
IDR_LANGUAGE XML "..\\Common\\Language.xml"
/////////////////////////////////////////////////////////////////////////////
//
// HEADER
//
IDR_COMMON_RSRC_HEADER HEADER "..\\Common\\Resource.h"
/////////////////////////////////////////////////////////////////////////////
//
// TEXT
//
IDR_LICENSE TEXT "..\\Resources\\Texts\\License.rtf"
#ifdef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// TEXTINCLUDE
//
1 TEXTINCLUDE
BEGIN
"resource.h\0"
END
2 TEXTINCLUDE
BEGIN
diff --git a/src/Common/Dlgcode.c b/src/Common/Dlgcode.c
index e6686c2c..96938962 100644
--- a/src/Common/Dlgcode.c
+++ b/src/Common/Dlgcode.c
@@ -318,70 +318,121 @@ void LowerCaseCopy (char *lpszDest, const char *lpszSource)
while (--i >= 0)
{
lpszDest[i] = (char) tolower (lpszSource[i]);
}
}
void UpperCaseCopy (char *lpszDest, size_t cbDest, const char *lpszSource)
{
if (lpszDest && cbDest)
{
int i = strlen (lpszSource);
if (i >= (int) cbDest)
i = cbDest - 1;
lpszDest[i] = 0;
while (--i >= 0)
{
lpszDest[i] = (char) toupper (lpszSource[i]);
}
}
}
std::string ToUpperCase (const std::string &str)
{
string u;
foreach (char c, str)
{
u += (char) toupper (c);
}
return u;
}
+size_t TrimWhiteSpace(char *str)
+{
+ char *end, *ptr = str;
+ size_t out_size;
+
+ if(!str || *str == 0)
+ return 0;
+
+ // Trim leading space
+ while(isspace(*ptr)) ptr++;
+
+ if(*ptr == 0) // All spaces?
+ {
+ *str = 0;
+ return 0;
+ }
+
+ // Trim trailing space
+ end = str + strlen(str) - 1;
+ while(end > ptr && isspace(*end)) end--;
+ end++;
+
+ // Set output size to trimmed string length
+ out_size = (end - ptr);
+
+ // Copy trimmed string and add null terminator
+ memmove(str, ptr, out_size);
+ str[out_size] = 0;
+
+ return out_size;
+}
+
+// check the validity of a file name
+BOOL IsValidFileName(const char* str)
+{
+ static char invalidChars[9] = {'<', '>', ':', '"', '/', '\\', '|', '?', '*'};
+ char c;
+ int i;
+ BOOL bNotDotOnly = FALSE;
+ while ((c = *str))
+ {
+ if (c != '.')
+ bNotDotOnly = TRUE;
+ for (i= 0; i < sizeof(invalidChars); i++)
+ if (c == invalidChars[i])
+ return FALSE;
+ str++;
+ }
+
+ return bNotDotOnly;
+}
BOOL IsVolumeDeviceHosted (const char *lpszDiskFile)
{
return strstr (lpszDiskFile, "\\Device\\") == lpszDiskFile
|| strstr (lpszDiskFile, "\\DEVICE\\") == lpszDiskFile;
}
void CreateFullVolumePath (char *lpszDiskFile, size_t cbDiskFile, const char *lpszFileName, BOOL * bDevice)
{
UpperCaseCopy (lpszDiskFile, cbDiskFile, lpszFileName);
*bDevice = FALSE;
if (memcmp (lpszDiskFile, "\\DEVICE", sizeof (char) * 7) == 0)
{
*bDevice = TRUE;
}
StringCbCopyA (lpszDiskFile, cbDiskFile, lpszFileName);
#if _DEBUG
OutputDebugString ("CreateFullVolumePath: ");
OutputDebugString (lpszDiskFile);
OutputDebugString ("\n");
#endif
}
int FakeDosNameForDevice (const char *lpszDiskFile , char *lpszDosDevice , size_t cbDosDevice, char *lpszCFDevice , size_t cbCFDevice, BOOL bNameOnly)
{
BOOL bDosLinkCreated = TRUE;
StringCbPrintfA (lpszDosDevice, cbDosDevice,"veracrypt%lu", GetCurrentProcessId ());
if (bNameOnly == FALSE)
@@ -4913,170 +4964,267 @@ BOOL CALLBACK KeyfileGeneratorDlgProc (HWND hwndDlg, UINT msg, WPARAM wParam, LP
static BOOL bRandPoolDispAscii = FALSE;
int hash_algo = RandGetHashFunction();
int hid;
switch (msg)
{
case WM_INITDIALOG:
{
HWND hComboBox = GetDlgItem (hwndDlg, IDC_PRF_ID);
VirtualLock (randPool, sizeof(randPool));
VirtualLock (lastRandPool, sizeof(lastRandPool));
VirtualLock (outputDispBuffer, sizeof(outputDispBuffer));
LocalizeDialog (hwndDlg, "IDD_KEYFILE_GENERATOR");
SendMessage (hComboBox, CB_RESETCONTENT, 0, 0);
for (hid = FIRST_PRF_ID; hid <= LAST_PRF_ID; hid++)
{
if (!HashIsDeprecated (hid))
AddComboPair (hComboBox, HashGetName(hid), hid);
}
SelectAlgo (hComboBox, &hash_algo);
SetCheckBox (hwndDlg, IDC_DISPLAY_POOL_CONTENTS, bDisplayPoolContents);
#ifndef VOLFORMAT
if (Randinit ())
{
Error ("INIT_RAND");
EndDialog (hwndDlg, IDCLOSE);
}
#endif
SetTimer (hwndDlg, 0xfd, RANDPOOL_DISPLAY_REFRESH_INTERVAL, NULL);
SendMessage (GetDlgItem (hwndDlg, IDC_POOL_CONTENTS), WM_SETFONT, (WPARAM) hFixedDigitFont, (LPARAM) TRUE);
+ SendMessage (GetDlgItem (hwndDlg, IDC_NUMBER_KEYFILES), EM_SETLIMITTEXT, (WPARAM) (TC_MAX_PATH - 1), 0);
+ SetWindowText(GetDlgItem (hwndDlg, IDC_NUMBER_KEYFILES), "1");
+ // set the maximum length of the keyfile base name to (TC_MAX_PATH - 1)
+ SendMessage (GetDlgItem (hwndDlg, IDC_KEYFILES_BASE_NAME), EM_SETLIMITTEXT, (WPARAM) (TC_MAX_PATH - 1), 0);
return 1;
}
case WM_TIMER:
{
char tmp[4];
unsigned char tmpByte;
int col, row;
if (bDisplayPoolContents)
{
RandpeekBytes (randPool, sizeof (randPool));
if (memcmp (lastRandPool, randPool, sizeof(lastRandPool)) != 0)
{
outputDispBuffer[0] = 0;
for (row = 0; row < RANDPOOL_DISPLAY_ROWS; row++)
{
for (col = 0; col < RANDPOOL_DISPLAY_COLUMNS; col++)
{
tmpByte = randPool[row * RANDPOOL_DISPLAY_COLUMNS + col];
StringCbPrintfA (tmp, sizeof(tmp), bRandPoolDispAscii ? ((tmpByte >= 32 && tmpByte < 255 && tmpByte != '&') ? " %c " : " . ") : "%02X ", tmpByte);
StringCbCatA (outputDispBuffer, sizeof(outputDispBuffer), tmp);
}
StringCbCatA (outputDispBuffer, sizeof(outputDispBuffer), "\n");
}
SetWindowText (GetDlgItem (hwndDlg, IDC_POOL_CONTENTS), outputDispBuffer);
memcpy (lastRandPool, randPool, sizeof(lastRandPool));
}
}
return 1;
}
case WM_COMMAND:
if (lw == IDCLOSE || lw == IDCANCEL)
{
goto exit;
}
if (lw == IDC_PRF_ID && hw == CBN_SELCHANGE)
{
hid = (int) SendMessage (GetDlgItem (hwndDlg, IDC_PRF_ID), CB_GETCURSEL, 0, 0);
hash_algo = (int) SendMessage (GetDlgItem (hwndDlg, IDC_PRF_ID), CB_GETITEMDATA, hid, 0);
RandSetHashFunction (hash_algo);
return 1;
}
if (lw == IDC_DISPLAY_POOL_CONTENTS)
{
if (!(bDisplayPoolContents = GetCheckBox (hwndDlg, IDC_DISPLAY_POOL_CONTENTS)))
{
char tmp[RNG_POOL_SIZE+1];
memset (tmp, ' ', sizeof(tmp));
tmp [RNG_POOL_SIZE] = 0;
SetWindowText (GetDlgItem (hwndDlg, IDC_POOL_CONTENTS), tmp);
}
return 1;
}
if (lw == IDC_GENERATE_AND_SAVE_KEYFILE)
{
- char szFileName [TC_MAX_PATH];
+ char szNumberKeyFiles[TC_MAX_PATH] = {0};
+ char szFileBaseName[TC_MAX_PATH];
+ char szDirName[TC_MAX_PATH];
+ char szFileName [3*TC_MAX_PATH];
unsigned char keyfile [MAX_PASSWORD];
- int fhKeyfile = -1;
+ int fhKeyfile = -1, status;
+ long keyfilesCount = 0, i;
+ char* fileExtensionPtr = 0;
+ char szSuffix[32];
+ BOOL bBaseNameValid = FALSE;
- /* Select filename */
- if (!BrowseFiles (hwndDlg, "OPEN_TITLE", szFileName, bHistory, TRUE, NULL))
+ if (!GetWindowText(GetDlgItem (hwndDlg, IDC_NUMBER_KEYFILES), szNumberKeyFiles, TC_MAX_PATH))
+ szNumberKeyFiles[0] = 0;
+
+ keyfilesCount = strtoul(szNumberKeyFiles, NULL, 0);
+ if (keyfilesCount <= 0 || keyfilesCount == LONG_MAX)
+ {
+ Warning("KEYFILE_INCORRECT_NUMBER");
+ SendMessage(hwndDlg, WM_NEXTDLGCTL, (WPARAM) GetDlgItem (hwndDlg, IDC_NUMBER_KEYFILES), TRUE);
+ return 1;
+ }
+
+ if (!GetWindowText(GetDlgItem (hwndDlg, IDC_KEYFILES_BASE_NAME), szFileBaseName, TC_MAX_PATH))
+ szFileBaseName[0] = 0;
+
+ // Trim trailing space
+ if (TrimWhiteSpace(szFileBaseName) == 0)
+ {
+ Warning("KEYFILE_EMPTY_BASE_NAME");
+ SendMessage(hwndDlg, WM_NEXTDLGCTL, (WPARAM) GetDlgItem (hwndDlg, IDC_KEYFILES_BASE_NAME), TRUE);
return 1;
+ }
- /* Conceive the file */
- if ((fhKeyfile = _open(szFileName, _O_CREAT|_O_TRUNC|_O_WRONLY|_O_BINARY, _S_IREAD|_S_IWRITE)) == -1)
+ if (!IsValidFileName(szFileBaseName))
{
- handleWin32Error (hwndDlg);
+ Warning("KEYFILE_INVALID_BASE_NAME");
+ SendMessage(hwndDlg, WM_NEXTDLGCTL, (WPARAM) GetDlgItem (hwndDlg, IDC_KEYFILES_BASE_NAME), TRUE);
return 1;
}
- /* Generate the keyfile */
+ fileExtensionPtr = strrchr(szFileBaseName, '.');
+
+ /* Select directory */
+ if (!BrowseDirectories (hwndDlg, "SELECT_KEYFILE_GENERATION_DIRECTORY", szDirName))
+ return 1;
+
+ if (szDirName[strlen(szDirName) - 1] != '\\' && szDirName[strlen(szDirName) - 1] != '/')
+ StringCbCat(szDirName, sizeof(szDirName), "\\");
+
WaitCursor();
- if (!RandgetBytes (keyfile, sizeof(keyfile), TRUE))
+
+ for (i= 0; i < keyfilesCount; i++)
{
+ StringCbCopy(szFileName, sizeof(szFileName), szDirName);
+
+ if (i > 0)
+ {
+ StringCbPrintfA(szSuffix, sizeof(szSuffix), "_%d", i);
+ // Append the counter to the name
+ if (fileExtensionPtr)
+ {
+ StringCbCatN(szFileName, sizeof(szFileName), szFileBaseName, (size_t) (fileExtensionPtr - szFileBaseName));
+ StringCbCat(szFileName, sizeof(szFileName), szSuffix);
+ StringCbCat(szFileName, sizeof(szFileName), fileExtensionPtr);
+ }
+ else
+ {
+ StringCbCat(szFileName, sizeof(szFileName), szFileBaseName);
+ StringCbCat(szFileName, sizeof(szFileName), szSuffix);
+ }
+ }
+ else
+ StringCbCat(szFileName, sizeof(szFileName), szFileBaseName);
+
+ // check if the file exists
+ if ((fhKeyfile = _open(szFileName, _O_RDONLY|_O_BINARY, _S_IREAD|_S_IWRITE)) != -1)
+ {
+ WCHAR s[4*TC_MAX_PATH] = {0};
+ WCHAR wszFileName[3*TC_MAX_PATH] = {0};
+
+ _close (fhKeyfile);
+
+ MultiByteToWideChar(CP_ACP, 0, szFileName, -1, wszFileName, sizeof(wszFileName) / sizeof(WCHAR));
+
+ StringCbPrintfW (s, sizeof(s), GetString ("KEYFILE_ALREADY_EXISTS"), wszFileName);
+ status = AskWarnNoYesString (s);
+ if (status == IDNO)
+ {
+ NormalCursor();
+ return 1;
+ }
+ }
+
+ /* Conceive the file */
+ if ((fhKeyfile = _open(szFileName, _O_CREAT|_O_TRUNC|_O_WRONLY|_O_BINARY, _S_IREAD|_S_IWRITE)) == -1)
+ {
+ NormalCursor();
+ handleWin32Error (hwndDlg);
+ return 1;
+ }
+
+ /* Generate the keyfile */
+ if (!RandgetBytes (keyfile, sizeof(keyfile), TRUE))
+ {
+ _close (fhKeyfile);
+ DeleteFile (szFileName);
+ NormalCursor();
+ return 1;
+ }
+
+ /* Write the keyfile */
+ status = _write (fhKeyfile, keyfile, sizeof(keyfile));
+ burn (keyfile, sizeof(keyfile));
_close (fhKeyfile);
- DeleteFile (szFileName);
- NormalCursor();
- return 1;
+
+ if (status == -1)
+ {
+ NormalCursor();
+ handleWin32Error (hwndDlg);
+ return 1;
+ }
}
+
NormalCursor();
- /* Write the keyfile */
- if (_write (fhKeyfile, keyfile, sizeof(keyfile)) == -1)
- handleWin32Error (hwndDlg);
- else
- Info("KEYFILE_CREATED");
+ Info("KEYFILE_CREATED");
- burn (keyfile, sizeof(keyfile));
- _close (fhKeyfile);
return 1;
}
return 0;
case WM_CLOSE:
{
char tmp[RNG_POOL_SIZE+1];
exit:
WaitCursor();
KillTimer (hwndDlg, 0xfd);
#ifndef VOLFORMAT
RandStop (FALSE);
#endif
/* Cleanup */
burn (randPool, sizeof(randPool));
burn (lastRandPool, sizeof(lastRandPool));
burn (outputDispBuffer, sizeof(outputDispBuffer));
// Attempt to wipe the pool contents in the GUI text area
memset (tmp, ' ', RNG_POOL_SIZE);
tmp [RNG_POOL_SIZE] = 0;
SetWindowText (GetDlgItem (hwndDlg, IDC_POOL_CONTENTS), tmp);
EndDialog (hwndDlg, IDCLOSE);
NormalCursor ();
return 1;
}
}
return 0;
}
diff --git a/src/Common/Language.xml b/src/Common/Language.xml
index fb18bf45..1a98b79c 100644
--- a/src/Common/Language.xml
+++ b/src/Common/Language.xml
@@ -299,70 +299,72 @@
<control lang="en" key="IDC_MOUNT_REMOVABLE">Mount volume as removable &amp;medium</control>
<control lang="en" key="IDC_MOUNT_SYSENC_PART_WITHOUT_PBA">Mount partition &amp;using system encryption without pre-boot authentication</control>
<control lang="en" key="IDC_PARALLELIZATION_LABEL_LINK">Parallelization:</control>
<control lang="en" key="IDC_PERFORM_BENCHMARK">Benchmark</control>
<control lang="en" key="IDC_PRINT">&amp;Print</control>
<control lang="en" key="IDC_PROTECT_HIDDEN_VOL">&amp;Protect hidden volume against damage caused by writing to outer volume</control>
<control lang="en" key="IDC_RESET">&amp;Reset</control>
<control lang="en" key="IDC_SHOW_PASSWORD_MO">&amp;Display password</control>
<control lang="en" key="IDC_TOKEN_FILES_ADD">Add &amp;Token Files...</control>
<control lang="en" key="IDC_USE_EMBEDDED_HEADER_BAK">Use backup header embedded in &amp;volume if available</control>
<control lang="en" key="IDC_XTS_MODE_ENABLED">XTS mode</control>
<control lang="en" key="IDD_ABOUT_DLG">About VeraCrypt</control>
<control lang="en" key="IDD_BENCHMARK_DLG">VeraCrypt - Encryption Algorithm Benchmark</control>
<control lang="en" key="IDD_CIPHER_TEST_DLG">VeraCrypt - Test Vectors</control>
<control lang="en" key="IDD_COMMANDHELP_DLG">Command Line Help</control>
<control lang="en" key="IDD_KEYFILES">VeraCrypt - Keyfiles</control>
<control lang="en" key="IDD_KEYFILE_GENERATOR">VeraCrypt - Keyfile Generator</control>
<control lang="en" key="IDD_LANGUAGE">VeraCrypt - Language</control>
<control lang="en" key="IDD_MOUNT_OPTIONS">VeraCrypt - Mount Options</control>
<control lang="en" key="IDD_NEW_TOKEN_KEYFILE">New Security Token Keyfile Properties</control>
<control lang="en" key="IDD_RANDOM_POOL_ENRICHMENT">VeraCrypt - Random Pool Enrichment</control>
<control lang="en" key="IDD_RAWDEVICES_DLG">Select a Partition or Device</control>
<control lang="en" key="IDD_STATIC_MODELESS_WAIT_DLG">VeraCrypt</control>
<control lang="en" key="IDD_TOKEN_KEYFILES">Security Token Keyfiles</control>
<control lang="en" key="IDD_TOKEN_PASSWORD">Security token password/PIN required</control>
<control lang="en" key="IDT_ACTIVE_LANG_PACK">Active language pack</control>
<control lang="en" key="IDT_BOX_BENCHMARK_INFO">Speed is affected by CPU load and storage device characteristics.\n\nThese tests take place in RAM.</control>
<control lang="en" key="IDT_BUFFER_SIZE">Buffer Size:</control>
<control lang="en" key="IDT_CIPHER">Cipher:</control>
<control lang="en" key="IDT_HIDDEN_PROT_PASSWD">P&amp;assword to hidden volume:\n(if empty, cache is used)</control>
<control lang="en" key="IDT_HIDDEN_VOL_PROTECTION">Hidden Volume Protection</control>
<control lang="en" key="IDT_KEY">Key size:</control>
<control lang="en" key="IDT_KEYFILE_GENERATOR_NOTE">IMPORTANT: Move your mouse as randomly as possible within this window. The longer you move it, the better. This significantly increases the cryptographic strength of the keyfile.</control>
<control lang="en" key="IDT_KEYFILE_WARNING">WARNING: If you lose a keyfile or if any bit of its first 1024 kilobytes changes, it will be impossible to mount volumes that use the keyfile!</control>
<control lang="en" key="IDT_KEY_UNIT">bits</control>
+ <control lang="en" key="IDT_NUMBER_KEYFILES">Number of keyfiles:</control>
+ <control lang="en" key="IDT_KEYFILES_BASE_NAME">Keyfiles base name:</control>
<control lang="en" key="IDT_LANGPACK_AUTHORS">Translated by:</control>
<control lang="en" key="IDT_PLAINTEXT">Plaintext size:</control>
<control lang="en" key="IDT_PLAINTEXT_SIZE_UNIT">bits</control>
<control lang="en" key="IDT_POOL_CONTENTS">Current Pool Content</control>
<control lang="en" key="IDT_PRF">Mixing PRF:</control>
<control lang="en" key="IDT_RANDOM_POOL_ENRICHMENT_NOTE">IMPORTANT: Move your mouse as randomly as possible within this window. The longer you move it, the better. This significantly increases security. When done, click 'Continue'.</control>
<control lang="en" key="IDT_SECONDARY_KEY">Secondary key (hexadecimal)</control>
<control lang="en" key="IDT_SECURITY_TOKEN">Security token:</control>
<control lang="en" key="IDT_SORT_METHOD">Sort Method:</control>
<control lang="en" key="IDT_STATIC_MODELESS_WAIT_DLG_INFO">Please wait. This process may take a long time...</control>
<control lang="en" key="IDT_TEST_BLOCK_NUMBER">Block number:</control>
<control lang="en" key="IDT_TEST_CIPHERTEXT">Ciphertext (hexadecimal)</control>
<control lang="en" key="IDT_TEST_DATA_UNIT_NUMBER">Data unit number (64-bit hexadecimal, data unit size is 512 bytes)</control>
<control lang="en" key="IDT_TEST_KEY">Key (hexadecimal)</control>
<control lang="en" key="IDT_TEST_PLAINTEXT">Plaintext (hexadecimal)</control>
<control lang="en" key="IDT_TOKEN_KEYFILE_NAME">Keyfile name:</control>
<control lang="en" key="IDT_XTS_MODE">XTS mode</control>
<control lang="en" key="MENU_SYSTEM_ENCRYPTION">S&amp;ystem</control>
<control lang="en" key="MENU_VOLUMES">&amp;Volumes</control>
<control lang="en" key="MENU_FAVORITES">Favor&amp;ites</control>
<control lang="en" key="MENU_TOOLS">T&amp;ools</control>
<control lang="en" key="MENU_SETTINGS">Settin&amp;gs</control>
<control lang="en" key="MENU_HELP">&amp;Help</control>
<control lang="en" key="MENU_WEBSITE"> Home&amp;page </control>
<!-- Strings -->
<string lang="en" key="ABOUTBOX">&amp;About...</string>
<string lang="en" key="ACCESSMODEFAIL">The read-only attribute on your old volume could not be changed. Please check the file access permissions.</string>
<string lang="en" key="ACCESS_DENIED">Error: Access denied.\n\nThe partition you are trying to access is either 0 sectors long, or it is the boot device.</string>
<string lang="en" key="ADMINISTRATOR">Administrator</string>
<string lang="en" key="ADMIN_PRIVILEGES_DRIVER">In order to load the VeraCrypt driver, you need to be logged into an account with administrator privileges.</string>
<string lang="en" key="ADMIN_PRIVILEGES_WARN_DEVICES">Please note that in order to encrypt/format a partition/device you need to be logged into an account with administrator privileges.\n\nThis does not apply to file-hosted volumes.</string>
<string lang="en" key="ADMIN_PRIVILEGES_WARN_HIDVOL">In order to create a hidden volume you need to be logged into an account with administrator privileges.\n\nContinue?</string>
<string lang="en" key="ADMIN_PRIVILEGES_WARN_NTFS">Please note that in order to format the volume as NTFS you need to be logged into an account with administrator privileges.\n\nWithout administrator privileges, you can format the volume as FAT.</string>
<string lang="en" key="AES_HELP">FIPS-approved cipher (Rijndael, published in 1998) that may be used by U.S. government departments and agencies to protect classified information up to the Top Secret level. 256-bit key, 128-bit block, 14 rounds (AES-256). Mode of operation is XTS.</string>
<string lang="en" key="ALREADY_MOUNTED">Volume is already mounted.</string>
@@ -568,70 +570,71 @@
<string lang="en" key="KEYFILE_CHANGED">Keyfile(s) successfully added/removed.</string>
<string lang="en" key="KEYFILE_EXPORTED">Keyfile exported.</string>
<string lang="en" key="PKCS5_PRF_CHANGED">Header key derivation algorithm successfully set.</string>
<string lang="en" key="NONSYS_INPLACE_ENC_RESUME_PASSWORD_PAGE_HELP">Please enter the password and/or keyfile(s) for the non-system volume where you want to resume the process of in-place encryption.\n\n\nRemark: After you click Next, VeraCrypt will attempt to find all non-system volumes where the process of encryption has been interrupted and where the VeraCrypt volume header can be decrypted using the supplied password and/or keyfile(s). If more than one such volume is found, you will need to select one of them in the next step.</string>
<string lang="en" key="NONSYS_INPLACE_ENC_RESUME_VOL_SELECT_HELP">Please select one of the listed volumes. The list contains every accessible non-system volume where the process of encryption has been interrupted and whose header could be decrypted using the supplied password and/or keyfile(s).</string>
<string lang="en" key="PASSWORD_HELP">It is very important that you choose a good password. You should avoid choosing one that contains only a single word that can be found in a dictionary (or a combination of 2, 3, or 4 such words). It should not contain any names or dates of birth. It should not be easy to guess. A good password is a random combination of upper and lower case letters, numbers, and special characters, such as @ ^ = $ * + etc. We recommend choosing a password consisting of more than 20 characters (the longer, the better). The maximum possible length is 64 characters.</string>
<string lang="en" key="PASSWORD_HIDDENVOL_HELP">Please choose a password for the hidden volume. </string>
<string lang="en" key="PASSWORD_HIDDEN_OS_HELP">Please choose a password for the hidden operating system (i.e. for the hidden volume). </string>
<string lang="en" key="PASSWORD_HIDDEN_OS_NOTE">IMPORTANT: The password that you choose for the hidden operating system in this step must be substantially different from the other two passwords (i.e. from the password for the outer volume and from the password for the decoy operating system).</string>
<string lang="en" key="PASSWORD_HIDDENVOL_HOST_DIRECT_HELP">Please enter the password for the volume within which you wish to create a hidden volume.\n\nAfter you click Next, VeraCrypt will attempt to mount the volume. As soon as the volume is mounted, its cluster bitmap will be scanned to determine the size of the uninterrupted area of free space (if there is any) whose end is aligned with the end of the volume. This area will accommodate the hidden volume and therefore will limit its maximum possible size. Cluster map scanning is necessary to ensure that no data on the outer volume will be overwritten by the hidden volume.</string>
<string lang="en" key="PASSWORD_HIDDENVOL_HOST_HELP">\nPlease choose a password for the outer volume. This will be the password that you will be able to reveal to an adversary if you are asked or forced to do so.\n\nIMPORTANT: The password must be substantially different from the one you will choose for the hidden volume.\n\nNote: The maximum possible password length is 64 characters.</string>
<string lang="en" key="PASSWORD_SYSENC_OUTERVOL_HELP">Please choose a password for the outer volume. This will be the password you will be able to reveal to anyone forcing you to disclose the password for the first partition behind the system partition, where both the outer volume and the hidden volume (containing the hidden operating system) will reside. The existence of the hidden volume (and of the hidden operating system) will remain secret. Note that this password is not for the decoy operating system.\n\nIMPORTANT: The password must be substantially different from the one you will choose for the hidden volume (i.e. for the hidden operating system).</string>
<string lang="en" key="PASSWORD_HIDVOL_HOST_TITLE">Outer Volume Password</string>
<string lang="en" key="PASSWORD_HIDVOL_TITLE">Hidden Volume Password</string>
<string lang="en" key="PASSWORD_HIDDEN_OS_TITLE">Password for Hidden Operating System</string>
<string lang="en" key="PASSWORD_LENGTH_WARNING">WARNING: Short passwords are easy to crack using brute force techniques!\n\nWe recommend choosing a password consisting of more than 20 characters. Are you sure you want to use a short password?</string>
<string lang="en" key="PASSWORD_TITLE">Volume Password</string>
<string lang="en" key="PASSWORD_WRONG">Incorrect password or not a VeraCrypt volume.</string>
<string lang="en" key="PASSWORD_OR_KEYFILE_WRONG">Incorrect keyfile(s) and/or password or not a VeraCrypt volume.</string>
<string lang="en" key="PASSWORD_OR_MODE_WRONG">Wrong mount mode, incorrect password, or not a VeraCrypt volume.</string>
<string lang="en" key="PASSWORD_OR_KEYFILE_OR_MODE_WRONG">Wrong mount mode, incorrect keyfile(s) and/or password, or not a VeraCrypt volume.</string>
<string lang="en" key="PASSWORD_WRONG_AUTOMOUNT">Incorrect password or no VeraCrypt volume found.</string>
<string lang="en" key="PASSWORD_OR_KEYFILE_WRONG_AUTOMOUNT">Incorrect keyfile(s)/password or no VeraCrypt volume found.</string>
<string lang="en" key="PASSWORD_WRONG_CAPSLOCK_ON">\n\nWarning: Caps Lock is on. This may cause you to enter your password incorrectly.</string>
<string lang="en" key="HIDDEN_FILES_PRESENT_IN_KEYFILE_PATH">\n\nWARNING: Hidden file(s) have been found in a keyfile search path. Such hidden files cannot be used as keyfiles. If you need to use them as keyfiles, remove their 'Hidden' attribute (right-click each of them, select 'Properties', uncheck 'Hidden' and click OK). Note: Hidden files are visible only if the corresponding option is enabled (Computer > Organize > 'Folder and search options' > View).</string>
<string lang="en" key="HIDDEN_VOL_PROT_PASSWORD_US_KEYB_LAYOUT">If you are attempting to protect a hidden volume containing a hidden system, please make sure you are using the standard US keyboard layout when typing the password for the hidden volume. This is required due to the fact that the password needs to be typed in the pre-boot environment (before Windows starts) where non-US Windows keyboard layouts are not available.</string>
<string lang="en" key="FOUND_NO_PARTITION_W_DEFERRED_INPLACE_ENC">VeraCrypt has not found any volume where non-system encryption has been interrupted and where the volume header can be decrypted using the supplied password and/or keyfile(s).\n\nPlease make sure the password and/or keyfile(s) are correct and that the partition/volume is not being used by the system or applications (including antivirus software).</string>
<string lang="en" key="SYSENC_MOUNT_WITHOUT_PBA_NOTE">\n\nNote: If you are attempting to mount a partition located on an encrypted system drive without pre-boot authentication or to mount the encrypted system partition of an operating system that is not running, you can do so by selecting 'System' > 'Mount Without Pre-Boot Authentication'.</string>
<string lang="en" key="MOUNT_WITHOUT_PBA_VOL_ON_ACTIVE_SYSENC_DRIVE">In this mode, you cannot mount a partition located on a drive whose portion is within the key scope of active system encryption.\n\nBefore you can mount this partition in this mode, you need to either boot an operating system installed on a different drive (encrypted or unencrypted) or boot an unencrypted operating system.</string>
<string lang="en" key="PREV">&lt; &amp;Back</string>
<string lang="en" key="RAWDEVICES">Unable to list raw devices installed on your system!</string>
<string lang="en" key="READONLYPROMPT">The volume '%hs' exists, and is read-only. Are you sure you want to replace it?</string>
<string lang="en" key="SELECT_DEST_DIR">Select destination directory</string>
<string lang="en" key="SELECT_KEYFILE">Select Keyfile</string>
<string lang="en" key="SELECT_KEYFILE_PATH">Select a keyfile search path. WARNING: Note that only the path will be remembered, not the filenames!</string>
+ <string lang="en" key="SELECT_KEYFILE_GENERATION_DIRECTORY">Select a directory where to store the keyfiles.</string>
<string lang="en" key="SERPENT_HELP">Designed by Ross Anderson, Eli Biham, and Lars Knudsen. Published in 1998. 256-bit key, 128-bit block. Mode of operation is XTS. Serpent was one of the AES finalists.</string>
<string lang="en" key="SIZE_HELP">Please specify the size of the container you want to create.\n\nIf you create a dynamic (sparse-file) container, this parameter will specify its maximum possible size.\n\nNote that the minimum possible size of a FAT volume is 292 KB. The minimum possible size of an NTFS volume is 3792 KB.</string>
<string lang="en" key="SIZE_HELP_HIDDEN_HOST_VOL">Please specify the size of the outer volume to be created (you will first create the outer volume and then a hidden volume within it). The minimum possible size of a volume within which a hidden volume is intended to be created is 340 KB.</string>
<string lang="en" key="SIZE_HELP_HIDDEN_VOL">Please specify the size of the hidden volume to create. The minimum possible size of a hidden volume is 40 KB (or 3664 KB if it is formatted as NTFS). The maximum possible size you can specify for the hidden volume is displayed above.</string>
<string lang="en" key="SIZE_HIDVOL_HOST_TITLE">Outer Volume Size</string>
<string lang="en" key="SIZE_HIDVOL_TITLE">Hidden Volume Size</string>
<string lang="en" key="SIZE_PARTITION_HELP">Please verify that the size of the selected device/partition shown above is correct and click Next.</string>
<string lang="en" key="SIZE_PARTITION_HIDDEN_SYSENC_HELP">The outer volume and the hidden volume (containing the hidden operating system) will reside within the above partition. It should be the first partition behind the system partition.\n\nPlease verify that the size of the partition and its number shown above are correct, and if they are, click Next.</string>
<string lang="en" key="SIZE_PARTITION_HIDDEN_VOL_HELP">\n\nNote that the minimum possible size of a volume within which a hidden volume is intended to be created is 340 KB.</string>
<string lang="en" key="SIZE_TITLE">Volume Size</string>
<string lang="en" key="SPARSE_FILE">Dynamic</string>
<string lang="en" key="TESTS_FAILED">CAUTION: SELF-TEST FAILED!</string>
<string lang="en" key="TESTS_PASSED">Self-tests of all algorithms passed</string>
<string lang="en" key="TEST_INCORRECT_TEST_DATA_UNIT_SIZE">The data unit number that you supplied is too long or short.</string>
<string lang="en" key="TEST_INCORRECT_SECONDARY_KEY_SIZE">The secondary key that you supplied is too long or short.</string>
<string lang="en" key="TEST_CIPHERTEXT_SIZE">The test ciphertext you have supplied is too long or short.</string>
<string lang="en" key="TEST_KEY_SIZE">The test key you have supplied is too long or short.</string>
<string lang="en" key="TEST_PLAINTEXT_SIZE">The test plaintext you have supplied is too long or short.</string>
<string lang="en" key="TWO_LAYER_CASCADE_HELP">Two ciphers in a cascade operating in XTS mode. Each block is first encrypted with %hs (%d-bit key) and then with %hs (%d-bit key). Each cipher uses its own key. All keys are mutually independent.</string>
<string lang="en" key="THREE_LAYER_CASCADE_HELP">Three ciphers in a cascade operating in XTS mode. Each block is first encrypted with %hs (%d-bit key), then with %hs (%d-bit key), and finally with %hs (%d-bit key). Each cipher uses its own key. All keys are mutually independent.</string>
<string lang="en" key="AUTORUN_MAY_NOT_ALWAYS_WORK">Note that, depending on the operating system configuration, these auto-run and auto-mount features may work only when the traveler disk files are created on a non-writable CD/DVD-like medium. Also note that this is not a bug in VeraCrypt (it is a limitation of Windows).</string>
<string lang="en" key="TRAVELER_DISK_CREATED">VeraCrypt traveler disk has been successfully created.\n\nNote that you need administrator privileges to run VeraCrypt in portable mode. Also note that, after examining the registry file, it may be possible to tell that VeraCrypt was run on a Windows system even if it is run in portable mode.</string>
<string lang="en" key="TC_TRAVELER_DISK">VeraCrypt Traveler Disk</string>
<string lang="en" key="TWOFISH_HELP">Designed by Bruce Schneier, John Kelsey, Doug Whiting, David Wagner, Chris Hall, and Niels Ferguson. Published in 1998. 256-bit key, 128-bit block. Mode of operation is XTS. Twofish was one of the AES finalists.</string>
<string lang="en" key="MORE_INFO_ABOUT">More information on %hs</string>
<string lang="en" key="UNKNOWN">Unknown</string>
<string lang="en" key="ERR_UNKNOWN">An unspecified or unknown error occurred (%d).</string>
<string lang="en" key="UNMOUNTALL_LOCK_FAILED">Some volumes contain files or folders being used by applications or system.\n\nForce dismount?</string>
<string lang="en" key="UNMOUNT_BUTTON">&amp;Dismount</string>
<string lang="en" key="UNMOUNT_FAILED">Dismount failed!</string>
<string lang="en" key="UNMOUNT_LOCK_FAILED">Volume contains files or folders being used by applications or system.\n\nForce dismount?</string>
<string lang="en" key="NO_VOLUME_MOUNTED_TO_DRIVE">No volume is mounted to the specified drive letter.</string>
<string lang="en" key="VOL_ALREADY_MOUNTED">The volume you are trying to mount is already mounted. </string>
<string lang="en" key="VOL_MOUNT_FAILED">An error occurred when attempting to mount volume.</string>
<string lang="en" key="VOL_SEEKING">Error seeking location within volume.</string>
@@ -831,71 +834,75 @@
<string lang="en" key="DISMOUNT">Dismount</string>
<string lang="en" key="SHOW_TC">Show VeraCrypt</string>
<string lang="en" key="HIDE_TC">Hide VeraCrypt</string>
<string lang="en" key="TOTAL_DATA_READ">Data Read since Mount</string>
<string lang="en" key="TOTAL_DATA_WRITTEN">Data Written since Mount</string>
<string lang="en" key="ENCRYPTED_PORTION">Encrypted Portion</string>
<string lang="en" key="ENCRYPTED_PORTION_FULLY_ENCRYPTED">100% (fully encrypted)</string>
<string lang="en" key="ENCRYPTED_PORTION_NOT_ENCRYPTED">0% (not encrypted)</string>
<string lang="en" key="PROCESSED_PORTION_X_PERCENT">%.3f%%</string>
<string lang="en" key="PROCESSED_PORTION_100_PERCENT">100%</string>
<string lang="en" key="PROGRESS_STATUS_WAITING">Waiting</string>
<string lang="en" key="PROGRESS_STATUS_PREPARING">Preparing</string>
<string lang="en" key="PROGRESS_STATUS_RESIZING">Resizing</string>
<string lang="en" key="PROGRESS_STATUS_ENCRYPTING">Encrypting</string>
<string lang="en" key="PROGRESS_STATUS_DECRYPTING">Decrypting</string>
<string lang="en" key="PROGRESS_STATUS_FINALIZING">Finalizing</string>
<string lang="en" key="PROGRESS_STATUS_PAUSED">Paused</string>
<string lang="en" key="PROGRESS_STATUS_FINISHED">Finished</string>
<string lang="en" key="PROGRESS_STATUS_ERROR">Error</string>
<string lang="en" key="FAVORITE_DISCONNECTED_DEV">Device disconnected</string>
<string lang="en" key="SYS_FAVORITE_VOLUMES_SAVED">System favorite volumes saved.\n\nTo enable mounting of system favorite volumes when the system starts, please select 'Settings' > 'System Favorite Volumes' > 'Mount system favorite volumes when Windows starts'.</string>
<string lang="en" key="FAVORITE_ADD_DRIVE_DEV_WARNING">The volume you are adding to favorites is neither a partition nor a dynamic volume. Therefore, VeraCrypt will be unable to mount this favorite volume if the device number changes.</string>
<string lang="en" key="FAVORITE_ADD_PARTITION_TYPE_WARNING">The volume you are adding to favorites is a partition not recognized by Windows.\n\nVeraCrypt will be unable to mount this favorite volume if the device number changes. Please set the type of the partition to a type recognized by Windows (use the SETID command of the Windows 'diskpart' tool). Then add the partition to favorites again.</string>
<string lang="en" key="FAVORITE_ARRIVAL_MOUNT_BACKGROUND_TASK_ERR">VeraCrypt Background Task is disabled or it is configured to exit when there are no mounted volumes (or VeraCrypt is running in portable mode). This may prevent your favorite volumes from being automatically mounted when devices hosting them get connected.\n\nNote: To enable the VeraCrypt Background Task, select Settings > Preferences and check the 'Enabled' checkbox in the section 'VeraCrypt Background Task'.</string>
<string lang="en" key="FAVORITE_ARRIVAL_MOUNT_NETWORK_PATH_ERR">A container stored in a remote filesystem shared over a network cannot be automatically mounted when its host device gets connected.</string>
<string lang="en" key="FAVORITE_ARRIVAL_MOUNT_DEVICE_PATH_ERR">The device displayed below is neither a partition nor a dynamic volume. Therefore, the volume hosted on the device cannot be automatically mounted when the device gets connected.</string>
<string lang="en" key="FAVORITE_ARRIVAL_MOUNT_PARTITION_TYPE_ERR">Please set the type of the partition displayed below to a type recognized by Windows (use the SETID command of the Windows 'diskpart' tool). Then remove the partition from favorites and add it again. This will enable the volume hosted on the device to be automatically mounted when the device gets connected.</string>
<string lang="en" key="FAVORITE_LABEL_DEVICE_PATH_ERR">The device displayed below is neither a partition nor a dynamic volume. Therefore, no label can be assigned to it.</string>
<string lang="en" key="FAVORITE_LABEL_PARTITION_TYPE_ERR">Please set the type of the partition displayed below to a type recognized by Windows (use the SETID command of the Windows 'diskpart' tool). Then remove the partition from favorites and add it again. This will enable VeraCrypt to assign a label to the partition.</string>
<string lang="en" key="SYSTEM_FAVORITE_NETWORK_PATH_ERR">Due to a Windows limitation, a container stored in a remote filesystem shared over a network cannot be mounted as a system favorite volume (however, it can be mounted as a non-system favorite volume when a user logs on).</string>
<string lang="en" key="ENTER_PASSWORD_FOR">Enter password for %hs</string>
<string lang="en" key="ENTER_PASSWORD_FOR_LABEL">Enter password for '%s'</string>
<string lang="en" key="ENTER_NORMAL_VOL_PASSWORD">Enter password for the normal/outer volume</string>
<string lang="en" key="ENTER_HIDDEN_VOL_PASSWORD">Enter password for the hidden volume</string>
<string lang="en" key="ENTER_HEADER_BACKUP_PASSWORD">Enter password for the header stored in backup file</string>
- <string lang="en" key="KEYFILE_CREATED">Keyfile has been successfully created.</string>
+ <string lang="en" key="KEYFILE_CREATED">Keyfiles have been successfully created.</string>
+ <string lang="en" key="KEYFILE_INCORRECT_NUMBER">The number of keyfiles you supplied is invalid.</string>
+ <string lang="en" key="KEYFILE_EMPTY_BASE_NAME">Please enter a name for the keyfile(s) to be generated</string>
+ <string lang="en" key="KEYFILE_INVALID_BASE_NAME">The base name of the keyfile(s) is invalid</string>
+ <string lang="en" key="KEYFILE_ALREADY_EXISTS">The keyfile '%s' already exists.\nDo you want to overwrite it? The generation process will be stopped if you answer No.</string>
<string lang="en" key="HEADER_DAMAGED_AUTO_USED_HEADER_BAK">WARNING: The header of this volume is damaged! VeraCrypt automatically used the backup of the volume header embedded in the volume.\n\nYou should repair the volume header by selecting 'Tools' > 'Restore Volume Header'.</string>
<string lang="en" key="VOL_HEADER_BACKED_UP">Volume header backup has been successfully created.\n\nIMPORTANT: Restoring the volume header using this backup will also restore the current volume password. Moreover, if keyfile(s) are/is necessary to mount the volume, the same keyfile(s) will be necessary to mount the volume again when the volume header is restored.\n\nWARNING: This volume header backup may be used to restore the header ONLY of this particular volume. If you use this header backup to restore a header of a different volume, you will be able to mount the volume, but you will NOT be able to decrypt any data stored in the volume (because you will change its master key).</string>
<string lang="en" key="VOL_HEADER_RESTORED">The volume header has been successfully restored.\n\nIMPORTANT: Please note that an old password may have been restored as well. Moreover, if keyfile(s) were/was necessary to mount the volume when the backup was created, the same keyfile(s) are now necessary to mount the volume again.</string>
<string lang="en" key="EXTERNAL_VOL_HEADER_BAK_FIRST_INFO">For security reasons, you will have to enter the correct password (and/or supply the correct keyfiles) for the volume.\n\nNote: If the volume contains a hidden volume, you will have to enter the correct password (and/or supply the correct keyfiles) for the outer volume first. Afterwards, if you choose to back up the header of the hidden volume, you will have to enter the correct password (and/or supply the correct keyfiles) for the hidden volume.</string>
<string lang="en" key="CONFIRM_VOL_HEADER_BAK">Are you sure you want to create volume header backup for %hs?\n\nAfter you click Yes, you will prompted for a filename for the header backup.\n\nNote: Both the standard and the hidden volume headers will be re-encrypted using a new salt and stored in the backup file. If there is no hidden volume within this volume, the area reserved for the hidden volume header in the backup file will be filled with random data (to preserve plausible deniability). When restoring a volume header from the backup file, you will need to enter the correct password (and/or to supply the correct keyfiles) that was/were valid when the volume header backup was created. The password (and/or keyfiles) will also automatically determine the type of the volume header to restore, i.e. standard or hidden (note that VeraCrypt determines the type through the process of trial and error).</string>
<string lang="en" key="CONFIRM_VOL_HEADER_RESTORE">Are you sure you want to restore volume header of %hs?\n\nWARNING: Restoring a volume header also restores the volume password that was valid when the backup was created. Moreover, if keyfile(s) were/was necessary to mount the volume when the backup was created, the same keyfile(s) will be necessary to mount the volume again after the volume header is restored.\n\nAfter you click Yes, you will select the header backup file.</string>
<string lang="en" key="DOES_VOLUME_CONTAIN_HIDDEN">Does the volume contain a hidden volume?</string>
<string lang="en" key="VOLUME_CONTAINS_HIDDEN">The volume contains a hidden volume</string>
<string lang="en" key="VOLUME_DOES_NOT_CONTAIN_HIDDEN">The volume does not contain a hidden volume</string>
<string lang="en" key="HEADER_RESTORE_EXTERNAL_INTERNAL">Please select the type of volume header backup you want to use:</string>
<string lang="en" key="HEADER_RESTORE_INTERNAL">Restore the volume header from the backup embedded in the volume</string>
<string lang="en" key="HEADER_RESTORE_EXTERNAL">Restore the volume header from an external backup file</string>
<string lang="en" key="HEADER_BACKUP_SIZE_INCORRECT">The size of the volume header backup file is incorrect.</string>
<string lang="en" key="VOLUME_HAS_NO_BACKUP_HEADER">There is no backup header embedded in this volume (note that only volumes created by VeraCrypt 6.0 or later contain embedded backup headers).</string>
<string lang="en" key="BACKUP_HEADER_NOT_FOR_SYS_DEVICE">You are attempting to back up the header of the system partition/drive. This is not allowed. Backup/restore operations pertaining to the system partition/drive can be performed only using the VeraCrypt Rescue Disk.\n\nDo you want to create a VeraCrypt Rescue Disk?</string>
<string lang="en" key="RESTORE_HEADER_NOT_FOR_SYS_DEVICE">You are attempting to restore the header of a virtual VeraCrypt volume but you selected the system partition/drive. This is not allowed. Backup/restore operations pertaining to the system partition/drive can be performed only using the VeraCrypt Rescue Disk.\n\nDo you want to create a VeraCrypt Rescue Disk?</string>
<string lang="en" key="RESCUE_DISK_NON_WIZARD_CREATION_SELECT_PATH">After you click OK, you will select a filename for the new VeraCrypt Rescue Disk ISO image and the location where you wish to place it.</string>
<string lang="en" key="RESCUE_DISK_NON_WIZARD_CREATION_BURN">The Rescue Disk image has been created and stored in this file:\n%hs\n\nNow you need to burn the Rescue Disk image to a CD or DVD.\n\nIMPORTANT: Note that the file must be written to the CD/DVD as an ISO disk image (not as an individual file). For information on how to do so, please refer to the documentation of your CD/DVD recording software.\n\nAfter you burn the Rescue Disk, select 'System' > 'Verify Rescue Disk' to verify that it has been correctly burned.</string>
<string lang="en" key="RESCUE_DISK_NON_WIZARD_CREATION_WIN_ISOBURN">The Rescue Disk image has been created and stored in this file:\n%hs\n\nNow you need to burn the Rescue Disk image to a CD or DVD.\n\nDo you want to launch the Microsoft Windows Disc Image Burner now?\n\nNote: After you burn the Rescue Disk, select 'System' > 'Verify Rescue Disk' to verify that it has been correctly burned.</string>
<string lang="en" key="RESCUE_DISK_NON_WIZARD_CHECK_INSERT">Please insert your VeraCrypt Rescue Disk into your CD/DVD drive and click OK to verify it.</string>
<string lang="en" key="RESCUE_DISK_NON_WIZARD_CHECK_PASSED">The VeraCrypt Rescue Disk has been successfully verified.</string>
<string lang="en" key="RESCUE_DISK_NON_WIZARD_CHECK_FAILED">Cannot verify that the Rescue Disk has been correctly burned.\n\nIf you have burned the Rescue Disk, please eject and reinsert the CD/DVD; then try again. If this does not help, please try other CD/DVD recording software and/or medium.\n\nIf you attempted to verify a VeraCrypt Rescue Disk created for a different master key, password, salt, etc., please note that such Rescue Disk will always fail this verification. To create a new Rescue Disk fully compatible with your current configuration, select 'System' > 'Create Rescue Disk'.</string>
<string lang="en" key="ERROR_CREATING_RESCUE_DISK">Error creating VeraCrypt Rescue Disk.</string>
<string lang="en" key="CANNOT_CREATE_RESCUE_DISK_ON_HIDDEN_OS">VeraCrypt Rescue Disk cannot be created when a hidden operating system is running.\n\nTo create a VeraCrypt Rescue Disk, boot the decoy operating system and then select 'System' > 'Create Rescue Disk'.</string>
<string lang="en" key="RESCUE_DISK_CHECK_FAILED">Cannot verify that the Rescue Disk has been correctly burned.\n\nIf you have burned the Rescue Disk, please eject and reinsert the CD/DVD; then click Next to try again. If this does not help, please try another medium%s.\n\nIf you have not burned the Rescue Disk yet, please do so, and then click Next.\n\nIf you attempted to verify a VeraCrypt Rescue Disk created before you started this wizard, please note that such Rescue Disk cannot be used, because it was created for a different master key. You need to burn the newly generated Rescue Disk.</string>
<string lang="en" key="RESCUE_DISK_CHECK_FAILED_SENTENCE_APPENDIX"> and/or other CD/DVD recording software</string>
<string lang="en" key="SYSTEM_FAVORITES_DLG_TITLE">VeraCrypt - System Favorite Volumes</string>
<string lang="en" key="SYS_FAVORITES_HELP_LINK">What are system favorite volumes?</string>
<string lang="en" key="SYS_FAVORITES_REQUIRE_PBA">The system partition/drive does not appear to be encrypted.\n\nSystem favorite volumes can be mounted using only a pre-boot authentication password. Therefore, to enable use of system favorite volumes, you need to encrypt the system partition/drive first.</string>
<string lang="en" key="DISMOUNT_FIRST">Please dismount the volume before proceeding.</string>
<string lang="en" key="CANNOT_SET_TIMER">Error: Cannot set timer.</string>
<string lang="en" key="IDPM_CHECK_FILESYS">Check Filesystem</string>
<string lang="en" key="IDPM_REPAIR_FILESYS">Repair Filesystem</string>
<string lang="en" key="IDPM_ADD_TO_FAVORITES">Add to Favorites...</string>
<string lang="en" key="IDPM_ADD_TO_SYSTEM_FAVORITES">Add to System Favorites...</string>
@@ -1185,71 +1192,71 @@
<string lang="en" key="TOKEN_KEYFILE_ALREADY_EXISTS">A security token keyfile with the same name already exists.</string>
<string lang="en" key="CONFIRM_SEL_FILES_DELETE">Do you want to delete the selected files?</string>
<string lang="en" key="INVALID_TOKEN_KEYFILE_PATH">Security token keyfile path is invalid.</string>
<string lang="en" key="SECURITY_TOKEN_ERROR">Security token error</string>
<string lang="en" key="CKR_PIN_INCORRECT">Password for security token is incorrect.</string>
<string lang="en" key="CKR_DEVICE_MEMORY">The security token does not have enough memory/space to perform the requested operation.\n\nIf you are attempting to import a keyfile, you should select a smaller file or use a keyfile generated by VeraCrypt (select 'Tools' > 'Keyfile Generator').</string>
<string lang="en" key="ALL_TOKEN_SESSIONS_CLOSED">All open security token sessions have been closed.</string>
<string lang="en" key="SELECT_TOKEN_KEYFILES">Select Security Token Keyfiles</string>
<string lang="en" key="TOKEN_SLOT_ID">Slot</string>
<string lang="en" key="TOKEN_NAME">Token name</string>
<string lang="en" key="TOKEN_DATA_OBJECT_LABEL">File name</string>
<string lang="en" key="BOOT_PASSWORD_CACHE_KEYBOARD_WARNING">IMPORTANT: Please note that pre-boot authentication passwords are always typed using the standard US keyboard layout. Therefore, a volume that uses a password typed using any other keyboard layout may be impossible to mount using a pre-boot authentication password (note that this is not a bug in VeraCrypt). To allow such a volume to be mounted using a pre-boot authentication password, follow these steps:\n\n1) Click 'Select File' or 'Select Device' and select the volume.\n2) Select 'Volumes' > 'Change Volume Password'.\n3) Enter the current password for the volume.\n4) Change the keyboard layout to English (US) by clicking the Language bar icon in the Windows taskbar and selecting 'EN English (United States)'.\n5) In VeraCrypt, in the field for the new password, type the pre-boot authentication password.\n6) Confirm the new password by retyping it in the confirmation field and click 'OK'.\nWARNING: Please keep in mind that if you follow these steps, the volume password will always have to be typed using the US keyboard layout (which is automatically ensured only in the pre-boot environment).</string>
<string lang="en" key="SYS_FAVORITES_KEYBOARD_WARNING">System favorite volumes will be mounted using the pre-boot authentication password. If any system favorite volume uses a different password, it will not be mounted.</string>
<string lang="en" key="SYS_FAVORITES_ADMIN_ONLY_INFO">Please note that if you need to prevent normal VeraCrypt volume actions (such as 'Dismount All', auto-dismount, etc.) from affecting system favorite volumes, you should enable the option 'Allow only administrators to view and dismount system favorite volumes in VeraCrypt'. In addition, when VeraCrypt is run without administrator privileges (the default on Windows Vista and later), system favorite volumes will not be displayed in the drive letter list in the main VeraCrypt application window.</string>
<string lang="en" key="SYS_FAVORITES_ADMIN_ONLY_WARNING">IMPORTANT: Please keep in mind that if this option is enabled and VeraCrypt does not have administrator privileges, mounted system favorite volumes are NOT displayed in the VeraCrypt application window and they cannot be dismounted. Therefore, if you need e.g. to dismount a system favorite volume, please right-click the VeraCrypt icon (in the Start menu) and select 'Run as administrator' first. The same limitation applies to the 'Dismount All' function, 'Auto-Dismount' functions, 'Dismount All' hot keys, etc.</string>
<string lang="en" key="SETTING_REQUIRES_REBOOT">Note that this setting takes effect only after the operating system is restarted.</string>
<string lang="en" key="COMMAND_LINE_ERROR">Error while parsing command line.</string>
<string lang="en" key="RESCUE_DISK">Rescue Disk</string>
<string lang="en" key="SELECT_FILE_AND_MOUNT">Select &amp;File and Mount...</string>
<string lang="en" key="SELECT_DEVICE_AND_MOUNT">Select &amp;Device and Mount...</string>
<string lang="en" key="DISABLE_NONADMIN_SYS_FAVORITES_ACCESS">Allow only administrators to view and dismount system favorite volumes in VeraCrypt</string>
<string lang="en" key="MOUNT_SYSTEM_FAVORITES_ON_BOOT">Mount system favorite volumes when Windows starts (in the initial phase of the startup procedure)</string>
<string lang="en" key="MOUNTED_VOLUME_DIRTY">Warning: The filesystem on the volume mounted as '%s' was not cleanly dismounted and thus may contain errors. Using a corrupted filesystem can cause data loss or data corruption.\n\nNote: Before you physically remove or switch off a device (such as a USB flash drive or an external hard drive) where a mounted VeraCrypt volume resides, you should always dismount the VeraCrypt volume in VeraCrypt first.\n\n\nDo you want Windows to attempt to detect and fix errors (if any) on the filesystem?</string>
<string lang="en" key="SYS_FAVORITE_VOLUME_DIRTY">Warning: One or more system favorite volumes were not cleanly dismounted and thus may contain filesystem errors. Please see the system event log for further details.\n\nUsing a corrupted filesystem can cause data loss or data corruption. You should check the affected system favorite volume(s) for errors (right-click each of them in VeraCrypt and select 'Repair Filesystem').</string>
<string lang="en" key="FILESYS_REPAIR_CONFIRM_BACKUP">Warning: Repairing a damaged filesystem using the Microsoft 'chkdsk' tool might cause loss of files in damaged areas. Therefore, it is recommended that you first back up the files stored on the VeraCrypt volume to another, healthy, VeraCrypt volume.\n\nDo you want to repair the filesystem now?</string>
<string lang="en" key="MOUNTED_CONTAINER_FORCED_READ_ONLY">Volume '%s' has been mounted as read-only because write access was denied.\n\nPlease make sure the security permissions of the file container allow you to write to it (right-click the container and select Properties > Security).\n\nNote that, due to a Windows issue, you may see this warning even after setting the appropriate security permissions. This is not caused by a bug in VeraCrypt. A possible solution is to move your container to, e.g., your 'Documents' folder.\n\nIf you intend to keep your volume read-only, set the read-only attribute of the container (right-click the container and select Properties > Read-only), which will suppress this warning.</string>
<string lang="en" key="MOUNTED_DEVICE_FORCED_READ_ONLY">Volume '%s' had to be mounted as read-only because write access was denied.\n\nPlease make sure no other application (e.g. antivirus software) is accessing the partition/device on which the volume is hosted.</string>
<string lang="en" key="MOUNTED_DEVICE_FORCED_READ_ONLY_WRITE_PROTECTION">Volume '%s' has been mounted as read-only because the operating system reported the host device to be write-protected.\n\nPlease note that some custom chipset drivers have been reported to cause writable media to falsely appear write-protected. This problem is not caused by VeraCrypt. It may be solved by updating or uninstalling any custom (non-Microsoft) chipset drivers that are currently installed on this system.</string>
<string lang="en" key="LIMIT_ENC_THREAD_POOL_NOTE">Note that the Hyper-Threading technology provides multiple logical cores per a single physical core. When Hyper Threading is enabled, the number selected above represents the number of logical processors/cores.</string>
<string lang="en" key="NUMBER_OF_THREADS">%d threads</string>
<string lang="en" key="DISABLED_HW_AES_AFFECTS_PERFORMANCE">Note that hardware-accelerated AES is disabled, which will affect benchmark results (worse performance).\n\nTo enable hardware acceleration, select 'Settings' > 'Performance' and enable the corresponding option.</string>
<string lang="en" key="LIMITED_THREAD_COUNT_AFFECTS_PERFORMANCE">Note that the number of threads is currently limited, which will affect benchmark results (worse performance).\n\nTo utilize the full potential of the processor(s), select 'Settings' > 'Performance' and disable the corresponding option.</string>
<string lang="en" key="ASK_REMOVE_DEVICE_WRITE_PROTECTION">Do you want VeraCrypt to attempt to disable write protection of the partition/drive?</string>
<string lang="en" key="CONFIRM_SETTING_DEGRADES_PERFORMANCE">WARNING: This setting may degrade performance.\n\nAre you sure you want to use this setting?</string>
<string lang="en" key="HOST_DEVICE_REMOVAL_DISMOUNT_WARN_TITLE">Warning: VeraCrypt volume auto-dismounted</string>
- <string lang="en" key="HOST_DEVICE_REMOVAL_DISMOUNT_WARN">Before you physically remove or turn off a device containing a mounted volume, you should always dismount the volume in VeraCrypt first.\n\nUnexpected spontaneous dismount is usually caused by an intermittently failing cable, drive (enclosure), etc.</string>
+ <string lang="en" key="HOST_DEVICE_REMOVAL_DISMOUNT_WARN">Before you physically remove or turn off a device containing a mounted volume, you should always dismount the volume in VeraCrypt first.\n\nUnexpected spontaneous dismount is usually caused by an intermittently failing cable, drive (enclosure), etc.</string>
<string lang="en" key="TEST">Test</string>
<string lang="en" key="KEYFILE">Keyfile</string>
<string lang="en" key="VKEY_08">Backspace</string>
<string lang="en" key="VKEY_09">Tab</string>
<string lang="en" key="VKEY_0C">Clear</string>
<string lang="en" key="VKEY_0D">Enter</string>
<string lang="en" key="VKEY_13">Pause</string>
<string lang="en" key="VKEY_14">Caps Lock</string>
<string lang="en" key="VKEY_20">Spacebar</string>
<string lang="en" key="VKEY_21">Page Up</string>
<string lang="en" key="VKEY_22">Page Down</string>
<string lang="en" key="VKEY_23">End</string>
<string lang="en" key="VKEY_24">Home</string>
<string lang="en" key="VKEY_25">Left Arrow</string>
<string lang="en" key="VKEY_26">Up Arrow</string>
<string lang="en" key="VKEY_27">Right Arrow</string>
<string lang="en" key="VKEY_28">Down Arrow</string>
<string lang="en" key="VKEY_29">Select Key</string>
<string lang="en" key="VKEY_2A">Print Key</string>
<string lang="en" key="VKEY_2B">Execute Key</string>
<string lang="en" key="VKEY_2C">Print Screen</string>
<string lang="en" key="VKEY_2D">Insert</string>
<string lang="en" key="VKEY_2E">Delete</string>
<string lang="en" key="VKEY_5D">Applications Key</string>
<string lang="en" key="VKEY_5F">Sleep</string>
<string lang="en" key="VKEY_90">Num Lock</string>
<string lang="en" key="VKEY_91">Scroll Lock</string>
<string lang="en" key="VKEY_A6">Browser Back</string>
<string lang="en" key="VKEY_A7">Browser Forward</string>
<string lang="en" key="VKEY_A8">Browser Refresh</string>
<string lang="en" key="VKEY_A9">Browser Stop</string>
<string lang="en" key="VKEY_AA">Browser Search</string>
<string lang="en" key="VKEY_AB">Browser Favorites</string>
<string lang="en" key="VKEY_AC">Browser Home</string>
<string lang="en" key="VKEY_AD">Mute</string>
diff --git a/src/Common/Resource.h b/src/Common/Resource.h
index 9d04e444..2b75ea88 100644
--- a/src/Common/Resource.h
+++ b/src/Common/Resource.h
@@ -11,82 +11,82 @@
#define IDI_TRUECRYPT 507
#define IDD_ABOUT_DLG 508
#define IDD_COMMANDHELP_DLG 509
#define IDD_RAWDEVICES_DLG 510
#define IDC_HOMEPAGE 511
#define IDR_COMMON_RSRC_HEADER 512
#define IDD_LANGUAGE 513
#define IDD_CIPHER_TEST_DLG 514
#define IDR_LICENSE 515
#define IDD_AUXILIARY_DLG 516
#define IDB_TEXTUAL_LOGO_BKG 517
#define IDB_TEXTUAL_LOGO_96DPI 518
#define IDB_TEXTUAL_LOGO_288DPI 519
#define IDR_BOOT_SECTOR 520
#define IDR_BOOT_SECTOR_AES 521
#define IDR_BOOT_SECTOR_SERPENT 522
#define IDR_BOOT_SECTOR_TWOFISH 523
#define IDR_BOOT_LOADER_DECOMPRESSOR 524
#define IDR_BOOT_LOADER 525
#define IDR_BOOT_LOADER_AES 526
#define IDR_BOOT_LOADER_SERPENT 527
#define IDR_BOOT_LOADER_TWOFISH 528
#define IDR_RESCUE_BOOT_SECTOR 529
#define IDR_RESCUE_BOOT_SECTOR_AES 530
#define IDR_RESCUE_BOOT_SECTOR_SERPENT 531
#define IDR_RESCUE_BOOT_SECTOR_TWOFISH 532
#define IDR_RESCUE_LOADER 533
#define IDR_RESCUE_LOADER_AES 534
#define IDR_RESCUE_LOADER_SERPENT 535
#define IDR_RESCUE_LOADER_TWOFISH 536
#define IDD_TOKEN_PASSWORD 537
#define IDD_TOKEN_KEYFILES 538
#define IDD_NEW_TOKEN_KEYFILE 539
#define IDD_RANDOM_POOL_ENRICHMENT 540
#define IDI_TRUECRYPT_MOUNTED_ICON 541
-#define IDR_BOOT_SECTOR_SHA2 542
-#define IDR_BOOT_SECTOR_AES_SHA2 543
-#define IDR_BOOT_SECTOR_SERPENT_SHA2 544
-#define IDR_BOOT_SECTOR_TWOFISH_SHA2 545
+#define IDR_BOOT_SECTOR_SHA2 542
+#define IDR_BOOT_SECTOR_AES_SHA2 543
+#define IDR_BOOT_SECTOR_SERPENT_SHA2 544
+#define IDR_BOOT_SECTOR_TWOFISH_SHA2 545
#define IDR_BOOT_LOADER_SHA2 546
#define IDR_BOOT_LOADER_AES_SHA2 547
#define IDR_BOOT_LOADER_SERPENT_SHA2 548
-#define IDR_BOOT_LOADER_TWOFISH_SHA2 549
-#define IDR_RESCUE_BOOT_SECTOR_SHA2 550
-#define IDR_RESCUE_BOOT_SECTOR_AES_SHA2 551
-#define IDR_RESCUE_BOOT_SECTOR_SERPENT_SHA2 552
-#define IDR_RESCUE_BOOT_SECTOR_TWOFISH_SHA2 553
+#define IDR_BOOT_LOADER_TWOFISH_SHA2 549
+#define IDR_RESCUE_BOOT_SECTOR_SHA2 550
+#define IDR_RESCUE_BOOT_SECTOR_AES_SHA2 551
+#define IDR_RESCUE_BOOT_SECTOR_SERPENT_SHA2 552
+#define IDR_RESCUE_BOOT_SECTOR_TWOFISH_SHA2 553
#define IDR_RESCUE_LOADER_SHA2 554
#define IDR_RESCUE_LOADER_AES_SHA2 555
#define IDR_RESCUE_LOADER_SERPENT_SHA2 556
#define IDR_RESCUE_LOADER_TWOFISH_SHA2 557
#define IDC_HW_AES_LABEL_LINK 5000
#define IDC_HW_AES 5001
#define IDC_PARALLELIZATION_LABEL_LINK 5002
#define IDC_PARALLELIZATION 5003
#define IDT_TOKEN_PASSWORD 5004
#define IDC_PRINT 5005
#define IDC_KEY 5006
#define IDC_PLAINTEXT 5007
#define IDC_CIPHERTEXT 5008
#define IDC_INFO_BOX_TEXT 5009
#define IDC_SECONDARY_KEY 5010
#define IDD_TEXT_INFO_DIALOG_BOX_DLG 5011
#define IDC_TEST_DATA_UNIT_NUMBER 5012
#define IDD_KEYFILE_GENERATOR 5013
#define IDC_CIPHER 5014
#define IDD_MULTI_CHOICE_DLG 5015
#define IDC_TEST_BLOCK_NUMBER 5016
#define IDD_STATIC_MODELESS_WAIT_DLG 5017
#define IDC_POOL_CONTENTS 5018
#define IDC_PRF_ID 5019
#define IDC_KEY_SIZE 5020
#define IDC_PLAINTEXT_SIZE 5021
#define IDC_REDTICK 5022
#define IDC_TESTS_MESSAGE 5023
#define IDC_RESET 5024
#define IDC_AUTO 5025
#define IDC_DECRYPT 5026
#define IDT_TEST_KEY 5027
#define IDT_TEST_PLAINTEXT 5028
#define IDT_PRF 5029
#define IDT_XTS_MODE 5030
@@ -144,47 +144,51 @@
#define IDC_DISPLAY_POOL_CONTENTS 5082
#define IDC_XTS_MODE_ENABLED 5083
#define IDC_MULTI_CHOICE_MSG 5084
#define IDC_CHOICE1 5085
#define IDC_CHOICE5 5086
#define IDC_CHOICE2 5087
#define IDC_CHOICE3 5088
#define IDC_CHOICE4 5089
#define IDC_CHOICE6 5090
#define IDC_CHOICE7 5091
#define IDC_CHOICE8 5092
#define IDC_CHOICE9 5093
#define IDC_CHOICE10 5094
#define IDC_MC_DLG_HR1 5095
#define IDC_MC_DLG_HR2 5096
#define IDC_LINK_HIDVOL_PROTECTION_INFO 5097
#define IDC_LINK_KEYFILES_INFO 5098
#define IDC_TEXTUAL_LOGO_IMG 5099
#define IDC_ASPECT_RATIO_CALIBRATION_BOX 5100
#define IDC_ABOUT_LOGO_AREA 5101
#define IDC_TOKEN_PASSWORD 5102
#define IDC_TOKEN_FILE_LIST 5103
#define IDC_TOKEN_FILES_ADD 5104
#define IDC_EXPORT 5105
#define IDC_DELETE 5106
#define IDC_IMPORT_KEYFILE 5107
#define IDC_SELECTED_TOKEN 5108
#define IDT_SECURITY_TOKEN 5109
#define IDT_TOKEN_KEYFILE_NAME 5110
#define IDC_TOKEN_KEYFILE_NAME 5111
#define IDT_TOKEN_PASSWORD_INFO 5112
#define IDT_RANDOM_POOL_ENRICHMENT_NOTE 5113
#define IDC_CONTINUE 5114
#define IDT_ABOUT_RELEASE 5115
#define IDT_STATIC_MODELESS_WAIT_DLG_INFO 5116
+#define IDT_NUMBER_KEYFILES 5117
+#define IDC_NUMBER_KEYFILES 5118
+#define IDT_KEYFILES_BASE_NAME 5119
+#define IDC_KEYFILES_BASE_NAME 5120
// Next default values for new objects
//
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NO_MFC 1
#define _APS_NEXT_RESOURCE_VALUE 542
#define _APS_NEXT_COMMAND_VALUE 40001
-#define _APS_NEXT_CONTROL_VALUE 5117
+#define _APS_NEXT_CONTROL_VALUE 5121
#define _APS_NEXT_SYMED_VALUE 101
#endif
#endif