From 6bb1f24ed571bccd4d1d247dafdc1dda6eaa3d8d Mon Sep 17 00:00:00 2001 From: Mounir IDRASSI Date: Mon, 4 Feb 2019 11:37:37 +0100 Subject: Automatically truncate passwords for TrueCrypt volumes and System Encryption to the first 64 characters. This fix issues encountered by users of TrueCrypt volumes who were using passwords longer than 64 characters that were truncated in previous version. --- src/Main/Forms/VolumePasswordPanel.cpp | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) (limited to 'src/Main/Forms/VolumePasswordPanel.cpp') diff --git a/src/Main/Forms/VolumePasswordPanel.cpp b/src/Main/Forms/VolumePasswordPanel.cpp index 9bce4c75..2859762c 100644 --- a/src/Main/Forms/VolumePasswordPanel.cpp +++ b/src/Main/Forms/VolumePasswordPanel.cpp @@ -219,15 +219,16 @@ namespace VeraCrypt SetPimValidator (); } - shared_ptr VolumePasswordPanel::GetPassword () const + shared_ptr VolumePasswordPanel::GetPassword (bool bForceLegacyPassword) const { - return GetPassword (PasswordTextCtrl); + return GetPassword (PasswordTextCtrl, bForceLegacyPassword || GetTrueCryptMode()); } - shared_ptr VolumePasswordPanel::GetPassword (wxTextCtrl *textCtrl) const + shared_ptr VolumePasswordPanel::GetPassword (wxTextCtrl *textCtrl, bool bLegacyPassword) const { shared_ptr password; wchar_t passwordBuf[VolumePassword::MaxSize + 1]; + size_t maxPasswordLength = bLegacyPassword? VolumePassword::MaxLegacySize: VolumePassword::MaxSize; finally_do_arg (BufferPtr, BufferPtr (reinterpret_cast (passwordBuf), sizeof (passwordBuf)), { finally_arg.Erase(); }); #ifdef TC_WINDOWS @@ -235,12 +236,12 @@ namespace VeraCrypt password = ToUTF8Password (passwordBuf, len); #else wxString passwordStr (textCtrl->GetValue()); // A copy of the password is created here by wxWidgets, which cannot be erased - for (size_t i = 0; i < passwordStr.size() && i < VolumePassword::MaxSize; ++i) + for (size_t i = 0; i < passwordStr.size() && i < maxPasswordLength; ++i) { passwordBuf[i] = (wchar_t) passwordStr[i]; passwordStr[i] = L'X'; } - password = ToUTF8Password (passwordBuf, passwordStr.size() <= VolumePassword::MaxSize ? passwordStr.size() : VolumePassword::MaxSize); + password = ToUTF8Password (passwordBuf, passwordStr.size() <= maxPasswordLength ? passwordStr.size() : maxPasswordLength); #endif return password; } -- cgit v1.2.3