mirror of
https://github.com/veracrypt/VeraCrypt.git
synced 2025-11-11 02:58:02 -06:00
Linux/MacOSX: Implement TrueCrypt conversion and loading support. Correct many GTK issues linked to multi-threaded origine of events by implementing an automatic mechanism for handling such requests in the main thread.
This commit is contained in:
@@ -70,14 +70,15 @@ namespace VeraCrypt
|
|||||||
bool m_preserveTimestamps;
|
bool m_preserveTimestamps;
|
||||||
shared_ptr <VolumePassword> m_password;
|
shared_ptr <VolumePassword> m_password;
|
||||||
shared_ptr <Pkcs5Kdf> m_kdf;
|
shared_ptr <Pkcs5Kdf> m_kdf;
|
||||||
|
bool m_truecryptMode;
|
||||||
shared_ptr <KeyfileList> m_keyfiles;
|
shared_ptr <KeyfileList> m_keyfiles;
|
||||||
shared_ptr <VolumePassword> m_newPassword;
|
shared_ptr <VolumePassword> m_newPassword;
|
||||||
shared_ptr <KeyfileList> m_newKeyfiles;
|
shared_ptr <KeyfileList> m_newKeyfiles;
|
||||||
shared_ptr <Pkcs5Kdf> m_newPkcs5Kdf;
|
shared_ptr <Pkcs5Kdf> m_newPkcs5Kdf;
|
||||||
int m_wipeCount;
|
int m_wipeCount;
|
||||||
ChangePasswordThreadRoutine(shared_ptr <VolumePath> volumePath, bool preserveTimestamps, shared_ptr <VolumePassword> password, shared_ptr <Pkcs5Kdf> kdf, shared_ptr <KeyfileList> keyfiles, shared_ptr <VolumePassword> newPassword, shared_ptr <KeyfileList> newKeyfiles, shared_ptr <Pkcs5Kdf> newPkcs5Kdf, int wipeCount) : m_volumePath(volumePath), m_preserveTimestamps(preserveTimestamps), m_password(password), m_kdf(kdf), m_keyfiles(keyfiles), m_newPassword(newPassword), m_newKeyfiles(newKeyfiles), m_newPkcs5Kdf(newPkcs5Kdf), m_wipeCount(wipeCount) {}
|
ChangePasswordThreadRoutine(shared_ptr <VolumePath> volumePath, bool preserveTimestamps, shared_ptr <VolumePassword> password, shared_ptr <Pkcs5Kdf> kdf, bool truecryptMode, shared_ptr <KeyfileList> keyfiles, shared_ptr <VolumePassword> newPassword, shared_ptr <KeyfileList> newKeyfiles, shared_ptr <Pkcs5Kdf> newPkcs5Kdf, int wipeCount) : m_volumePath(volumePath), m_preserveTimestamps(preserveTimestamps), m_password(password), m_kdf(kdf), m_truecryptMode(truecryptMode), m_keyfiles(keyfiles), m_newPassword(newPassword), m_newKeyfiles(newKeyfiles), m_newPkcs5Kdf(newPkcs5Kdf), m_wipeCount(wipeCount) {}
|
||||||
virtual ~ChangePasswordThreadRoutine() { }
|
virtual ~ChangePasswordThreadRoutine() { }
|
||||||
virtual void ExecutionCode(void) { Core->ChangePassword(m_volumePath, m_preserveTimestamps, m_password, m_kdf, m_keyfiles, m_newPassword, m_newKeyfiles, m_newPkcs5Kdf, m_wipeCount); }
|
virtual void ExecutionCode(void) { Core->ChangePassword(m_volumePath, m_preserveTimestamps, m_password, m_kdf, m_truecryptMode, m_keyfiles, m_newPassword, m_newKeyfiles, m_newPkcs5Kdf, m_wipeCount); }
|
||||||
};
|
};
|
||||||
|
|
||||||
class OpenVolumeThreadRoutine : public WaitThreadRoutine
|
class OpenVolumeThreadRoutine : public WaitThreadRoutine
|
||||||
@@ -87,6 +88,7 @@ namespace VeraCrypt
|
|||||||
bool m_preserveTimestamps;
|
bool m_preserveTimestamps;
|
||||||
shared_ptr <VolumePassword> m_password;
|
shared_ptr <VolumePassword> m_password;
|
||||||
shared_ptr<Pkcs5Kdf> m_Kdf;
|
shared_ptr<Pkcs5Kdf> m_Kdf;
|
||||||
|
bool m_truecryptMode;
|
||||||
shared_ptr <KeyfileList> m_keyfiles;
|
shared_ptr <KeyfileList> m_keyfiles;
|
||||||
VolumeProtection::Enum m_protection;
|
VolumeProtection::Enum m_protection;
|
||||||
shared_ptr <VolumePassword> m_protectionPassword;
|
shared_ptr <VolumePassword> m_protectionPassword;
|
||||||
@@ -98,14 +100,14 @@ namespace VeraCrypt
|
|||||||
bool m_partitionInSystemEncryptionScope;
|
bool m_partitionInSystemEncryptionScope;
|
||||||
shared_ptr <Volume> m_pVolume;
|
shared_ptr <Volume> m_pVolume;
|
||||||
|
|
||||||
OpenVolumeThreadRoutine(shared_ptr <VolumePath> volumePath, bool preserveTimestamps, shared_ptr <VolumePassword> password, shared_ptr<Pkcs5Kdf> Kdf, shared_ptr <KeyfileList> keyfiles, VolumeProtection::Enum protection = VolumeProtection::None, shared_ptr <VolumePassword> protectionPassword = shared_ptr <VolumePassword> (), shared_ptr<Pkcs5Kdf> protectionKdf = shared_ptr<Pkcs5Kdf> (), shared_ptr <KeyfileList> protectionKeyfiles = shared_ptr <KeyfileList> (), bool sharedAccessAllowed = false, VolumeType::Enum volumeType = VolumeType::Unknown, bool useBackupHeaders = false, bool partitionInSystemEncryptionScope = false):
|
OpenVolumeThreadRoutine(shared_ptr <VolumePath> volumePath, bool preserveTimestamps, shared_ptr <VolumePassword> password, shared_ptr<Pkcs5Kdf> Kdf, bool truecryptMode, shared_ptr <KeyfileList> keyfiles, VolumeProtection::Enum protection = VolumeProtection::None, shared_ptr <VolumePassword> protectionPassword = shared_ptr <VolumePassword> (), shared_ptr<Pkcs5Kdf> protectionKdf = shared_ptr<Pkcs5Kdf> (), shared_ptr <KeyfileList> protectionKeyfiles = shared_ptr <KeyfileList> (), bool sharedAccessAllowed = false, VolumeType::Enum volumeType = VolumeType::Unknown, bool useBackupHeaders = false, bool partitionInSystemEncryptionScope = false):
|
||||||
m_volumePath(volumePath), m_preserveTimestamps(preserveTimestamps), m_password(password), m_Kdf(Kdf), m_keyfiles(keyfiles),
|
m_volumePath(volumePath), m_preserveTimestamps(preserveTimestamps), m_password(password), m_Kdf(Kdf), m_truecryptMode(truecryptMode), m_keyfiles(keyfiles),
|
||||||
m_protection(protection), m_protectionPassword(protectionPassword), m_protectionKdf(protectionKdf), m_protectionKeyfiles(protectionKeyfiles), m_sharedAccessAllowed(sharedAccessAllowed), m_volumeType(volumeType),m_useBackupHeaders(useBackupHeaders),
|
m_protection(protection), m_protectionPassword(protectionPassword), m_protectionKdf(protectionKdf), m_protectionKeyfiles(protectionKeyfiles), m_sharedAccessAllowed(sharedAccessAllowed), m_volumeType(volumeType),m_useBackupHeaders(useBackupHeaders),
|
||||||
m_partitionInSystemEncryptionScope(partitionInSystemEncryptionScope) {}
|
m_partitionInSystemEncryptionScope(partitionInSystemEncryptionScope) {}
|
||||||
|
|
||||||
~OpenVolumeThreadRoutine() {}
|
~OpenVolumeThreadRoutine() {}
|
||||||
|
|
||||||
virtual void ExecutionCode(void) { m_pVolume = Core->OpenVolume(m_volumePath,m_preserveTimestamps,m_password,m_Kdf,m_keyfiles, m_protection,m_protectionPassword,m_protectionKdf, m_protectionKeyfiles,m_sharedAccessAllowed,m_volumeType,m_useBackupHeaders, m_partitionInSystemEncryptionScope); }
|
virtual void ExecutionCode(void) { m_pVolume = Core->OpenVolume(m_volumePath,m_preserveTimestamps,m_password,m_Kdf,m_truecryptMode,m_keyfiles, m_protection,m_protectionPassword,m_protectionKdf, m_protectionKeyfiles,m_sharedAccessAllowed,m_volumeType,m_useBackupHeaders, m_partitionInSystemEncryptionScope); }
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -129,14 +131,15 @@ namespace VeraCrypt
|
|||||||
const ConstBufferPtr &m_encryptedData;
|
const ConstBufferPtr &m_encryptedData;
|
||||||
const VolumePassword &m_password;
|
const VolumePassword &m_password;
|
||||||
shared_ptr <Pkcs5Kdf> m_kdf;
|
shared_ptr <Pkcs5Kdf> m_kdf;
|
||||||
|
bool m_truecryptMode;
|
||||||
const Pkcs5KdfList &m_keyDerivationFunctions;
|
const Pkcs5KdfList &m_keyDerivationFunctions;
|
||||||
const EncryptionAlgorithmList &m_encryptionAlgorithms;
|
const EncryptionAlgorithmList &m_encryptionAlgorithms;
|
||||||
const EncryptionModeList &m_encryptionModes;
|
const EncryptionModeList &m_encryptionModes;
|
||||||
bool m_bResult;
|
bool m_bResult;
|
||||||
DecryptThreadRoutine(shared_ptr <VolumeHeader> header, const ConstBufferPtr &encryptedData, const VolumePassword &password, shared_ptr <Pkcs5Kdf> kdf, const Pkcs5KdfList &keyDerivationFunctions, const EncryptionAlgorithmList &encryptionAlgorithms, const EncryptionModeList &encryptionModes)
|
DecryptThreadRoutine(shared_ptr <VolumeHeader> header, const ConstBufferPtr &encryptedData, const VolumePassword &password, shared_ptr <Pkcs5Kdf> kdf, bool truecryptMode, const Pkcs5KdfList &keyDerivationFunctions, const EncryptionAlgorithmList &encryptionAlgorithms, const EncryptionModeList &encryptionModes)
|
||||||
: m_pHeader(header), m_encryptedData(encryptedData), m_password(password), m_kdf(kdf), m_keyDerivationFunctions(keyDerivationFunctions), m_encryptionAlgorithms(encryptionAlgorithms), m_encryptionModes(encryptionModes), m_bResult(false){}
|
: m_pHeader(header), m_encryptedData(encryptedData), m_password(password), m_kdf(kdf), m_truecryptMode(truecryptMode), m_keyDerivationFunctions(keyDerivationFunctions), m_encryptionAlgorithms(encryptionAlgorithms), m_encryptionModes(encryptionModes), m_bResult(false){}
|
||||||
virtual ~DecryptThreadRoutine() { }
|
virtual ~DecryptThreadRoutine() { }
|
||||||
virtual void ExecutionCode(void) { m_bResult = m_pHeader->Decrypt(m_encryptedData, m_password, m_kdf, m_keyDerivationFunctions, m_encryptionAlgorithms, m_encryptionModes); }
|
virtual void ExecutionCode(void) { m_bResult = m_pHeader->Decrypt(m_encryptedData, m_password, m_kdf, m_truecryptMode, m_keyDerivationFunctions, m_encryptionAlgorithms, m_encryptionModes); }
|
||||||
};
|
};
|
||||||
|
|
||||||
class WaitThreadUI
|
class WaitThreadUI
|
||||||
|
|||||||
18
src/Core/CoreBase.cpp
Executable file → Normal file
18
src/Core/CoreBase.cpp
Executable file → Normal file
@@ -29,7 +29,15 @@ namespace VeraCrypt
|
|||||||
throw PasswordEmpty (SRC_POS);
|
throw PasswordEmpty (SRC_POS);
|
||||||
|
|
||||||
if (!newPkcs5Kdf)
|
if (!newPkcs5Kdf)
|
||||||
newPkcs5Kdf = openVolume->GetPkcs5Kdf();
|
{
|
||||||
|
if (openVolume->GetPkcs5Kdf()->GetTrueCryptMode ())
|
||||||
|
{
|
||||||
|
newPkcs5Kdf.reset (openVolume->GetPkcs5Kdf()->Clone());
|
||||||
|
newPkcs5Kdf->SetTrueCryptMode (false);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
newPkcs5Kdf = openVolume->GetPkcs5Kdf();
|
||||||
|
}
|
||||||
|
|
||||||
if ((openVolume->GetHeader()->GetFlags() & TC_HEADER_FLAG_ENCRYPTED_SYSTEM) != 0
|
if ((openVolume->GetHeader()->GetFlags() & TC_HEADER_FLAG_ENCRYPTED_SYSTEM) != 0
|
||||||
&& openVolume->GetType() == VolumeType::Hidden
|
&& openVolume->GetType() == VolumeType::Hidden
|
||||||
@@ -68,9 +76,9 @@ namespace VeraCrypt
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void CoreBase::ChangePassword (shared_ptr <VolumePath> volumePath, bool preserveTimestamps, shared_ptr <VolumePassword> password, shared_ptr <Pkcs5Kdf> kdf, shared_ptr <KeyfileList> keyfiles, shared_ptr <VolumePassword> newPassword, shared_ptr <KeyfileList> newKeyfiles, shared_ptr <Pkcs5Kdf> newPkcs5Kdf, int wipeCount) const
|
void CoreBase::ChangePassword (shared_ptr <VolumePath> volumePath, bool preserveTimestamps, shared_ptr <VolumePassword> password, shared_ptr <Pkcs5Kdf> kdf, bool truecryptMode, shared_ptr <KeyfileList> keyfiles, shared_ptr <VolumePassword> newPassword, shared_ptr <KeyfileList> newKeyfiles, shared_ptr <Pkcs5Kdf> newPkcs5Kdf, int wipeCount) const
|
||||||
{
|
{
|
||||||
shared_ptr <Volume> volume = OpenVolume (volumePath, preserveTimestamps, password, kdf, keyfiles);
|
shared_ptr <Volume> volume = OpenVolume (volumePath, preserveTimestamps, password, kdf, truecryptMode, keyfiles);
|
||||||
ChangePassword (volume, newPassword, newKeyfiles, newPkcs5Kdf, wipeCount);
|
ChangePassword (volume, newPassword, newKeyfiles, newPkcs5Kdf, wipeCount);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -242,10 +250,10 @@ namespace VeraCrypt
|
|||||||
return GetMountedVolume (volumePath);
|
return GetMountedVolume (volumePath);
|
||||||
}
|
}
|
||||||
|
|
||||||
shared_ptr <Volume> CoreBase::OpenVolume (shared_ptr <VolumePath> volumePath, bool preserveTimestamps, shared_ptr <VolumePassword> password, shared_ptr<Pkcs5Kdf> kdf, shared_ptr <KeyfileList> keyfiles, VolumeProtection::Enum protection, shared_ptr <VolumePassword> protectionPassword, shared_ptr<Pkcs5Kdf> protectionKdf, shared_ptr <KeyfileList> protectionKeyfiles, bool sharedAccessAllowed, VolumeType::Enum volumeType, bool useBackupHeaders, bool partitionInSystemEncryptionScope) const
|
shared_ptr <Volume> CoreBase::OpenVolume (shared_ptr <VolumePath> volumePath, bool preserveTimestamps, shared_ptr <VolumePassword> password, shared_ptr<Pkcs5Kdf> kdf, bool truecryptMode, shared_ptr <KeyfileList> keyfiles, VolumeProtection::Enum protection, shared_ptr <VolumePassword> protectionPassword, shared_ptr<Pkcs5Kdf> protectionKdf, shared_ptr <KeyfileList> protectionKeyfiles, bool sharedAccessAllowed, VolumeType::Enum volumeType, bool useBackupHeaders, bool partitionInSystemEncryptionScope) const
|
||||||
{
|
{
|
||||||
make_shared_auto (Volume, volume);
|
make_shared_auto (Volume, volume);
|
||||||
volume->Open (*volumePath, preserveTimestamps, password, kdf, keyfiles, protection, protectionPassword, protectionKdf, protectionKeyfiles, sharedAccessAllowed, volumeType, useBackupHeaders, partitionInSystemEncryptionScope);
|
volume->Open (*volumePath, preserveTimestamps, password, kdf, truecryptMode, keyfiles, protection, protectionPassword, protectionKdf, protectionKeyfiles, sharedAccessAllowed, volumeType, useBackupHeaders, partitionInSystemEncryptionScope);
|
||||||
return volume;
|
return volume;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
4
src/Core/CoreBase.h
Executable file → Normal file
4
src/Core/CoreBase.h
Executable file → Normal file
@@ -30,7 +30,7 @@ namespace VeraCrypt
|
|||||||
virtual ~CoreBase ();
|
virtual ~CoreBase ();
|
||||||
|
|
||||||
virtual void ChangePassword (shared_ptr <Volume> openVolume, shared_ptr <VolumePassword> newPassword, shared_ptr <KeyfileList> newKeyfiles, shared_ptr <Pkcs5Kdf> newPkcs5Kdf = shared_ptr <Pkcs5Kdf> (), int wipeCount = PRAND_HEADER_WIPE_PASSES) const;
|
virtual void ChangePassword (shared_ptr <Volume> openVolume, shared_ptr <VolumePassword> newPassword, shared_ptr <KeyfileList> newKeyfiles, shared_ptr <Pkcs5Kdf> newPkcs5Kdf = shared_ptr <Pkcs5Kdf> (), int wipeCount = PRAND_HEADER_WIPE_PASSES) const;
|
||||||
virtual void ChangePassword (shared_ptr <VolumePath> volumePath, bool preserveTimestamps, shared_ptr <VolumePassword> password, shared_ptr <Pkcs5Kdf> kdf, shared_ptr <KeyfileList> keyfiles, shared_ptr <VolumePassword> newPassword, shared_ptr <KeyfileList> newKeyfiles, shared_ptr <Pkcs5Kdf> newPkcs5Kdf = shared_ptr <Pkcs5Kdf> (), int wipeCount = PRAND_HEADER_WIPE_PASSES) const;
|
virtual void ChangePassword (shared_ptr <VolumePath> volumePath, bool preserveTimestamps, shared_ptr <VolumePassword> password, shared_ptr <Pkcs5Kdf> kdf, bool truecryptMode, shared_ptr <KeyfileList> keyfiles, shared_ptr <VolumePassword> newPassword, shared_ptr <KeyfileList> newKeyfiles, shared_ptr <Pkcs5Kdf> newPkcs5Kdf = shared_ptr <Pkcs5Kdf> (), int wipeCount = PRAND_HEADER_WIPE_PASSES) const;
|
||||||
virtual void CheckFilesystem (shared_ptr <VolumeInfo> mountedVolume, bool repair = false) const = 0;
|
virtual void CheckFilesystem (shared_ptr <VolumeInfo> mountedVolume, bool repair = false) const = 0;
|
||||||
virtual void CoalesceSlotNumberAndMountPoint (MountOptions &options) const;
|
virtual void CoalesceSlotNumberAndMountPoint (MountOptions &options) const;
|
||||||
virtual void CreateKeyfile (const FilePath &keyfilePath) const;
|
virtual void CreateKeyfile (const FilePath &keyfilePath) const;
|
||||||
@@ -65,7 +65,7 @@ namespace VeraCrypt
|
|||||||
virtual bool IsVolumeMounted (const VolumePath &volumePath) const;
|
virtual bool IsVolumeMounted (const VolumePath &volumePath) const;
|
||||||
virtual VolumeSlotNumber MountPointToSlotNumber (const DirectoryPath &mountPoint) const = 0;
|
virtual VolumeSlotNumber MountPointToSlotNumber (const DirectoryPath &mountPoint) const = 0;
|
||||||
virtual shared_ptr <VolumeInfo> MountVolume (MountOptions &options) = 0;
|
virtual shared_ptr <VolumeInfo> MountVolume (MountOptions &options) = 0;
|
||||||
virtual shared_ptr <Volume> OpenVolume (shared_ptr <VolumePath> volumePath, bool preserveTimestamps, shared_ptr <VolumePassword> password, shared_ptr<Pkcs5Kdf> Kdf, shared_ptr <KeyfileList> keyfiles, VolumeProtection::Enum protection = VolumeProtection::None, shared_ptr <VolumePassword> protectionPassword = shared_ptr <VolumePassword> (), shared_ptr<Pkcs5Kdf> protectionKdf = shared_ptr<Pkcs5Kdf> (), shared_ptr <KeyfileList> protectionKeyfiles = shared_ptr <KeyfileList> (), bool sharedAccessAllowed = false, VolumeType::Enum volumeType = VolumeType::Unknown, bool useBackupHeaders = false, bool partitionInSystemEncryptionScope = false) const;
|
virtual shared_ptr <Volume> OpenVolume (shared_ptr <VolumePath> volumePath, bool preserveTimestamps, shared_ptr <VolumePassword> password, shared_ptr<Pkcs5Kdf> Kdf, bool truecryptMode, shared_ptr <KeyfileList> keyfiles, VolumeProtection::Enum protection = VolumeProtection::None, shared_ptr <VolumePassword> protectionPassword = shared_ptr <VolumePassword> (), shared_ptr<Pkcs5Kdf> protectionKdf = shared_ptr<Pkcs5Kdf> (), shared_ptr <KeyfileList> protectionKeyfiles = shared_ptr <KeyfileList> (), bool sharedAccessAllowed = false, VolumeType::Enum volumeType = VolumeType::Unknown, bool useBackupHeaders = false, bool partitionInSystemEncryptionScope = false) const;
|
||||||
virtual void RandomizeEncryptionAlgorithmKey (shared_ptr <EncryptionAlgorithm> encryptionAlgorithm) const;
|
virtual void RandomizeEncryptionAlgorithmKey (shared_ptr <EncryptionAlgorithm> encryptionAlgorithm) const;
|
||||||
virtual void ReEncryptVolumeHeaderWithNewSalt (const BufferPtr &newHeaderBuffer, shared_ptr <VolumeHeader> header, shared_ptr <VolumePassword> password, shared_ptr <KeyfileList> keyfiles) const;
|
virtual void ReEncryptVolumeHeaderWithNewSalt (const BufferPtr &newHeaderBuffer, shared_ptr <VolumeHeader> header, shared_ptr <VolumePassword> password, shared_ptr <KeyfileList> keyfiles) const;
|
||||||
virtual void SetAdminPasswordCallback (shared_ptr <GetStringFunctor> functor) { }
|
virtual void SetAdminPasswordCallback (shared_ptr <GetStringFunctor> functor) { }
|
||||||
|
|||||||
57
src/Core/MountOptions.cpp
Executable file → Normal file
57
src/Core/MountOptions.cpp
Executable file → Normal file
@@ -46,6 +46,7 @@ namespace VeraCrypt
|
|||||||
TC_CLONE (SharedAccessAllowed);
|
TC_CLONE (SharedAccessAllowed);
|
||||||
TC_CLONE (SlotNumber);
|
TC_CLONE (SlotNumber);
|
||||||
TC_CLONE (UseBackupHeaders);
|
TC_CLONE (UseBackupHeaders);
|
||||||
|
TC_CLONE (TrueCryptMode);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MountOptions::Deserialize (shared_ptr <Stream> stream)
|
void MountOptions::Deserialize (shared_ptr <Stream> stream)
|
||||||
@@ -72,14 +73,6 @@ namespace VeraCrypt
|
|||||||
Password = Serializable::DeserializeNew <VolumePassword> (stream);
|
Password = Serializable::DeserializeNew <VolumePassword> (stream);
|
||||||
else
|
else
|
||||||
Password.reset();
|
Password.reset();
|
||||||
|
|
||||||
if (!sr.DeserializeBool ("KdfNull"))
|
|
||||||
{
|
|
||||||
sr.Deserialize ("Kdf", nameValue);
|
|
||||||
Kdf = Pkcs5Kdf::GetAlgorithm (nameValue);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
Kdf.reset();
|
|
||||||
|
|
||||||
if (!sr.DeserializeBool ("PathNull"))
|
if (!sr.DeserializeBool ("PathNull"))
|
||||||
Path.reset (new VolumePath (sr.DeserializeWString ("Path")));
|
Path.reset (new VolumePath (sr.DeserializeWString ("Path")));
|
||||||
@@ -96,19 +89,33 @@ namespace VeraCrypt
|
|||||||
else
|
else
|
||||||
ProtectionPassword.reset();
|
ProtectionPassword.reset();
|
||||||
|
|
||||||
if (!sr.DeserializeBool ("ProtectionKdfNull"))
|
|
||||||
{
|
|
||||||
sr.Deserialize ("ProtectionKdf", nameValue);
|
|
||||||
ProtectionKdf = Pkcs5Kdf::GetAlgorithm (nameValue);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
ProtectionKdf.reset();
|
|
||||||
|
|
||||||
ProtectionKeyfiles = Keyfile::DeserializeList (stream, "ProtectionKeyfiles");
|
ProtectionKeyfiles = Keyfile::DeserializeList (stream, "ProtectionKeyfiles");
|
||||||
sr.Deserialize ("Removable", Removable);
|
sr.Deserialize ("Removable", Removable);
|
||||||
sr.Deserialize ("SharedAccessAllowed", SharedAccessAllowed);
|
sr.Deserialize ("SharedAccessAllowed", SharedAccessAllowed);
|
||||||
sr.Deserialize ("SlotNumber", SlotNumber);
|
sr.Deserialize ("SlotNumber", SlotNumber);
|
||||||
sr.Deserialize ("UseBackupHeaders", UseBackupHeaders);
|
sr.Deserialize ("UseBackupHeaders", UseBackupHeaders);
|
||||||
|
|
||||||
|
sr.Deserialize ("TrueCryptMode", TrueCryptMode);
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
if (!sr.DeserializeBool ("KdfNull"))
|
||||||
|
{
|
||||||
|
sr.Deserialize ("Kdf", nameValue);
|
||||||
|
Kdf = Pkcs5Kdf::GetAlgorithm (nameValue, TrueCryptMode);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch(...) {}
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
if (!sr.DeserializeBool ("ProtectionKdfNull"))
|
||||||
|
{
|
||||||
|
sr.Deserialize ("ProtectionKdf", nameValue);
|
||||||
|
ProtectionKdf = Pkcs5Kdf::GetAlgorithm (nameValue, TrueCryptMode);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch(...) {}
|
||||||
}
|
}
|
||||||
|
|
||||||
void MountOptions::Serialize (shared_ptr <Stream> stream) const
|
void MountOptions::Serialize (shared_ptr <Stream> stream) const
|
||||||
@@ -133,10 +140,6 @@ namespace VeraCrypt
|
|||||||
if (Password)
|
if (Password)
|
||||||
Password->Serialize (stream);
|
Password->Serialize (stream);
|
||||||
|
|
||||||
sr.Serialize ("KdfNull", Kdf == nullptr);
|
|
||||||
if (Kdf)
|
|
||||||
sr.Serialize ("Kdf", Kdf->GetName());
|
|
||||||
|
|
||||||
sr.Serialize ("PathNull", Path == nullptr);
|
sr.Serialize ("PathNull", Path == nullptr);
|
||||||
if (Path)
|
if (Path)
|
||||||
sr.Serialize ("Path", wstring (*Path));
|
sr.Serialize ("Path", wstring (*Path));
|
||||||
@@ -149,15 +152,21 @@ namespace VeraCrypt
|
|||||||
if (ProtectionPassword)
|
if (ProtectionPassword)
|
||||||
ProtectionPassword->Serialize (stream);
|
ProtectionPassword->Serialize (stream);
|
||||||
|
|
||||||
sr.Serialize ("ProtectionKdfNull", ProtectionKdf == nullptr);
|
|
||||||
if (ProtectionKdf)
|
|
||||||
sr.Serialize ("ProtectionKdf", ProtectionKdf->GetName());
|
|
||||||
|
|
||||||
Keyfile::SerializeList (stream, "ProtectionKeyfiles", ProtectionKeyfiles);
|
Keyfile::SerializeList (stream, "ProtectionKeyfiles", ProtectionKeyfiles);
|
||||||
sr.Serialize ("Removable", Removable);
|
sr.Serialize ("Removable", Removable);
|
||||||
sr.Serialize ("SharedAccessAllowed", SharedAccessAllowed);
|
sr.Serialize ("SharedAccessAllowed", SharedAccessAllowed);
|
||||||
sr.Serialize ("SlotNumber", SlotNumber);
|
sr.Serialize ("SlotNumber", SlotNumber);
|
||||||
sr.Serialize ("UseBackupHeaders", UseBackupHeaders);
|
sr.Serialize ("UseBackupHeaders", UseBackupHeaders);
|
||||||
|
|
||||||
|
sr.Serialize ("TrueCryptMode", TrueCryptMode);
|
||||||
|
|
||||||
|
sr.Serialize ("KdfNull", Kdf == nullptr);
|
||||||
|
if (Kdf)
|
||||||
|
sr.Serialize ("Kdf", Kdf->GetName());
|
||||||
|
|
||||||
|
sr.Serialize ("ProtectionKdfNull", ProtectionKdf == nullptr);
|
||||||
|
if (ProtectionKdf)
|
||||||
|
sr.Serialize ("ProtectionKdf", ProtectionKdf->GetName());
|
||||||
}
|
}
|
||||||
|
|
||||||
TC_SERIALIZER_FACTORY_ADD_CLASS (MountOptions);
|
TC_SERIALIZER_FACTORY_ADD_CLASS (MountOptions);
|
||||||
|
|||||||
4
src/Core/MountOptions.h
Executable file → Normal file
4
src/Core/MountOptions.h
Executable file → Normal file
@@ -31,7 +31,8 @@ namespace VeraCrypt
|
|||||||
Removable (false),
|
Removable (false),
|
||||||
SharedAccessAllowed (false),
|
SharedAccessAllowed (false),
|
||||||
SlotNumber (0),
|
SlotNumber (0),
|
||||||
UseBackupHeaders (false)
|
UseBackupHeaders (false),
|
||||||
|
TrueCryptMode (false)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -63,6 +64,7 @@ namespace VeraCrypt
|
|||||||
bool SharedAccessAllowed;
|
bool SharedAccessAllowed;
|
||||||
VolumeSlotNumber SlotNumber;
|
VolumeSlotNumber SlotNumber;
|
||||||
bool UseBackupHeaders;
|
bool UseBackupHeaders;
|
||||||
|
bool TrueCryptMode;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void CopyFrom (const MountOptions &other);
|
void CopyFrom (const MountOptions &other);
|
||||||
|
|||||||
@@ -410,6 +410,7 @@ namespace VeraCrypt
|
|||||||
options.PreserveTimestamps,
|
options.PreserveTimestamps,
|
||||||
options.Password,
|
options.Password,
|
||||||
options.Kdf,
|
options.Kdf,
|
||||||
|
options.TrueCryptMode,
|
||||||
options.Keyfiles,
|
options.Keyfiles,
|
||||||
options.Protection,
|
options.Protection,
|
||||||
options.ProtectionPassword,
|
options.ProtectionPassword,
|
||||||
|
|||||||
@@ -23,6 +23,7 @@ namespace VeraCrypt
|
|||||||
ArgNoHiddenVolumeProtection (false),
|
ArgNoHiddenVolumeProtection (false),
|
||||||
ArgSize (0),
|
ArgSize (0),
|
||||||
ArgVolumeType (VolumeType::Unknown),
|
ArgVolumeType (VolumeType::Unknown),
|
||||||
|
ArgTrueCryptMode (false),
|
||||||
StartBackgroundTask (false)
|
StartBackgroundTask (false)
|
||||||
{
|
{
|
||||||
parser.SetSwitchChars (L"-");
|
parser.SetSwitchChars (L"-");
|
||||||
@@ -71,6 +72,7 @@ namespace VeraCrypt
|
|||||||
parser.AddSwitch (L"", L"quick", _("Enable quick format"));
|
parser.AddSwitch (L"", L"quick", _("Enable quick format"));
|
||||||
parser.AddOption (L"", L"size", _("Size in bytes"));
|
parser.AddOption (L"", L"size", _("Size in bytes"));
|
||||||
parser.AddOption (L"", L"slot", _("Volume slot number"));
|
parser.AddOption (L"", L"slot", _("Volume slot number"));
|
||||||
|
parser.AddOption (L"tc",L"truecrypt", _("Enable TrueCrypt mode. Should be put first to avoid issues."));
|
||||||
parser.AddSwitch (L"", L"test", _("Test internal algorithms"));
|
parser.AddSwitch (L"", L"test", _("Test internal algorithms"));
|
||||||
parser.AddSwitch (L"t", L"text", _("Use text user interface"));
|
parser.AddSwitch (L"t", L"text", _("Use text user interface"));
|
||||||
parser.AddOption (L"", L"token-lib", _("Security token library"));
|
parser.AddOption (L"", L"token-lib", _("Security token library"));
|
||||||
@@ -288,6 +290,8 @@ namespace VeraCrypt
|
|||||||
}
|
}
|
||||||
|
|
||||||
ArgForce = parser.Found (L"force");
|
ArgForce = parser.Found (L"force");
|
||||||
|
|
||||||
|
ArgTrueCryptMode = parser.Found (L"truecrypt");
|
||||||
|
|
||||||
#if !defined(TC_WINDOWS) && !defined(TC_MACOSX)
|
#if !defined(TC_WINDOWS) && !defined(TC_MACOSX)
|
||||||
if (parser.Found (L"fs-options", &str))
|
if (parser.Found (L"fs-options", &str))
|
||||||
@@ -401,7 +405,7 @@ namespace VeraCrypt
|
|||||||
if (wxString (hash->GetName()).IsSameAs (str, false))
|
if (wxString (hash->GetName()).IsSameAs (str, false))
|
||||||
{
|
{
|
||||||
bHashFound = true;
|
bHashFound = true;
|
||||||
ArgMountOptions.ProtectionKdf = Pkcs5Kdf::GetAlgorithm (*hash);
|
ArgMountOptions.ProtectionKdf = Pkcs5Kdf::GetAlgorithm (*hash, ArgTrueCryptMode);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -75,6 +75,7 @@ namespace VeraCrypt
|
|||||||
shared_ptr <VolumePath> ArgVolumePath;
|
shared_ptr <VolumePath> ArgVolumePath;
|
||||||
VolumeInfoList ArgVolumes;
|
VolumeInfoList ArgVolumes;
|
||||||
VolumeType::Enum ArgVolumeType;
|
VolumeType::Enum ArgVolumeType;
|
||||||
|
bool ArgTrueCryptMode;
|
||||||
|
|
||||||
bool StartBackgroundTask;
|
bool StartBackgroundTask;
|
||||||
UserPreferences Preferences;
|
UserPreferences Preferences;
|
||||||
|
|||||||
14
src/Main/Forms/ChangePasswordDialog.cpp
Executable file → Normal file
14
src/Main/Forms/ChangePasswordDialog.cpp
Executable file → Normal file
@@ -48,11 +48,11 @@ namespace VeraCrypt
|
|||||||
throw ParameterIncorrect (SRC_POS);
|
throw ParameterIncorrect (SRC_POS);
|
||||||
}
|
}
|
||||||
|
|
||||||
CurrentPasswordPanel = new VolumePasswordPanel (this, password, keyfiles, false, true, true, false, true, true);
|
CurrentPasswordPanel = new VolumePasswordPanel (this, password, false, keyfiles, false, true, true, false, true, true);
|
||||||
CurrentPasswordPanel->UpdateEvent.Connect (EventConnector <ChangePasswordDialog> (this, &ChangePasswordDialog::OnPasswordPanelUpdate));
|
CurrentPasswordPanel->UpdateEvent.Connect (EventConnector <ChangePasswordDialog> (this, &ChangePasswordDialog::OnPasswordPanelUpdate));
|
||||||
CurrentPasswordPanelSizer->Add (CurrentPasswordPanel, 1, wxALL | wxEXPAND);
|
CurrentPasswordPanelSizer->Add (CurrentPasswordPanel, 1, wxALL | wxEXPAND);
|
||||||
|
|
||||||
NewPasswordPanel = new VolumePasswordPanel (this, newPassword, newKeyfiles, false, enableNewPassword, enableNewKeyfiles, enableNewPassword, enablePkcs5Prf);
|
NewPasswordPanel = new VolumePasswordPanel (this, newPassword, true, newKeyfiles, false, enableNewPassword, enableNewKeyfiles, enableNewPassword, enablePkcs5Prf);
|
||||||
NewPasswordPanel->UpdateEvent.Connect (EventConnector <ChangePasswordDialog> (this, &ChangePasswordDialog::OnPasswordPanelUpdate));
|
NewPasswordPanel->UpdateEvent.Connect (EventConnector <ChangePasswordDialog> (this, &ChangePasswordDialog::OnPasswordPanelUpdate));
|
||||||
NewPasswordPanelSizer->Add (NewPasswordPanel, 1, wxALL | wxEXPAND);
|
NewPasswordPanelSizer->Add (NewPasswordPanel, 1, wxALL | wxEXPAND);
|
||||||
|
|
||||||
@@ -81,6 +81,14 @@ namespace VeraCrypt
|
|||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
shared_ptr <Pkcs5Kdf> currentKdf = CurrentPasswordPanel->GetPkcs5Kdf();
|
||||||
|
if (currentKdf && CurrentPasswordPanel->GetTrueCryptMode() && (currentKdf->GetName() == L"HMAC-SHA-256"))
|
||||||
|
{
|
||||||
|
Gui->ShowWarning (LangString ["ALGO_NOT_SUPPORTED_FOR_TRUECRYPT_MODE"]);
|
||||||
|
event.Skip();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
shared_ptr <VolumePassword> newPassword;
|
shared_ptr <VolumePassword> newPassword;
|
||||||
if (DialogMode == Mode::ChangePasswordAndKeyfiles)
|
if (DialogMode == Mode::ChangePasswordAndKeyfiles)
|
||||||
{
|
{
|
||||||
@@ -126,7 +134,7 @@ namespace VeraCrypt
|
|||||||
#endif
|
#endif
|
||||||
wxBusyCursor busy;
|
wxBusyCursor busy;
|
||||||
ChangePasswordThreadRoutine routine(Path, Gui->GetPreferences().DefaultMountOptions.PreserveTimestamps,
|
ChangePasswordThreadRoutine routine(Path, Gui->GetPreferences().DefaultMountOptions.PreserveTimestamps,
|
||||||
CurrentPasswordPanel->GetPassword(), CurrentPasswordPanel->GetPkcs5Kdf(), CurrentPasswordPanel->GetKeyfiles(),
|
CurrentPasswordPanel->GetPassword(), CurrentPasswordPanel->GetPkcs5Kdf(), CurrentPasswordPanel->GetTrueCryptMode(),CurrentPasswordPanel->GetKeyfiles(),
|
||||||
newPassword, newKeyfiles, NewPasswordPanel->GetPkcs5Kdf(), NewPasswordPanel->GetHeaderWipeCount());
|
newPassword, newKeyfiles, NewPasswordPanel->GetPkcs5Kdf(), NewPasswordPanel->GetHeaderWipeCount());
|
||||||
WaitDialog dlg(this, LangString["IDT_STATIC_MODAL_WAIT_DLG_INFO"], &routine);
|
WaitDialog dlg(this, LangString["IDT_STATIC_MODAL_WAIT_DLG_INFO"], &routine);
|
||||||
dlg.Run();
|
dlg.Run();
|
||||||
|
|||||||
5
src/Main/Forms/Forms.cpp
Executable file → Normal file
5
src/Main/Forms/Forms.cpp
Executable file → Normal file
@@ -3209,7 +3209,10 @@ VolumePasswordPanelBase::VolumePasswordPanelBase( wxWindow* parent, wxWindowID i
|
|||||||
int Pkcs5PrfChoiceNChoices = sizeof( Pkcs5PrfChoiceChoices ) / sizeof( wxString );
|
int Pkcs5PrfChoiceNChoices = sizeof( Pkcs5PrfChoiceChoices ) / sizeof( wxString );
|
||||||
Pkcs5PrfChoice = new wxChoice( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, Pkcs5PrfChoiceNChoices, Pkcs5PrfChoiceChoices, 0 );
|
Pkcs5PrfChoice = new wxChoice( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, Pkcs5PrfChoiceNChoices, Pkcs5PrfChoiceChoices, 0 );
|
||||||
Pkcs5PrfChoice->SetSelection( 0 );
|
Pkcs5PrfChoice->SetSelection( 0 );
|
||||||
GridBagSizer->Add( Pkcs5PrfChoice, wxGBPosition( 7, 1 ), wxGBSpan( 1, 2 ), wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
|
GridBagSizer->Add( Pkcs5PrfChoice, wxGBPosition( 7, 1 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
|
||||||
|
|
||||||
|
TrueCryptModeCheckBox = new wxCheckBox( this, wxID_ANY, _("TrueCrypt Mode"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
|
GridBagSizer->Add( TrueCryptModeCheckBox, wxGBPosition( 7, 2 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
|
||||||
|
|
||||||
HeaderWipeCountText = new wxStaticText( this, wxID_ANY, _("Header Wipe:"), wxDefaultPosition, wxDefaultSize, 0 );
|
HeaderWipeCountText = new wxStaticText( this, wxID_ANY, _("Header Wipe:"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
HeaderWipeCountText->Wrap( -1 );
|
HeaderWipeCountText->Wrap( -1 );
|
||||||
|
|||||||
1
src/Main/Forms/Forms.h
Executable file → Normal file
1
src/Main/Forms/Forms.h
Executable file → Normal file
@@ -962,6 +962,7 @@ namespace VeraCrypt
|
|||||||
wxBoxSizer* Pkcs5PrfSizer;
|
wxBoxSizer* Pkcs5PrfSizer;
|
||||||
wxStaticText* Pkcs5PrfStaticText;
|
wxStaticText* Pkcs5PrfStaticText;
|
||||||
wxChoice* Pkcs5PrfChoice;
|
wxChoice* Pkcs5PrfChoice;
|
||||||
|
wxCheckBox* TrueCryptModeCheckBox;
|
||||||
wxStaticText* HeaderWipeCountText;
|
wxStaticText* HeaderWipeCountText;
|
||||||
wxChoice* HeaderWipeCount;
|
wxChoice* HeaderWipeCount;
|
||||||
wxBoxSizer* PasswordPlaceholderSizer;
|
wxBoxSizer* PasswordPlaceholderSizer;
|
||||||
|
|||||||
@@ -39,6 +39,7 @@ namespace VeraCrypt
|
|||||||
DEFINE_EVENT_TYPE(wxEVT_COMMAND_UPDATE_VOLUME_LIST)
|
DEFINE_EVENT_TYPE(wxEVT_COMMAND_UPDATE_VOLUME_LIST)
|
||||||
DEFINE_EVENT_TYPE(wxEVT_COMMAND_PREF_UPDATED)
|
DEFINE_EVENT_TYPE(wxEVT_COMMAND_PREF_UPDATED)
|
||||||
DEFINE_EVENT_TYPE(wxEVT_COMMAND_OPEN_VOLUME_REQUEST)
|
DEFINE_EVENT_TYPE(wxEVT_COMMAND_OPEN_VOLUME_REQUEST)
|
||||||
|
DEFINE_EVENT_TYPE(wxEVT_COMMAND_SHOW_WARNING)
|
||||||
|
|
||||||
MainFrame::MainFrame (wxWindow* parent) : MainFrameBase (parent),
|
MainFrame::MainFrame (wxWindow* parent) : MainFrameBase (parent),
|
||||||
ListItemRightClickEventPending (false),
|
ListItemRightClickEventPending (false),
|
||||||
@@ -1495,6 +1496,7 @@ namespace VeraCrypt
|
|||||||
}
|
}
|
||||||
|
|
||||||
VolumeInfoList protectionTriggeredVolumes;
|
VolumeInfoList protectionTriggeredVolumes;
|
||||||
|
SlotListCtrl->SetColumnWidth(0, wxLIST_AUTOSIZE);
|
||||||
|
|
||||||
// Update list
|
// Update list
|
||||||
long prevItemIndex = -1;
|
long prevItemIndex = -1;
|
||||||
@@ -1516,7 +1518,7 @@ namespace VeraCrypt
|
|||||||
#endif
|
#endif
|
||||||
fields[ColumnPath] = volume->Path;
|
fields[ColumnPath] = volume->Path;
|
||||||
fields[ColumnSize] = Gui->SizeToString (volume->Size);
|
fields[ColumnSize] = Gui->SizeToString (volume->Size);
|
||||||
fields[ColumnType] = Gui->VolumeTypeToString (volume->Type, volume->Protection);
|
fields[ColumnType] = Gui->VolumeTypeToString (volume->Type, volume->TrueCryptMode, volume->Protection);
|
||||||
|
|
||||||
if (volume->HiddenVolumeProtectionTriggered)
|
if (volume->HiddenVolumeProtectionTriggered)
|
||||||
{
|
{
|
||||||
|
|||||||
12
src/Main/Forms/MountOptionsDialog.cpp
Executable file → Normal file
12
src/Main/Forms/MountOptionsDialog.cpp
Executable file → Normal file
@@ -30,7 +30,7 @@ namespace VeraCrypt
|
|||||||
if (disableMountOptions)
|
if (disableMountOptions)
|
||||||
OptionsButton->Show (false);
|
OptionsButton->Show (false);
|
||||||
|
|
||||||
PasswordPanel = new VolumePasswordPanel (this, options.Password, options.Keyfiles, !disableMountOptions, true, true, false, true, true);
|
PasswordPanel = new VolumePasswordPanel (this, options.Password, disableMountOptions, options.Keyfiles, !disableMountOptions, true, true, false, true, true);
|
||||||
PasswordPanel->SetCacheCheckBoxValidator (wxGenericValidator (&Options.CachePassword));
|
PasswordPanel->SetCacheCheckBoxValidator (wxGenericValidator (&Options.CachePassword));
|
||||||
|
|
||||||
PasswordSizer->Add (PasswordPanel, 1, wxALL | wxEXPAND);
|
PasswordSizer->Add (PasswordPanel, 1, wxALL | wxEXPAND);
|
||||||
@@ -61,7 +61,7 @@ namespace VeraCrypt
|
|||||||
OptionsButton->SetLabel (OptionsButtonLabel + L" >");
|
OptionsButton->SetLabel (OptionsButtonLabel + L" >");
|
||||||
OptionsPanel->Show (false);
|
OptionsPanel->Show (false);
|
||||||
|
|
||||||
ProtectionPasswordPanel = new VolumePasswordPanel (OptionsPanel, options.ProtectionPassword, options.ProtectionKeyfiles, false, true, true, false, true, true, _("P&assword to hidden volume:"));
|
ProtectionPasswordPanel = new VolumePasswordPanel (OptionsPanel, options.ProtectionPassword, true, options.ProtectionKeyfiles, false, true, true, false, true, true, _("P&assword to hidden volume:"));
|
||||||
ProtectionPasswordSizer->Add (ProtectionPasswordPanel, 1, wxALL | wxEXPAND);
|
ProtectionPasswordSizer->Add (ProtectionPasswordPanel, 1, wxALL | wxEXPAND);
|
||||||
|
|
||||||
UpdateDialog();
|
UpdateDialog();
|
||||||
@@ -86,6 +86,7 @@ namespace VeraCrypt
|
|||||||
|
|
||||||
Options.Password = PasswordPanel->GetPassword();
|
Options.Password = PasswordPanel->GetPassword();
|
||||||
Options.Kdf = PasswordPanel->GetPkcs5Kdf();
|
Options.Kdf = PasswordPanel->GetPkcs5Kdf();
|
||||||
|
Options.TrueCryptMode = PasswordPanel->GetTrueCryptMode();
|
||||||
Options.Keyfiles = PasswordPanel->GetKeyfiles();
|
Options.Keyfiles = PasswordPanel->GetKeyfiles();
|
||||||
|
|
||||||
if (ReadOnlyCheckBox->IsChecked())
|
if (ReadOnlyCheckBox->IsChecked())
|
||||||
@@ -119,6 +120,13 @@ namespace VeraCrypt
|
|||||||
{
|
{
|
||||||
Gui->ShowWarning (LangString ["UNSUPPORTED_CHARS_IN_PWD_RECOM"]);
|
Gui->ShowWarning (LangString ["UNSUPPORTED_CHARS_IN_PWD_RECOM"]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (Options.TrueCryptMode && Options.Kdf && (Options.Kdf->GetName() == L"HMAC-SHA-256"))
|
||||||
|
{
|
||||||
|
Gui->ShowWarning (LangString ["ALGO_NOT_SUPPORTED_FOR_TRUECRYPT_MODE"]);
|
||||||
|
event.Skip();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
EndModal (wxID_OK);
|
EndModal (wxID_OK);
|
||||||
}
|
}
|
||||||
|
|||||||
93
src/Main/Forms/TrueCrypt.fbp
Executable file → Normal file
93
src/Main/Forms/TrueCrypt.fbp
Executable file → Normal file
@@ -26014,7 +26014,7 @@
|
|||||||
</object>
|
</object>
|
||||||
<object class="gbsizeritem" expanded="1">
|
<object class="gbsizeritem" expanded="1">
|
||||||
<property name="border">5</property>
|
<property name="border">5</property>
|
||||||
<property name="colspan">2</property>
|
<property name="colspan">1</property>
|
||||||
<property name="column">1</property>
|
<property name="column">1</property>
|
||||||
<property name="flag">wxALIGN_CENTER_VERTICAL|wxLEFT</property>
|
<property name="flag">wxALIGN_CENTER_VERTICAL|wxLEFT</property>
|
||||||
<property name="row">7</property>
|
<property name="row">7</property>
|
||||||
@@ -26104,6 +26104,97 @@
|
|||||||
</object>
|
</object>
|
||||||
</object>
|
</object>
|
||||||
<object class="gbsizeritem" expanded="1">
|
<object class="gbsizeritem" expanded="1">
|
||||||
|
<property name="border">5</property>
|
||||||
|
<property name="colspan">1</property>
|
||||||
|
<property name="column">2</property>
|
||||||
|
<property name="flag">wxALIGN_CENTER_VERTICAL|wxLEFT</property>
|
||||||
|
<property name="row">7</property>
|
||||||
|
<property name="rowspan">1</property>
|
||||||
|
<object class="wxCheckBox" expanded="0">
|
||||||
|
<property name="BottomDockable">1</property>
|
||||||
|
<property name="LeftDockable">1</property>
|
||||||
|
<property name="RightDockable">1</property>
|
||||||
|
<property name="TopDockable">1</property>
|
||||||
|
<property name="aui_layer"></property>
|
||||||
|
<property name="aui_name"></property>
|
||||||
|
<property name="aui_position"></property>
|
||||||
|
<property name="aui_row"></property>
|
||||||
|
<property name="best_size"></property>
|
||||||
|
<property name="bg"></property>
|
||||||
|
<property name="caption"></property>
|
||||||
|
<property name="caption_visible">1</property>
|
||||||
|
<property name="center_pane">0</property>
|
||||||
|
<property name="checked">0</property>
|
||||||
|
<property name="close_button">1</property>
|
||||||
|
<property name="context_help"></property>
|
||||||
|
<property name="context_menu">1</property>
|
||||||
|
<property name="default_pane">0</property>
|
||||||
|
<property name="dock">Dock</property>
|
||||||
|
<property name="dock_fixed">0</property>
|
||||||
|
<property name="docking">Left</property>
|
||||||
|
<property name="enabled">1</property>
|
||||||
|
<property name="fg"></property>
|
||||||
|
<property name="floatable">1</property>
|
||||||
|
<property name="font"></property>
|
||||||
|
<property name="gripper">0</property>
|
||||||
|
<property name="hidden">0</property>
|
||||||
|
<property name="id">wxID_ANY</property>
|
||||||
|
<property name="label">TrueCrypt Mode</property>
|
||||||
|
<property name="max_size"></property>
|
||||||
|
<property name="maximize_button">0</property>
|
||||||
|
<property name="maximum_size"></property>
|
||||||
|
<property name="min_size"></property>
|
||||||
|
<property name="minimize_button">0</property>
|
||||||
|
<property name="minimum_size"></property>
|
||||||
|
<property name="moveable">1</property>
|
||||||
|
<property name="name">TrueCryptModeCheckBox</property>
|
||||||
|
<property name="pane_border">1</property>
|
||||||
|
<property name="pane_position"></property>
|
||||||
|
<property name="pane_size"></property>
|
||||||
|
<property name="permission">protected</property>
|
||||||
|
<property name="pin_button">1</property>
|
||||||
|
<property name="pos"></property>
|
||||||
|
<property name="resize">Resizable</property>
|
||||||
|
<property name="show">1</property>
|
||||||
|
<property name="size"></property>
|
||||||
|
<property name="style"></property>
|
||||||
|
<property name="subclass"></property>
|
||||||
|
<property name="toolbar_pane">0</property>
|
||||||
|
<property name="tooltip"></property>
|
||||||
|
<property name="validator_data_type"></property>
|
||||||
|
<property name="validator_style">wxFILTER_NONE</property>
|
||||||
|
<property name="validator_type">wxDefaultValidator</property>
|
||||||
|
<property name="validator_variable"></property>
|
||||||
|
<property name="window_extra_style"></property>
|
||||||
|
<property name="window_name"></property>
|
||||||
|
<property name="window_style"></property>
|
||||||
|
<event name="OnChar"></event>
|
||||||
|
<event name="OnCheckBox"></event>
|
||||||
|
<event name="OnEnterWindow"></event>
|
||||||
|
<event name="OnEraseBackground"></event>
|
||||||
|
<event name="OnKeyDown"></event>
|
||||||
|
<event name="OnKeyUp"></event>
|
||||||
|
<event name="OnKillFocus"></event>
|
||||||
|
<event name="OnLeaveWindow"></event>
|
||||||
|
<event name="OnLeftDClick"></event>
|
||||||
|
<event name="OnLeftDown"></event>
|
||||||
|
<event name="OnLeftUp"></event>
|
||||||
|
<event name="OnMiddleDClick"></event>
|
||||||
|
<event name="OnMiddleDown"></event>
|
||||||
|
<event name="OnMiddleUp"></event>
|
||||||
|
<event name="OnMotion"></event>
|
||||||
|
<event name="OnMouseEvents"></event>
|
||||||
|
<event name="OnMouseWheel"></event>
|
||||||
|
<event name="OnPaint"></event>
|
||||||
|
<event name="OnRightDClick"></event>
|
||||||
|
<event name="OnRightDown"></event>
|
||||||
|
<event name="OnRightUp"></event>
|
||||||
|
<event name="OnSetFocus"></event>
|
||||||
|
<event name="OnSize"></event>
|
||||||
|
<event name="OnUpdateUI"></event>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object class="gbsizeritem" expanded="0">
|
||||||
<property name="border">5</property>
|
<property name="border">5</property>
|
||||||
<property name="colspan">1</property>
|
<property name="colspan">1</property>
|
||||||
<property name="column">0</property>
|
<property name="column">0</property>
|
||||||
|
|||||||
@@ -863,7 +863,7 @@ namespace VeraCrypt
|
|||||||
options->Quick = QuickFormatEnabled;
|
options->Quick = QuickFormatEnabled;
|
||||||
options->Size = VolumeSize;
|
options->Size = VolumeSize;
|
||||||
options->Type = OuterVolume ? VolumeType::Normal : SelectedVolumeType;
|
options->Type = OuterVolume ? VolumeType::Normal : SelectedVolumeType;
|
||||||
options->VolumeHeaderKdf = Pkcs5Kdf::GetAlgorithm (*SelectedHash);
|
options->VolumeHeaderKdf = Pkcs5Kdf::GetAlgorithm (*SelectedHash, false);
|
||||||
|
|
||||||
Creator.reset (new VolumeCreator);
|
Creator.reset (new VolumeCreator);
|
||||||
VolumeCreatorThreadRoutine routine(options, Creator);
|
VolumeCreatorThreadRoutine routine(options, Creator);
|
||||||
@@ -941,7 +941,7 @@ namespace VeraCrypt
|
|||||||
});
|
});
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
shared_ptr <Volume> outerVolume = Core->OpenVolume (make_shared <VolumePath> (SelectedVolumePath), true, Password, Kdf, Keyfiles, VolumeProtection::ReadOnly);
|
shared_ptr <Volume> outerVolume = Core->OpenVolume (make_shared <VolumePath> (SelectedVolumePath), true, Password, Kdf, false, Keyfiles, VolumeProtection::ReadOnly);
|
||||||
MaxHiddenVolumeSize = Core->GetMaxHiddenVolumeSize (outerVolume);
|
MaxHiddenVolumeSize = Core->GetMaxHiddenVolumeSize (outerVolume);
|
||||||
|
|
||||||
// Add a reserve (in case the user mounts the outer volume and creates new files
|
// Add a reserve (in case the user mounts the outer volume and creates new files
|
||||||
|
|||||||
12
src/Main/Forms/VolumePasswordPanel.cpp
Executable file → Normal file
12
src/Main/Forms/VolumePasswordPanel.cpp
Executable file → Normal file
@@ -14,7 +14,7 @@
|
|||||||
|
|
||||||
namespace VeraCrypt
|
namespace VeraCrypt
|
||||||
{
|
{
|
||||||
VolumePasswordPanel::VolumePasswordPanel (wxWindow* parent, shared_ptr <VolumePassword> password, shared_ptr <KeyfileList> keyfiles, bool enableCache, bool enablePassword, bool enableKeyfiles, bool enableConfirmation, bool enablePkcs5Prf, bool isMountPassword, const wxString &passwordLabel)
|
VolumePasswordPanel::VolumePasswordPanel (wxWindow* parent, shared_ptr <VolumePassword> password, bool disableTruecryptMode, shared_ptr <KeyfileList> keyfiles, bool enableCache, bool enablePassword, bool enableKeyfiles, bool enableConfirmation, bool enablePkcs5Prf, bool isMountPassword, const wxString &passwordLabel)
|
||||||
: VolumePasswordPanelBase (parent), Keyfiles (new KeyfileList)
|
: VolumePasswordPanelBase (parent), Keyfiles (new KeyfileList)
|
||||||
{
|
{
|
||||||
if (keyfiles)
|
if (keyfiles)
|
||||||
@@ -63,6 +63,7 @@ namespace VeraCrypt
|
|||||||
|
|
||||||
Pkcs5PrfStaticText->Show (enablePkcs5Prf);
|
Pkcs5PrfStaticText->Show (enablePkcs5Prf);
|
||||||
Pkcs5PrfChoice->Show (enablePkcs5Prf);
|
Pkcs5PrfChoice->Show (enablePkcs5Prf);
|
||||||
|
TrueCryptModeCheckBox->Show (!disableTruecryptMode);
|
||||||
HeaderWipeCountText->Show (enablePkcs5Prf && !isMountPassword);
|
HeaderWipeCountText->Show (enablePkcs5Prf && !isMountPassword);
|
||||||
HeaderWipeCount->Show (enablePkcs5Prf && !isMountPassword);
|
HeaderWipeCount->Show (enablePkcs5Prf && !isMountPassword);
|
||||||
|
|
||||||
@@ -74,7 +75,7 @@ namespace VeraCrypt
|
|||||||
Pkcs5PrfChoice->Delete (0);
|
Pkcs5PrfChoice->Delete (0);
|
||||||
Pkcs5PrfChoice->Append (LangString["AUTODETECTION"]);
|
Pkcs5PrfChoice->Append (LangString["AUTODETECTION"]);
|
||||||
}
|
}
|
||||||
foreach_ref (const Pkcs5Kdf &kdf, Pkcs5Kdf::GetAvailableAlgorithms())
|
foreach_ref (const Pkcs5Kdf &kdf, Pkcs5Kdf::GetAvailableAlgorithms(false))
|
||||||
{
|
{
|
||||||
if (!kdf.IsDeprecated() || isMountPassword)
|
if (!kdf.IsDeprecated() || isMountPassword)
|
||||||
Pkcs5PrfChoice->Append (kdf.GetName());
|
Pkcs5PrfChoice->Append (kdf.GetName());
|
||||||
@@ -190,7 +191,7 @@ namespace VeraCrypt
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
return Pkcs5Kdf::GetAlgorithm (wstring (Pkcs5PrfChoice->GetStringSelection()));
|
return Pkcs5Kdf::GetAlgorithm (wstring (Pkcs5PrfChoice->GetStringSelection()), GetTrueCryptMode());
|
||||||
}
|
}
|
||||||
catch (ParameterIncorrect&)
|
catch (ParameterIncorrect&)
|
||||||
{
|
{
|
||||||
@@ -198,6 +199,11 @@ namespace VeraCrypt
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool VolumePasswordPanel::GetTrueCryptMode () const
|
||||||
|
{
|
||||||
|
return TrueCryptModeCheckBox->GetValue ();
|
||||||
|
}
|
||||||
|
|
||||||
int VolumePasswordPanel::GetHeaderWipeCount () const
|
int VolumePasswordPanel::GetHeaderWipeCount () const
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
|
|||||||
3
src/Main/Forms/VolumePasswordPanel.h
Executable file → Normal file
3
src/Main/Forms/VolumePasswordPanel.h
Executable file → Normal file
@@ -18,13 +18,14 @@ namespace VeraCrypt
|
|||||||
class VolumePasswordPanel : public VolumePasswordPanelBase
|
class VolumePasswordPanel : public VolumePasswordPanelBase
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
VolumePasswordPanel (wxWindow* parent, shared_ptr <VolumePassword> password, shared_ptr <KeyfileList> keyfiles, bool enableCache = false, bool enablePassword = true, bool enableKeyfiles = true, bool enableConfirmation = false, bool enablePkcs5Prf = false, bool isMountPassword = false, const wxString &passwordLabel = wxString());
|
VolumePasswordPanel (wxWindow* parent, shared_ptr <VolumePassword> password, bool disableTruecryptMode, shared_ptr <KeyfileList> keyfiles, bool enableCache = false, bool enablePassword = true, bool enableKeyfiles = true, bool enableConfirmation = false, bool enablePkcs5Prf = false, bool isMountPassword = false, const wxString &passwordLabel = wxString());
|
||||||
virtual ~VolumePasswordPanel ();
|
virtual ~VolumePasswordPanel ();
|
||||||
|
|
||||||
void AddKeyfile (shared_ptr <Keyfile> keyfile);
|
void AddKeyfile (shared_ptr <Keyfile> keyfile);
|
||||||
shared_ptr <KeyfileList> GetKeyfiles () const { return UseKeyfilesCheckBox->IsChecked() ? Keyfiles : shared_ptr <KeyfileList> (); }
|
shared_ptr <KeyfileList> GetKeyfiles () const { return UseKeyfilesCheckBox->IsChecked() ? Keyfiles : shared_ptr <KeyfileList> (); }
|
||||||
shared_ptr <VolumePassword> GetPassword () const;
|
shared_ptr <VolumePassword> GetPassword () const;
|
||||||
shared_ptr <Pkcs5Kdf> GetPkcs5Kdf () const;
|
shared_ptr <Pkcs5Kdf> GetPkcs5Kdf () const;
|
||||||
|
bool GetTrueCryptMode () const;
|
||||||
int GetHeaderWipeCount () const;
|
int GetHeaderWipeCount () const;
|
||||||
void SetCacheCheckBoxValidator (const wxGenericValidator &validator) { CacheCheckBox->SetValidator (validator); }
|
void SetCacheCheckBoxValidator (const wxGenericValidator &validator) { CacheCheckBox->SetValidator (validator); }
|
||||||
void SetFocusToPasswordTextCtrl () { PasswordTextCtrl->SetSelection (-1, -1); PasswordTextCtrl->SetFocus(); }
|
void SetFocusToPasswordTextCtrl () { PasswordTextCtrl->SetSelection (-1, -1); PasswordTextCtrl->SetFocus(); }
|
||||||
|
|||||||
2
src/Main/Forms/VolumePasswordWizardPage.cpp
Executable file → Normal file
2
src/Main/Forms/VolumePasswordWizardPage.cpp
Executable file → Normal file
@@ -15,7 +15,7 @@ namespace VeraCrypt
|
|||||||
VolumePasswordWizardPage::VolumePasswordWizardPage (wxPanel* parent, shared_ptr <VolumePassword> password, shared_ptr <KeyfileList> keyfiles, bool enableConfirmation)
|
VolumePasswordWizardPage::VolumePasswordWizardPage (wxPanel* parent, shared_ptr <VolumePassword> password, shared_ptr <KeyfileList> keyfiles, bool enableConfirmation)
|
||||||
: VolumePasswordWizardPageBase (parent), ConfirmationMode (enableConfirmation)
|
: VolumePasswordWizardPageBase (parent), ConfirmationMode (enableConfirmation)
|
||||||
{
|
{
|
||||||
PasswordPanel = new VolumePasswordPanel (this, password, keyfiles, false, true, true, enableConfirmation, !enableConfirmation, !enableConfirmation);
|
PasswordPanel = new VolumePasswordPanel (this, password, true, keyfiles, false, true, true, enableConfirmation, !enableConfirmation, !enableConfirmation);
|
||||||
PasswordPanel->UpdateEvent.Connect (EventConnector <VolumePasswordWizardPage> (this, &VolumePasswordWizardPage::OnPasswordPanelUpdate));
|
PasswordPanel->UpdateEvent.Connect (EventConnector <VolumePasswordWizardPage> (this, &VolumePasswordWizardPage::OnPasswordPanelUpdate));
|
||||||
|
|
||||||
PasswordPanelSizer->Add (PasswordPanel, 1, wxALL | wxEXPAND);
|
PasswordPanelSizer->Add (PasswordPanel, 1, wxALL | wxEXPAND);
|
||||||
|
|||||||
@@ -32,7 +32,7 @@ namespace VeraCrypt
|
|||||||
AppendToList ("VIRTUAL_DEVICE", wstring (volumeInfo.VirtualDevice));
|
AppendToList ("VIRTUAL_DEVICE", wstring (volumeInfo.VirtualDevice));
|
||||||
#endif
|
#endif
|
||||||
AppendToList ("SIZE", Gui->SizeToString (volumeInfo.Size));
|
AppendToList ("SIZE", Gui->SizeToString (volumeInfo.Size));
|
||||||
AppendToList ("TYPE", Gui->VolumeTypeToString (volumeInfo.Type, volumeInfo.Protection));
|
AppendToList ("TYPE", Gui->VolumeTypeToString (volumeInfo.Type, volumeInfo.TrueCryptMode, volumeInfo.Protection));
|
||||||
AppendToList ("READ_ONLY", LangString [volumeInfo.Protection == VolumeProtection::ReadOnly ? "UISTR_YES" : "UISTR_NO"]);
|
AppendToList ("READ_ONLY", LangString [volumeInfo.Protection == VolumeProtection::ReadOnly ? "UISTR_YES" : "UISTR_NO"]);
|
||||||
|
|
||||||
wxString protection;
|
wxString protection;
|
||||||
|
|||||||
11
src/Main/Forms/WaitDialog.cpp
Executable file → Normal file
11
src/Main/Forms/WaitDialog.cpp
Executable file → Normal file
@@ -15,11 +15,12 @@
|
|||||||
namespace VeraCrypt
|
namespace VeraCrypt
|
||||||
{
|
{
|
||||||
DEFINE_EVENT_TYPE(wxEVT_COMMAND_WAITDIALOGTHREAD_COMPLETED)
|
DEFINE_EVENT_TYPE(wxEVT_COMMAND_WAITDIALOGTHREAD_COMPLETED)
|
||||||
|
DEFINE_EVENT_TYPE(wxEVT_COMMAND_WAITDIALOG_ADMIN_PASSWORD)
|
||||||
|
DEFINE_EVENT_TYPE(wxEVT_COMMAND_WAITDIALOG_PIN)
|
||||||
|
DEFINE_EVENT_TYPE(wxEVT_COMMAND_WAITDIALOG_SHOW_MSG)
|
||||||
|
|
||||||
wxThread::ExitCode WaitThread::Entry()
|
wxThread::ExitCode WaitThread::Entry()
|
||||||
{
|
{
|
||||||
wxCommandEvent finishEvent( wxEVT_COMMAND_WAITDIALOGTHREAD_COMPLETED,0);
|
|
||||||
|
|
||||||
m_pRoutine->Execute();
|
m_pRoutine->Execute();
|
||||||
wxQueueEvent (m_pHandler, new wxCommandEvent( wxEVT_COMMAND_WAITDIALOGTHREAD_COMPLETED,0));
|
wxQueueEvent (m_pHandler, new wxCommandEvent( wxEVT_COMMAND_WAITDIALOGTHREAD_COMPLETED,0));
|
||||||
return (wxThread::ExitCode)0; // success
|
return (wxThread::ExitCode)0; // success
|
||||||
@@ -88,7 +89,9 @@ namespace VeraCrypt
|
|||||||
VC_CONVERT_EXCEPTION (InvalidSecurityTokenKeyfilePath);
|
VC_CONVERT_EXCEPTION (InvalidSecurityTokenKeyfilePath);
|
||||||
VC_CONVERT_EXCEPTION (SecurityTokenLibraryNotInitialized);
|
VC_CONVERT_EXCEPTION (SecurityTokenLibraryNotInitialized);
|
||||||
VC_CONVERT_EXCEPTION (SecurityTokenKeyfileAlreadyExists);
|
VC_CONVERT_EXCEPTION (SecurityTokenKeyfileAlreadyExists);
|
||||||
VC_CONVERT_EXCEPTION (SecurityTokenKeyfileNotFound);
|
VC_CONVERT_EXCEPTION (SecurityTokenKeyfileNotFound);
|
||||||
|
VC_CONVERT_EXCEPTION (UnsupportedAlgoInTrueCryptMode);
|
||||||
|
VC_CONVERT_EXCEPTION (UnsupportedTrueCryptFormat);
|
||||||
throw *ex;
|
throw *ex;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
122
src/Main/Forms/WaitDialog.h
Executable file → Normal file
122
src/Main/Forms/WaitDialog.h
Executable file → Normal file
@@ -11,11 +11,16 @@
|
|||||||
|
|
||||||
#include "Forms.h"
|
#include "Forms.h"
|
||||||
#include "Main/Main.h"
|
#include "Main/Main.h"
|
||||||
|
#include "Main/Application.h"
|
||||||
|
#include <wx/msgqueue.h>
|
||||||
|
|
||||||
namespace VeraCrypt
|
namespace VeraCrypt
|
||||||
{
|
{
|
||||||
|
|
||||||
DECLARE_LOCAL_EVENT_TYPE(wxEVT_COMMAND_WAITDIALOGTHREAD_COMPLETED, -1);
|
DECLARE_LOCAL_EVENT_TYPE(wxEVT_COMMAND_WAITDIALOGTHREAD_COMPLETED, -1);
|
||||||
|
DECLARE_LOCAL_EVENT_TYPE(wxEVT_COMMAND_WAITDIALOG_ADMIN_PASSWORD, -1);
|
||||||
|
DECLARE_LOCAL_EVENT_TYPE(wxEVT_COMMAND_WAITDIALOG_PIN, -1);
|
||||||
|
DECLARE_LOCAL_EVENT_TYPE(wxEVT_COMMAND_WAITDIALOG_SHOW_MSG, -1);
|
||||||
|
|
||||||
class WaitDialog;
|
class WaitDialog;
|
||||||
|
|
||||||
@@ -50,6 +55,10 @@ namespace VeraCrypt
|
|||||||
GetSizer()->Fit( this );
|
GetSizer()->Fit( this );
|
||||||
Centre( wxBOTH );
|
Centre( wxBOTH );
|
||||||
Connect( wxID_ANY, wxEVT_COMMAND_WAITDIALOGTHREAD_COMPLETED, wxCommandEventHandler( WaitDialog::OnThreadCompletion ) );
|
Connect( wxID_ANY, wxEVT_COMMAND_WAITDIALOGTHREAD_COMPLETED, wxCommandEventHandler( WaitDialog::OnThreadCompletion ) );
|
||||||
|
Connect( wxID_ANY, wxEVT_COMMAND_WAITDIALOG_ADMIN_PASSWORD, wxCommandEventHandler( WaitDialog::OnAdminPasswordRequest ) );
|
||||||
|
Connect( wxID_ANY, wxEVT_COMMAND_WAITDIALOG_PIN, wxCommandEventHandler( WaitDialog::OnPinRequest ) );
|
||||||
|
Connect( wxID_ANY, wxEVT_COMMAND_WAITDIALOG_SHOW_MSG, wxCommandEventHandler( WaitDialog::OnShowMsg ) );
|
||||||
|
|
||||||
Connect( wxEVT_TIMER, wxTimerEventHandler( WaitDialog::OnProgressTimer ), NULL, this );
|
Connect( wxEVT_TIMER, wxTimerEventHandler( WaitDialog::OnProgressTimer ), NULL, this );
|
||||||
m_thread = new WaitThread(this, pRoutine);
|
m_thread = new WaitThread(this, pRoutine);
|
||||||
}
|
}
|
||||||
@@ -58,6 +67,9 @@ namespace VeraCrypt
|
|||||||
{
|
{
|
||||||
Disconnect( wxEVT_TIMER, wxTimerEventHandler( WaitDialog::OnProgressTimer ));
|
Disconnect( wxEVT_TIMER, wxTimerEventHandler( WaitDialog::OnProgressTimer ));
|
||||||
Disconnect( wxID_ANY, wxEVT_COMMAND_WAITDIALOGTHREAD_COMPLETED, wxCommandEventHandler( WaitDialog::OnThreadCompletion ) );
|
Disconnect( wxID_ANY, wxEVT_COMMAND_WAITDIALOGTHREAD_COMPLETED, wxCommandEventHandler( WaitDialog::OnThreadCompletion ) );
|
||||||
|
Disconnect( wxID_ANY, wxEVT_COMMAND_WAITDIALOG_ADMIN_PASSWORD, wxCommandEventHandler( WaitDialog::OnAdminPasswordRequest ) );
|
||||||
|
Disconnect( wxID_ANY, wxEVT_COMMAND_WAITDIALOG_PIN, wxCommandEventHandler( WaitDialog::OnPinRequest ) );
|
||||||
|
Disconnect( wxID_ANY, wxEVT_COMMAND_WAITDIALOG_SHOW_MSG, wxCommandEventHandler( WaitDialog::OnShowMsg ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void OnWaitDialogInit( wxInitDialogEvent& event )
|
virtual void OnWaitDialogInit( wxInitDialogEvent& event )
|
||||||
@@ -65,12 +77,119 @@ namespace VeraCrypt
|
|||||||
m_thread->Run();
|
m_thread->Run();
|
||||||
m_timer.Start(100);
|
m_timer.Start(100);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int GetCharWidth (wxWindow *window) const
|
||||||
|
{
|
||||||
|
int width;
|
||||||
|
int height;
|
||||||
|
window->GetTextExtent (L"a", &width, &height);
|
||||||
|
|
||||||
|
if (width < 1)
|
||||||
|
return 7;
|
||||||
|
|
||||||
|
return width;
|
||||||
|
}
|
||||||
|
|
||||||
|
class ShowMessageParam
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
wxString m_message;
|
||||||
|
wxString m_caption;
|
||||||
|
long m_style;
|
||||||
|
bool m_topMost;
|
||||||
|
ShowMessageParam(const wxString &message, const wxString &caption,long style, bool topMost)
|
||||||
|
: m_message(message), m_caption(caption), m_style(style), m_topMost(topMost)
|
||||||
|
{}
|
||||||
|
};
|
||||||
|
|
||||||
|
int RequestShowMessage (const wxString &message, const wxString &caption,long style, bool topMost)
|
||||||
|
{
|
||||||
|
long lResult = -1;
|
||||||
|
if (m_queue.IsOk())
|
||||||
|
{
|
||||||
|
wxString sResult;
|
||||||
|
ShowMessageParam* pParam = new ShowMessageParam(message, caption, style, topMost);
|
||||||
|
wxCommandEvent* pEvent = new wxCommandEvent( wxEVT_COMMAND_WAITDIALOG_SHOW_MSG,0);
|
||||||
|
pEvent->SetClientData (pParam);
|
||||||
|
wxQueueEvent (this, pEvent);
|
||||||
|
m_queue.Receive (sResult);
|
||||||
|
sResult.ToLong(&lResult);
|
||||||
|
}
|
||||||
|
return (int) lResult;
|
||||||
|
}
|
||||||
|
|
||||||
|
void RequestAdminPassword (wxString& adminPassword)
|
||||||
|
{
|
||||||
|
if (m_queue.IsOk())
|
||||||
|
{
|
||||||
|
wxQueueEvent (this, new wxCommandEvent( wxEVT_COMMAND_WAITDIALOG_ADMIN_PASSWORD,0));
|
||||||
|
if (wxMSGQUEUE_NO_ERROR != m_queue.Receive (adminPassword))
|
||||||
|
adminPassword = wxT("");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
adminPassword = wxT("");
|
||||||
|
}
|
||||||
|
|
||||||
|
void RequestPin (wxString& pin)
|
||||||
|
{
|
||||||
|
if (m_queue.IsOk())
|
||||||
|
{
|
||||||
|
wxCommandEvent* pEvent = new wxCommandEvent( wxEVT_COMMAND_WAITDIALOG_PIN,0);
|
||||||
|
pEvent->SetString (pin);
|
||||||
|
wxQueueEvent (this, pEvent);
|
||||||
|
if (wxMSGQUEUE_NO_ERROR != m_queue.Receive (pin))
|
||||||
|
pin = wxT("");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
pin = wxT("");
|
||||||
|
}
|
||||||
|
|
||||||
// virtual void OnWaitDialogClose( wxCloseEvent& event ) { }
|
// virtual void OnWaitDialogClose( wxCloseEvent& event ) { }
|
||||||
void OnThreadCompletion(wxCommandEvent &)
|
void OnThreadCompletion(wxCommandEvent &)
|
||||||
{
|
{
|
||||||
|
m_queue.Clear();
|
||||||
EndModal(0);
|
EndModal(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void OnAdminPasswordRequest(wxCommandEvent &)
|
||||||
|
{
|
||||||
|
|
||||||
|
wxPasswordEntryDialog dialog (this, _("Enter your user password or administrator password:"), _("Administrator privileges required"));
|
||||||
|
if (dialog.ShowModal() != wxID_OK)
|
||||||
|
m_queue.Post(wxT(""));
|
||||||
|
else
|
||||||
|
m_queue.Post(dialog.GetValue());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void OnPinRequest(wxCommandEvent &e)
|
||||||
|
{
|
||||||
|
|
||||||
|
wxPasswordEntryDialog dialog (this, wxString::Format (LangString["ENTER_TOKEN_PASSWORD"], e.GetString()), LangString["IDD_TOKEN_PASSWORD"]);
|
||||||
|
dialog.SetSize (wxSize (GetCharWidth (&dialog) * 50, -1));
|
||||||
|
|
||||||
|
if (dialog.ShowModal() != wxID_OK)
|
||||||
|
m_queue.Post(wxT(""));
|
||||||
|
else
|
||||||
|
m_queue.Post(dialog.GetValue());
|
||||||
|
}
|
||||||
|
|
||||||
|
void OnShowMsg(wxCommandEvent &e)
|
||||||
|
{
|
||||||
|
ShowMessageParam* pParam = (ShowMessageParam*) e.GetClientData();
|
||||||
|
if (pParam->m_topMost)
|
||||||
|
{
|
||||||
|
if (!IsActive())
|
||||||
|
RequestUserAttention (wxUSER_ATTENTION_ERROR);
|
||||||
|
|
||||||
|
pParam->m_style |= wxSTAY_ON_TOP;
|
||||||
|
}
|
||||||
|
|
||||||
|
int iResult = wxMessageBox (pParam->m_message, pParam->m_caption, pParam->m_style, this);
|
||||||
|
delete pParam;
|
||||||
|
m_queue.Post(wxString::Format(wxT("%d"), iResult));
|
||||||
|
}
|
||||||
|
|
||||||
void OnProgressTimer(wxTimerEvent& event)
|
void OnProgressTimer(wxTimerEvent& event)
|
||||||
{
|
{
|
||||||
@@ -83,7 +202,8 @@ namespace VeraCrypt
|
|||||||
|
|
||||||
protected:
|
protected:
|
||||||
WaitThread* m_thread;
|
WaitThread* m_thread;
|
||||||
wxTimer m_timer;
|
wxTimer m_timer;
|
||||||
|
wxMessageQueue<wxString> m_queue;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
78
src/Main/GraphicUserInterface.cpp
Executable file → Normal file
78
src/Main/GraphicUserInterface.cpp
Executable file → Normal file
@@ -30,14 +30,14 @@
|
|||||||
#include "Forms/MountOptionsDialog.h"
|
#include "Forms/MountOptionsDialog.h"
|
||||||
#include "Forms/RandomPoolEnrichmentDialog.h"
|
#include "Forms/RandomPoolEnrichmentDialog.h"
|
||||||
#include "Forms/SecurityTokenKeyfilesDialog.h"
|
#include "Forms/SecurityTokenKeyfilesDialog.h"
|
||||||
#include "Forms/WaitDialog.h"
|
|
||||||
|
|
||||||
namespace VeraCrypt
|
namespace VeraCrypt
|
||||||
{
|
{
|
||||||
GraphicUserInterface::GraphicUserInterface () :
|
GraphicUserInterface::GraphicUserInterface () :
|
||||||
ActiveFrame (nullptr),
|
ActiveFrame (nullptr),
|
||||||
BackgroundMode (false),
|
BackgroundMode (false),
|
||||||
mMainFrame (nullptr)
|
mMainFrame (nullptr),
|
||||||
|
mWaitDialog (nullptr)
|
||||||
{
|
{
|
||||||
#ifdef TC_UNIX
|
#ifdef TC_UNIX
|
||||||
signal (SIGHUP, OnSignal);
|
signal (SIGHUP, OnSignal);
|
||||||
@@ -179,6 +179,7 @@ namespace VeraCrypt
|
|||||||
options->PreserveTimestamps,
|
options->PreserveTimestamps,
|
||||||
options->Password,
|
options->Password,
|
||||||
options->Kdf,
|
options->Kdf,
|
||||||
|
false,
|
||||||
options->Keyfiles,
|
options->Keyfiles,
|
||||||
options->Protection,
|
options->Protection,
|
||||||
options->ProtectionPassword,
|
options->ProtectionPassword,
|
||||||
@@ -409,12 +410,22 @@ namespace VeraCrypt
|
|||||||
{
|
{
|
||||||
virtual void operator() (string &passwordStr)
|
virtual void operator() (string &passwordStr)
|
||||||
{
|
{
|
||||||
wxPasswordEntryDialog dialog (Gui->GetActiveWindow(), _("Enter your user password or administrator password:"), _("Administrator privileges required"));
|
|
||||||
|
|
||||||
if (dialog.ShowModal() != wxID_OK)
|
wxString sValue;
|
||||||
throw UserAbort (SRC_POS);
|
if (Gui->GetWaitDialog())
|
||||||
|
{
|
||||||
wstring wPassword (dialog.GetValue()); // A copy of the password is created here by wxWidgets, which cannot be erased
|
Gui->GetWaitDialog()->RequestAdminPassword(sValue);
|
||||||
|
if (sValue.IsEmpty())
|
||||||
|
throw UserAbort (SRC_POS);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
wxPasswordEntryDialog dialog (Gui->GetActiveWindow(), _("Enter your user password or administrator password:"), _("Administrator privileges required"));
|
||||||
|
if (dialog.ShowModal() != wxID_OK)
|
||||||
|
throw UserAbort (SRC_POS);
|
||||||
|
sValue = dialog.GetValue();
|
||||||
|
}
|
||||||
|
wstring wPassword (sValue); // A copy of the password is created here by wxWidgets, which cannot be erased
|
||||||
finally_do_arg (wstring *, &wPassword, { StringConverter::Erase (*finally_arg); });
|
finally_do_arg (wstring *, &wPassword, { StringConverter::Erase (*finally_arg); });
|
||||||
|
|
||||||
StringConverter::ToSingle (wPassword, passwordStr);
|
StringConverter::ToSingle (wPassword, passwordStr);
|
||||||
@@ -525,13 +536,25 @@ namespace VeraCrypt
|
|||||||
if (Gui->GetPreferences().NonInteractive)
|
if (Gui->GetPreferences().NonInteractive)
|
||||||
throw MissingArgument (SRC_POS);
|
throw MissingArgument (SRC_POS);
|
||||||
|
|
||||||
wxPasswordEntryDialog dialog (Gui->GetActiveWindow(), wxString::Format (LangString["ENTER_TOKEN_PASSWORD"], StringConverter::ToWide (passwordStr).c_str()), LangString["IDD_TOKEN_PASSWORD"]);
|
wxString sValue;
|
||||||
dialog.SetSize (wxSize (Gui->GetCharWidth (&dialog) * 50, -1));
|
if (Gui->GetWaitDialog())
|
||||||
|
{
|
||||||
|
sValue = StringConverter::ToWide (passwordStr).c_str();
|
||||||
|
Gui->GetWaitDialog()->RequestPin (sValue);
|
||||||
|
if (sValue.IsEmpty ())
|
||||||
|
throw UserAbort (SRC_POS);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
wxPasswordEntryDialog dialog (Gui->GetActiveWindow(), wxString::Format (LangString["ENTER_TOKEN_PASSWORD"], StringConverter::ToWide (passwordStr).c_str()), LangString["IDD_TOKEN_PASSWORD"]);
|
||||||
|
dialog.SetSize (wxSize (Gui->GetCharWidth (&dialog) * 50, -1));
|
||||||
|
|
||||||
if (dialog.ShowModal() != wxID_OK)
|
if (dialog.ShowModal() != wxID_OK)
|
||||||
throw UserAbort (SRC_POS);
|
throw UserAbort (SRC_POS);
|
||||||
|
sValue = dialog.GetValue();
|
||||||
|
}
|
||||||
|
|
||||||
wstring wPassword (dialog.GetValue()); // A copy of the password is created here by wxWidgets, which cannot be erased
|
wstring wPassword (sValue); // A copy of the password is created here by wxWidgets, which cannot be erased
|
||||||
finally_do_arg (wstring *, &wPassword, { StringConverter::Erase (*finally_arg); });
|
finally_do_arg (wstring *, &wPassword, { StringConverter::Erase (*finally_arg); });
|
||||||
|
|
||||||
StringConverter::ToSingle (wPassword, passwordStr);
|
StringConverter::ToSingle (wPassword, passwordStr);
|
||||||
@@ -1273,6 +1296,7 @@ namespace VeraCrypt
|
|||||||
options.PreserveTimestamps,
|
options.PreserveTimestamps,
|
||||||
options.Password,
|
options.Password,
|
||||||
options.Kdf,
|
options.Kdf,
|
||||||
|
options.TrueCryptMode,
|
||||||
options.Keyfiles,
|
options.Keyfiles,
|
||||||
options.Protection,
|
options.Protection,
|
||||||
options.ProtectionPassword,
|
options.ProtectionPassword,
|
||||||
@@ -1392,11 +1416,11 @@ namespace VeraCrypt
|
|||||||
|
|
||||||
// Decrypt header
|
// Decrypt header
|
||||||
shared_ptr <VolumePassword> passwordKey = Keyfile::ApplyListToPassword (options.Keyfiles, options.Password);
|
shared_ptr <VolumePassword> passwordKey = Keyfile::ApplyListToPassword (options.Keyfiles, options.Password);
|
||||||
Pkcs5KdfList keyDerivationFunctions = layout->GetSupportedKeyDerivationFunctions();
|
Pkcs5KdfList keyDerivationFunctions = layout->GetSupportedKeyDerivationFunctions(options.TrueCryptMode);
|
||||||
EncryptionAlgorithmList encryptionAlgorithms = layout->GetSupportedEncryptionAlgorithms();
|
EncryptionAlgorithmList encryptionAlgorithms = layout->GetSupportedEncryptionAlgorithms();
|
||||||
EncryptionModeList encryptionModes = layout->GetSupportedEncryptionModes();
|
EncryptionModeList encryptionModes = layout->GetSupportedEncryptionModes();
|
||||||
|
|
||||||
DecryptThreadRoutine decryptRoutine(layout->GetHeader(), headerBuffer, *passwordKey, options.Kdf, keyDerivationFunctions, encryptionAlgorithms, encryptionModes);
|
DecryptThreadRoutine decryptRoutine(layout->GetHeader(), headerBuffer, *passwordKey, options.Kdf, options.TrueCryptMode, keyDerivationFunctions, encryptionAlgorithms, encryptionModes);
|
||||||
WaitDialog decryptDlg(parent, LangString["IDT_STATIC_MODAL_WAIT_DLG_INFO"], &decryptRoutine);
|
WaitDialog decryptDlg(parent, LangString["IDT_STATIC_MODAL_WAIT_DLG_INFO"], &decryptRoutine);
|
||||||
decryptDlg.Run();
|
decryptDlg.Run();
|
||||||
|
|
||||||
@@ -1713,15 +1737,22 @@ namespace VeraCrypt
|
|||||||
caption.clear();
|
caption.clear();
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
if (topMost)
|
if (mWaitDialog)
|
||||||
{
|
{
|
||||||
if (!IsActive())
|
return mWaitDialog->RequestShowMessage(subMessage, caption, style, topMost);
|
||||||
mMainFrame->RequestUserAttention (wxUSER_ATTENTION_ERROR);
|
|
||||||
|
|
||||||
style |= wxSTAY_ON_TOP;
|
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (topMost)
|
||||||
|
{
|
||||||
|
if (!IsActive())
|
||||||
|
mMainFrame->RequestUserAttention (wxUSER_ATTENTION_ERROR);
|
||||||
|
|
||||||
return wxMessageBox (subMessage, caption, style, GetActiveWindow());
|
style |= wxSTAY_ON_TOP;
|
||||||
|
}
|
||||||
|
|
||||||
|
return wxMessageBox (subMessage, caption, style, GetActiveWindow());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void GraphicUserInterface::ShowWarningTopMost (const wxString &message) const
|
void GraphicUserInterface::ShowWarningTopMost (const wxString &message) const
|
||||||
@@ -1758,6 +1789,8 @@ namespace VeraCrypt
|
|||||||
{
|
{
|
||||||
item.SetText (field);
|
item.SetText (field);
|
||||||
listCtrl->SetItem (item);
|
listCtrl->SetItem (item);
|
||||||
|
if (item.GetColumn() == 3 || item.GetColumn() == 4)
|
||||||
|
listCtrl->SetColumnWidth(item.GetColumn(), wxLIST_AUTOSIZE);
|
||||||
changed = true;
|
changed = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1794,8 +1827,11 @@ namespace VeraCrypt
|
|||||||
{
|
{
|
||||||
MountThreadRoutine routine(options);
|
MountThreadRoutine routine(options);
|
||||||
WaitDialog dlg(GetTopWindow(), LangString["IDT_STATIC_MODAL_WAIT_DLG_INFO"], &routine);
|
WaitDialog dlg(GetTopWindow(), LangString["IDT_STATIC_MODAL_WAIT_DLG_INFO"], &routine);
|
||||||
|
|
||||||
|
mWaitDialog = &dlg;
|
||||||
|
finally_do_arg (WaitDialog**, &mWaitDialog, { *finally_arg = nullptr; });
|
||||||
|
|
||||||
dlg.Run();
|
dlg.Run();
|
||||||
|
|
||||||
return routine.m_pVolume;
|
return routine.m_pVolume;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
8
src/Main/GraphicUserInterface.h
Executable file → Normal file
8
src/Main/GraphicUserInterface.h
Executable file → Normal file
@@ -13,6 +13,7 @@
|
|||||||
#include <utility>
|
#include <utility>
|
||||||
#include "Main.h"
|
#include "Main.h"
|
||||||
#include "UserInterface.h"
|
#include "UserInterface.h"
|
||||||
|
#include "Forms/WaitDialog.h"
|
||||||
|
|
||||||
namespace VeraCrypt
|
namespace VeraCrypt
|
||||||
{
|
{
|
||||||
@@ -29,7 +30,7 @@ namespace VeraCrypt
|
|||||||
virtual void BackupVolumeHeaders (shared_ptr <VolumePath> volumePath) const;
|
virtual void BackupVolumeHeaders (shared_ptr <VolumePath> volumePath) const;
|
||||||
virtual void BeginBusyState () const { wxBeginBusyCursor(); }
|
virtual void BeginBusyState () const { wxBeginBusyCursor(); }
|
||||||
virtual void BeginInteractiveBusyState (wxWindow *window);
|
virtual void BeginInteractiveBusyState (wxWindow *window);
|
||||||
virtual void ChangePassword (shared_ptr <VolumePath> volumePath = shared_ptr <VolumePath>(), shared_ptr <VolumePassword> password = shared_ptr <VolumePassword>(), shared_ptr <Hash> currentHash = shared_ptr <Hash>(), shared_ptr <KeyfileList> keyfiles = shared_ptr <KeyfileList>(), shared_ptr <VolumePassword> newPassword = shared_ptr <VolumePassword>(), shared_ptr <KeyfileList> newKeyfiles = shared_ptr <KeyfileList>(), shared_ptr <Hash> newHash = shared_ptr <Hash>()) const { ThrowTextModeRequired(); }
|
virtual void ChangePassword (shared_ptr <VolumePath> volumePath = shared_ptr <VolumePath>(), shared_ptr <VolumePassword> password = shared_ptr <VolumePassword>(), shared_ptr <Hash> currentHash = shared_ptr <Hash>(), bool truecryptMode = false, shared_ptr <KeyfileList> keyfiles = shared_ptr <KeyfileList>(), shared_ptr <VolumePassword> newPassword = shared_ptr <VolumePassword>(), shared_ptr <KeyfileList> newKeyfiles = shared_ptr <KeyfileList>(), shared_ptr <Hash> newHash = shared_ptr <Hash>()) const { ThrowTextModeRequired(); }
|
||||||
wxHyperlinkCtrl *CreateHyperlink (wxWindow *parent, const wxString &linkUrl, const wxString &linkText) const;
|
wxHyperlinkCtrl *CreateHyperlink (wxWindow *parent, const wxString &linkUrl, const wxString &linkText) const;
|
||||||
virtual void CreateKeyfile (shared_ptr <FilePath> keyfilePath = shared_ptr <FilePath>()) const;
|
virtual void CreateKeyfile (shared_ptr <FilePath> keyfilePath = shared_ptr <FilePath>()) const;
|
||||||
virtual void CreateVolume (shared_ptr <VolumeCreationOptions> options) const { ThrowTextModeRequired(); }
|
virtual void CreateVolume (shared_ptr <VolumeCreationOptions> options) const { ThrowTextModeRequired(); }
|
||||||
@@ -84,12 +85,13 @@ namespace VeraCrypt
|
|||||||
virtual void ShowInfoTopMost (char *langStringId) const { ShowInfoTopMost (LangString[langStringId]); }
|
virtual void ShowInfoTopMost (char *langStringId) const { ShowInfoTopMost (LangString[langStringId]); }
|
||||||
virtual void ShowInfoTopMost (const wxString &message) const;
|
virtual void ShowInfoTopMost (const wxString &message) const;
|
||||||
virtual void ShowWarningTopMost (char *langStringId) const { ShowWarningTopMost (LangString[langStringId]); }
|
virtual void ShowWarningTopMost (char *langStringId) const { ShowWarningTopMost (LangString[langStringId]); }
|
||||||
virtual void ShowWarningTopMost (const wxString &message) const;
|
virtual void ShowWarningTopMost (const wxString &message) const;
|
||||||
virtual bool UpdateListCtrlItem (wxListCtrl *listCtrl, long itemIndex, const vector <wstring> &itemFields) const;
|
virtual bool UpdateListCtrlItem (wxListCtrl *listCtrl, long itemIndex, const vector <wstring> &itemFields) const;
|
||||||
virtual void UserEnrichRandomPool (wxWindow *parent, shared_ptr <Hash> hash = shared_ptr <Hash>()) const;
|
virtual void UserEnrichRandomPool (wxWindow *parent, shared_ptr <Hash> hash = shared_ptr <Hash>()) const;
|
||||||
virtual void Yield () const;
|
virtual void Yield () const;
|
||||||
virtual WaitThreadUI* GetWaitThreadUI(WaitThreadRoutine *pRoutine) const;
|
virtual WaitThreadUI* GetWaitThreadUI(WaitThreadRoutine *pRoutine) const;
|
||||||
virtual shared_ptr <VolumeInfo> MountVolumeThread (MountOptions &options) const;
|
virtual shared_ptr <VolumeInfo> MountVolumeThread (MountOptions &options) const;
|
||||||
|
WaitDialog* GetWaitDialog () { return mWaitDialog; }
|
||||||
|
|
||||||
#ifdef TC_MACOSX
|
#ifdef TC_MACOSX
|
||||||
virtual void MacOpenFile (const wxString &fileName);
|
virtual void MacOpenFile (const wxString &fileName);
|
||||||
@@ -125,6 +127,8 @@ namespace VeraCrypt
|
|||||||
wxFrame *mMainFrame;
|
wxFrame *mMainFrame;
|
||||||
auto_ptr <wxSingleInstanceChecker> SingleInstanceChecker;
|
auto_ptr <wxSingleInstanceChecker> SingleInstanceChecker;
|
||||||
|
|
||||||
|
mutable WaitDialog* mWaitDialog;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
GraphicUserInterface (const GraphicUserInterface &);
|
GraphicUserInterface (const GraphicUserInterface &);
|
||||||
GraphicUserInterface &operator= (const GraphicUserInterface &);
|
GraphicUserInterface &operator= (const GraphicUserInterface &);
|
||||||
|
|||||||
21
src/Main/TextUserInterface.cpp
Executable file → Normal file
21
src/Main/TextUserInterface.cpp
Executable file → Normal file
@@ -248,7 +248,7 @@ namespace VeraCrypt
|
|||||||
shared_ptr <Pkcs5Kdf> kdf;
|
shared_ptr <Pkcs5Kdf> kdf;
|
||||||
if (CmdLine->ArgHash)
|
if (CmdLine->ArgHash)
|
||||||
{
|
{
|
||||||
kdf = Pkcs5Kdf::GetAlgorithm (*CmdLine->ArgHash);
|
kdf = Pkcs5Kdf::GetAlgorithm (*CmdLine->ArgHash, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
shared_ptr <Volume> normalVolume;
|
shared_ptr <Volume> normalVolume;
|
||||||
@@ -281,6 +281,7 @@ namespace VeraCrypt
|
|||||||
options->PreserveTimestamps,
|
options->PreserveTimestamps,
|
||||||
options->Password,
|
options->Password,
|
||||||
kdf,
|
kdf,
|
||||||
|
false,
|
||||||
options->Keyfiles,
|
options->Keyfiles,
|
||||||
options->Protection,
|
options->Protection,
|
||||||
options->ProtectionPassword,
|
options->ProtectionPassword,
|
||||||
@@ -367,7 +368,7 @@ namespace VeraCrypt
|
|||||||
ShowInfo ("VOL_HEADER_BACKED_UP");
|
ShowInfo ("VOL_HEADER_BACKED_UP");
|
||||||
}
|
}
|
||||||
|
|
||||||
void TextUserInterface::ChangePassword (shared_ptr <VolumePath> volumePath, shared_ptr <VolumePassword> password, shared_ptr <Hash> currentHash, shared_ptr <KeyfileList> keyfiles, shared_ptr <VolumePassword> newPassword, shared_ptr <KeyfileList> newKeyfiles, shared_ptr <Hash> newHash) const
|
void TextUserInterface::ChangePassword (shared_ptr <VolumePath> volumePath, shared_ptr <VolumePassword> password, shared_ptr <Hash> currentHash, bool truecryptMode, shared_ptr <KeyfileList> keyfiles, shared_ptr <VolumePassword> newPassword, shared_ptr <KeyfileList> newKeyfiles, shared_ptr <Hash> newHash) const
|
||||||
{
|
{
|
||||||
shared_ptr <Volume> volume;
|
shared_ptr <Volume> volume;
|
||||||
|
|
||||||
@@ -389,7 +390,7 @@ namespace VeraCrypt
|
|||||||
shared_ptr<Pkcs5Kdf> kdf;
|
shared_ptr<Pkcs5Kdf> kdf;
|
||||||
if (currentHash)
|
if (currentHash)
|
||||||
{
|
{
|
||||||
kdf = Pkcs5Kdf::GetAlgorithm (*currentHash);
|
kdf = Pkcs5Kdf::GetAlgorithm (*currentHash, truecryptMode);
|
||||||
}
|
}
|
||||||
|
|
||||||
while (true)
|
while (true)
|
||||||
@@ -420,7 +421,7 @@ namespace VeraCrypt
|
|||||||
try
|
try
|
||||||
{
|
{
|
||||||
keyfiles.reset (new KeyfileList);
|
keyfiles.reset (new KeyfileList);
|
||||||
volume = Core->OpenVolume (volumePath, Preferences.DefaultMountOptions.PreserveTimestamps, password, kdf, keyfiles);
|
volume = Core->OpenVolume (volumePath, Preferences.DefaultMountOptions.PreserveTimestamps, password, kdf, truecryptMode, keyfiles);
|
||||||
}
|
}
|
||||||
catch (PasswordException&)
|
catch (PasswordException&)
|
||||||
{
|
{
|
||||||
@@ -430,7 +431,7 @@ namespace VeraCrypt
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!volume.get())
|
if (!volume.get())
|
||||||
volume = Core->OpenVolume (volumePath, Preferences.DefaultMountOptions.PreserveTimestamps, password, kdf, keyfiles);
|
volume = Core->OpenVolume (volumePath, Preferences.DefaultMountOptions.PreserveTimestamps, password, kdf, truecryptMode, keyfiles);
|
||||||
}
|
}
|
||||||
catch (PasswordException &e)
|
catch (PasswordException &e)
|
||||||
{
|
{
|
||||||
@@ -464,7 +465,7 @@ namespace VeraCrypt
|
|||||||
UserEnrichRandomPool();
|
UserEnrichRandomPool();
|
||||||
|
|
||||||
Core->ChangePassword (volume, newPassword, newKeyfiles,
|
Core->ChangePassword (volume, newPassword, newKeyfiles,
|
||||||
newHash ? Pkcs5Kdf::GetAlgorithm (*newHash) : shared_ptr <Pkcs5Kdf>());
|
newHash ? Pkcs5Kdf::GetAlgorithm (*newHash, false) : shared_ptr <Pkcs5Kdf>());
|
||||||
|
|
||||||
ShowInfo ("PASSWORD_CHANGED");
|
ShowInfo ("PASSWORD_CHANGED");
|
||||||
}
|
}
|
||||||
@@ -692,7 +693,7 @@ namespace VeraCrypt
|
|||||||
|
|
||||||
shared_ptr <Hash> selectedHash = hashes[AskSelection (hashes.size(), 1) - 1];
|
shared_ptr <Hash> selectedHash = hashes[AskSelection (hashes.size(), 1) - 1];
|
||||||
RandomNumberGenerator::SetHash (selectedHash);
|
RandomNumberGenerator::SetHash (selectedHash);
|
||||||
options->VolumeHeaderKdf = Pkcs5Kdf::GetAlgorithm (*selectedHash);
|
options->VolumeHeaderKdf = Pkcs5Kdf::GetAlgorithm (*selectedHash, false);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1298,11 +1299,10 @@ namespace VeraCrypt
|
|||||||
|
|
||||||
// Ask whether to restore internal or external backup
|
// Ask whether to restore internal or external backup
|
||||||
bool restoreInternalBackup;
|
bool restoreInternalBackup;
|
||||||
|
|
||||||
shared_ptr <Pkcs5Kdf> kdf;
|
shared_ptr <Pkcs5Kdf> kdf;
|
||||||
if (CmdLine->ArgHash)
|
if (CmdLine->ArgHash)
|
||||||
{
|
{
|
||||||
kdf = Pkcs5Kdf::GetAlgorithm (*CmdLine->ArgHash);
|
kdf = Pkcs5Kdf::GetAlgorithm (*CmdLine->ArgHash, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
ShowInfo (LangString["HEADER_RESTORE_EXTERNAL_INTERNAL"]);
|
ShowInfo (LangString["HEADER_RESTORE_EXTERNAL_INTERNAL"]);
|
||||||
@@ -1346,6 +1346,7 @@ namespace VeraCrypt
|
|||||||
options.PreserveTimestamps,
|
options.PreserveTimestamps,
|
||||||
options.Password,
|
options.Password,
|
||||||
kdf,
|
kdf,
|
||||||
|
false,
|
||||||
options.Keyfiles,
|
options.Keyfiles,
|
||||||
options.Protection,
|
options.Protection,
|
||||||
options.ProtectionPassword,
|
options.ProtectionPassword,
|
||||||
@@ -1454,7 +1455,7 @@ namespace VeraCrypt
|
|||||||
|
|
||||||
// Decrypt header
|
// Decrypt header
|
||||||
shared_ptr <VolumePassword> passwordKey = Keyfile::ApplyListToPassword (options.Keyfiles, options.Password);
|
shared_ptr <VolumePassword> passwordKey = Keyfile::ApplyListToPassword (options.Keyfiles, options.Password);
|
||||||
if (layout->GetHeader()->Decrypt (headerBuffer, *passwordKey, kdf, layout->GetSupportedKeyDerivationFunctions(), layout->GetSupportedEncryptionAlgorithms(), layout->GetSupportedEncryptionModes()))
|
if (layout->GetHeader()->Decrypt (headerBuffer, *passwordKey, kdf, false, layout->GetSupportedKeyDerivationFunctions(false), layout->GetSupportedEncryptionAlgorithms(), layout->GetSupportedEncryptionModes()))
|
||||||
{
|
{
|
||||||
decryptedLayout = layout;
|
decryptedLayout = layout;
|
||||||
break;
|
break;
|
||||||
|
|||||||
2
src/Main/TextUserInterface.h
Executable file → Normal file
2
src/Main/TextUserInterface.h
Executable file → Normal file
@@ -30,7 +30,7 @@ namespace VeraCrypt
|
|||||||
virtual bool AskYesNo (const wxString &message, bool defaultYes = false, bool warning = false) const;
|
virtual bool AskYesNo (const wxString &message, bool defaultYes = false, bool warning = false) const;
|
||||||
virtual void BackupVolumeHeaders (shared_ptr <VolumePath> volumePath) const;
|
virtual void BackupVolumeHeaders (shared_ptr <VolumePath> volumePath) const;
|
||||||
virtual void BeginBusyState () const { }
|
virtual void BeginBusyState () const { }
|
||||||
virtual void ChangePassword (shared_ptr <VolumePath> volumePath = shared_ptr <VolumePath>(), shared_ptr <VolumePassword> password = shared_ptr <VolumePassword>(), shared_ptr <Hash> currentHash = shared_ptr <Hash>(), shared_ptr <KeyfileList> keyfiles = shared_ptr <KeyfileList>(), shared_ptr <VolumePassword> newPassword = shared_ptr <VolumePassword>(), shared_ptr <KeyfileList> newKeyfiles = shared_ptr <KeyfileList>(), shared_ptr <Hash> newHash = shared_ptr <Hash>()) const;
|
virtual void ChangePassword (shared_ptr <VolumePath> volumePath = shared_ptr <VolumePath>(), shared_ptr <VolumePassword> password = shared_ptr <VolumePassword>(), shared_ptr <Hash> currentHash = shared_ptr <Hash>(), bool truecryptMode = false, shared_ptr <KeyfileList> keyfiles = shared_ptr <KeyfileList>(), shared_ptr <VolumePassword> newPassword = shared_ptr <VolumePassword>(), shared_ptr <KeyfileList> newKeyfiles = shared_ptr <KeyfileList>(), shared_ptr <Hash> newHash = shared_ptr <Hash>()) const;
|
||||||
virtual void CreateKeyfile (shared_ptr <FilePath> keyfilePath = shared_ptr <FilePath>()) const;
|
virtual void CreateKeyfile (shared_ptr <FilePath> keyfilePath = shared_ptr <FilePath>()) const;
|
||||||
virtual void CreateVolume (shared_ptr <VolumeCreationOptions> options) const;
|
virtual void CreateVolume (shared_ptr <VolumeCreationOptions> options) const;
|
||||||
virtual void DeleteSecurityTokenKeyfiles () const;
|
virtual void DeleteSecurityTokenKeyfiles () const;
|
||||||
|
|||||||
35
src/Main/UserInterface.cpp
Executable file → Normal file
35
src/Main/UserInterface.cpp
Executable file → Normal file
@@ -249,7 +249,7 @@ namespace VeraCrypt
|
|||||||
#endif
|
#endif
|
||||||
prop << LangString["MOUNT_POINT"] << L": " << wstring (volume.MountPoint) << L'\n';
|
prop << LangString["MOUNT_POINT"] << L": " << wstring (volume.MountPoint) << L'\n';
|
||||||
prop << LangString["SIZE"] << L": " << SizeToString (volume.Size) << L'\n';
|
prop << LangString["SIZE"] << L": " << SizeToString (volume.Size) << L'\n';
|
||||||
prop << LangString["TYPE"] << L": " << VolumeTypeToString (volume.Type, volume.Protection) << L'\n';
|
prop << LangString["TYPE"] << L": " << VolumeTypeToString (volume.Type, volume.TrueCryptMode, volume.Protection) << L'\n';
|
||||||
|
|
||||||
prop << LangString["READ_ONLY"] << L": " << LangString [volume.Protection == VolumeProtection::ReadOnly ? "UISTR_YES" : "UISTR_NO"] << L'\n';
|
prop << LangString["READ_ONLY"] << L": " << LangString [volume.Protection == VolumeProtection::ReadOnly ? "UISTR_YES" : "UISTR_NO"] << L'\n';
|
||||||
|
|
||||||
@@ -296,7 +296,7 @@ namespace VeraCrypt
|
|||||||
ShowString (prop);
|
ShowString (prop);
|
||||||
}
|
}
|
||||||
|
|
||||||
wxString UserInterface::ExceptionToMessage (const exception &ex) const
|
wxString UserInterface::ExceptionToMessage (const exception &ex)
|
||||||
{
|
{
|
||||||
wxString message;
|
wxString message;
|
||||||
|
|
||||||
@@ -365,7 +365,7 @@ namespace VeraCrypt
|
|||||||
return StringConverter::ToWide (typeName) + L" at " + StringConverter::ToWide (ex.what());
|
return StringConverter::ToWide (typeName) + L" at " + StringConverter::ToWide (ex.what());
|
||||||
}
|
}
|
||||||
|
|
||||||
wxString UserInterface::ExceptionToString (const Exception &ex) const
|
wxString UserInterface::ExceptionToString (const Exception &ex)
|
||||||
{
|
{
|
||||||
// Error messages
|
// Error messages
|
||||||
const ErrorMessage *errMsgEx = dynamic_cast <const ErrorMessage *> (&ex);
|
const ErrorMessage *errMsgEx = dynamic_cast <const ErrorMessage *> (&ex);
|
||||||
@@ -436,7 +436,7 @@ namespace VeraCrypt
|
|||||||
return ExceptionTypeToString (typeid (ex));
|
return ExceptionTypeToString (typeid (ex));
|
||||||
}
|
}
|
||||||
|
|
||||||
wxString UserInterface::ExceptionTypeToString (const std::type_info &ex) const
|
wxString UserInterface::ExceptionTypeToString (const std::type_info &ex)
|
||||||
{
|
{
|
||||||
#define EX2MSG(exception, message) do { if (ex == typeid (exception)) return (message); } while (false)
|
#define EX2MSG(exception, message) do { if (ex == typeid (exception)) return (message); } while (false)
|
||||||
EX2MSG (DriveLetterUnavailable, LangString["DRIVE_LETTER_UNAVAILABLE"]);
|
EX2MSG (DriveLetterUnavailable, LangString["DRIVE_LETTER_UNAVAILABLE"]);
|
||||||
@@ -483,6 +483,8 @@ namespace VeraCrypt
|
|||||||
EX2MSG (VolumeEncryptionNotCompleted, LangString["ERR_ENCRYPTION_NOT_COMPLETED"]);
|
EX2MSG (VolumeEncryptionNotCompleted, LangString["ERR_ENCRYPTION_NOT_COMPLETED"]);
|
||||||
EX2MSG (VolumeHostInUse, _("The host file/device is already in use."));
|
EX2MSG (VolumeHostInUse, _("The host file/device is already in use."));
|
||||||
EX2MSG (VolumeSlotUnavailable, _("Volume slot unavailable."));
|
EX2MSG (VolumeSlotUnavailable, _("Volume slot unavailable."));
|
||||||
|
EX2MSG (UnsupportedAlgoInTrueCryptMode, LangString["ALGO_NOT_SUPPORTED_FOR_TRUECRYPT_MODE"]);
|
||||||
|
EX2MSG (UnsupportedTrueCryptFormat, LangString["UNSUPPORTED_TRUECRYPT_FORMAT"]);
|
||||||
|
|
||||||
#ifdef TC_MACOSX
|
#ifdef TC_MACOSX
|
||||||
EX2MSG (HigherFuseVersionRequired, _("VeraCrypt requires OSXFUSE 2.3 or later with MacFUSE compatibility layer installer.\nPlease ensure that you have selected this compatibility layer during OSXFUSE installation."));
|
EX2MSG (HigherFuseVersionRequired, _("VeraCrypt requires OSXFUSE 2.3 or later with MacFUSE compatibility layer installer.\nPlease ensure that you have selected this compatibility layer during OSXFUSE installation."));
|
||||||
@@ -885,9 +887,10 @@ namespace VeraCrypt
|
|||||||
cmdLine.ArgMountOptions.Password = cmdLine.ArgPassword;
|
cmdLine.ArgMountOptions.Password = cmdLine.ArgPassword;
|
||||||
cmdLine.ArgMountOptions.Keyfiles = cmdLine.ArgKeyfiles;
|
cmdLine.ArgMountOptions.Keyfiles = cmdLine.ArgKeyfiles;
|
||||||
cmdLine.ArgMountOptions.SharedAccessAllowed = cmdLine.ArgForce;
|
cmdLine.ArgMountOptions.SharedAccessAllowed = cmdLine.ArgForce;
|
||||||
|
cmdLine.ArgMountOptions.TrueCryptMode = cmdLine.ArgTrueCryptMode;
|
||||||
if (cmdLine.ArgHash)
|
if (cmdLine.ArgHash)
|
||||||
{
|
{
|
||||||
cmdLine.ArgMountOptions.Kdf = Pkcs5Kdf::GetAlgorithm (*cmdLine.ArgHash);
|
cmdLine.ArgMountOptions.Kdf = Pkcs5Kdf::GetAlgorithm (*cmdLine.ArgHash, cmdLine.ArgTrueCryptMode);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -972,7 +975,7 @@ namespace VeraCrypt
|
|||||||
return true;
|
return true;
|
||||||
|
|
||||||
case CommandId::ChangePassword:
|
case CommandId::ChangePassword:
|
||||||
ChangePassword (cmdLine.ArgVolumePath, cmdLine.ArgPassword, cmdLine.ArgCurrentHash, cmdLine.ArgKeyfiles, cmdLine.ArgNewPassword, cmdLine.ArgNewKeyfiles, cmdLine.ArgHash);
|
ChangePassword (cmdLine.ArgVolumePath, cmdLine.ArgPassword, cmdLine.ArgCurrentHash, cmdLine.ArgTrueCryptMode, cmdLine.ArgKeyfiles, cmdLine.ArgNewPassword, cmdLine.ArgNewKeyfiles, cmdLine.ArgHash);
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
case CommandId::CreateKeyfile:
|
case CommandId::CreateKeyfile:
|
||||||
@@ -985,7 +988,7 @@ namespace VeraCrypt
|
|||||||
|
|
||||||
if (cmdLine.ArgHash)
|
if (cmdLine.ArgHash)
|
||||||
{
|
{
|
||||||
options->VolumeHeaderKdf = Pkcs5Kdf::GetAlgorithm (*cmdLine.ArgHash);
|
options->VolumeHeaderKdf = Pkcs5Kdf::GetAlgorithm (*cmdLine.ArgHash, false);
|
||||||
RandomNumberGenerator::SetHash (cmdLine.ArgHash);
|
RandomNumberGenerator::SetHash (cmdLine.ArgHash);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1484,19 +1487,27 @@ namespace VeraCrypt
|
|||||||
return dateStr;
|
return dateStr;
|
||||||
}
|
}
|
||||||
|
|
||||||
wxString UserInterface::VolumeTypeToString (VolumeType::Enum type, VolumeProtection::Enum protection) const
|
wxString UserInterface::VolumeTypeToString (VolumeType::Enum type, bool truecryptMode, VolumeProtection::Enum protection) const
|
||||||
{
|
{
|
||||||
|
wxString sResult;
|
||||||
switch (type)
|
switch (type)
|
||||||
{
|
{
|
||||||
case VolumeType::Normal:
|
case VolumeType::Normal:
|
||||||
return LangString[protection == VolumeProtection::HiddenVolumeReadOnly ? "OUTER" : "NORMAL"];
|
sResult = LangString[protection == VolumeProtection::HiddenVolumeReadOnly ? "OUTER" : "NORMAL"];
|
||||||
|
break;
|
||||||
|
|
||||||
case VolumeType::Hidden:
|
case VolumeType::Hidden:
|
||||||
return LangString["HIDDEN"];
|
sResult = LangString["HIDDEN"];
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
return L"?";
|
sResult = L"?";
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (truecryptMode)
|
||||||
|
sResult = wxT("TrueCrypt-") + sResult;
|
||||||
|
return sResult;
|
||||||
}
|
}
|
||||||
|
|
||||||
#define VC_CONVERT_EXCEPTION(NAME) if (dynamic_cast<NAME*> (ex)) throw (NAME&) *ex;
|
#define VC_CONVERT_EXCEPTION(NAME) if (dynamic_cast<NAME*> (ex)) throw (NAME&) *ex;
|
||||||
@@ -1565,6 +1576,8 @@ namespace VeraCrypt
|
|||||||
VC_CONVERT_EXCEPTION (SecurityTokenKeyfileAlreadyExists);
|
VC_CONVERT_EXCEPTION (SecurityTokenKeyfileAlreadyExists);
|
||||||
VC_CONVERT_EXCEPTION (SecurityTokenKeyfileNotFound);
|
VC_CONVERT_EXCEPTION (SecurityTokenKeyfileNotFound);
|
||||||
VC_CONVERT_EXCEPTION (SystemException);
|
VC_CONVERT_EXCEPTION (SystemException);
|
||||||
|
VC_CONVERT_EXCEPTION (UnsupportedAlgoInTrueCryptMode);
|
||||||
|
VC_CONVERT_EXCEPTION (UnsupportedTrueCryptFormat);
|
||||||
throw *ex;
|
throw *ex;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
10
src/Main/UserInterface.h
Executable file → Normal file
10
src/Main/UserInterface.h
Executable file → Normal file
@@ -29,7 +29,7 @@ namespace VeraCrypt
|
|||||||
virtual bool AskYesNo (const wxString &message, bool defaultYes = false, bool warning = false) const = 0;
|
virtual bool AskYesNo (const wxString &message, bool defaultYes = false, bool warning = false) const = 0;
|
||||||
virtual void BackupVolumeHeaders (shared_ptr <VolumePath> volumePath) const = 0;
|
virtual void BackupVolumeHeaders (shared_ptr <VolumePath> volumePath) const = 0;
|
||||||
virtual void BeginBusyState () const = 0;
|
virtual void BeginBusyState () const = 0;
|
||||||
virtual void ChangePassword (shared_ptr <VolumePath> volumePath = shared_ptr <VolumePath>(), shared_ptr <VolumePassword> password = shared_ptr <VolumePassword>(), shared_ptr <Hash> currentHash = shared_ptr <Hash>(), shared_ptr <KeyfileList> keyfiles = shared_ptr <KeyfileList>(), shared_ptr <VolumePassword> newPassword = shared_ptr <VolumePassword>(), shared_ptr <KeyfileList> newKeyfiles = shared_ptr <KeyfileList>(), shared_ptr <Hash> newHash = shared_ptr <Hash>()) const = 0;
|
virtual void ChangePassword (shared_ptr <VolumePath> volumePath = shared_ptr <VolumePath>(), shared_ptr <VolumePassword> password = shared_ptr <VolumePassword>(), shared_ptr <Hash> currentHash = shared_ptr <Hash>(), bool truecryptMode = false, shared_ptr <KeyfileList> keyfiles = shared_ptr <KeyfileList>(), shared_ptr <VolumePassword> newPassword = shared_ptr <VolumePassword>(), shared_ptr <KeyfileList> newKeyfiles = shared_ptr <KeyfileList>(), shared_ptr <Hash> newHash = shared_ptr <Hash>()) const = 0;
|
||||||
virtual void CheckRequirementsForMountingVolume () const;
|
virtual void CheckRequirementsForMountingVolume () const;
|
||||||
virtual void CloseExplorerWindows (shared_ptr <VolumeInfo> mountedVolume) const;
|
virtual void CloseExplorerWindows (shared_ptr <VolumeInfo> mountedVolume) const;
|
||||||
virtual void CreateKeyfile (shared_ptr <FilePath> keyfilePath = shared_ptr <FilePath>()) const = 0;
|
virtual void CreateKeyfile (shared_ptr <FilePath> keyfilePath = shared_ptr <FilePath>()) const = 0;
|
||||||
@@ -44,7 +44,7 @@ namespace VeraCrypt
|
|||||||
virtual void DoShowString (const wxString &str) const = 0;
|
virtual void DoShowString (const wxString &str) const = 0;
|
||||||
virtual void DoShowWarning (const wxString &message) const = 0;
|
virtual void DoShowWarning (const wxString &message) const = 0;
|
||||||
virtual void EndBusyState () const = 0;
|
virtual void EndBusyState () const = 0;
|
||||||
virtual wxString ExceptionToMessage (const exception &ex) const;
|
static wxString ExceptionToMessage (const exception &ex);
|
||||||
virtual void ExportSecurityTokenKeyfile () const = 0;
|
virtual void ExportSecurityTokenKeyfile () const = 0;
|
||||||
virtual shared_ptr <GetStringFunctor> GetAdminPasswordRequestHandler () = 0;
|
virtual shared_ptr <GetStringFunctor> GetAdminPasswordRequestHandler () = 0;
|
||||||
virtual const UserPreferences &GetPreferences () const { return Preferences; }
|
virtual const UserPreferences &GetPreferences () const { return Preferences; }
|
||||||
@@ -79,7 +79,7 @@ namespace VeraCrypt
|
|||||||
virtual WaitThreadUI* GetWaitThreadUI(WaitThreadRoutine *pRoutine) const { return new WaitThreadUI(pRoutine);}
|
virtual WaitThreadUI* GetWaitThreadUI(WaitThreadRoutine *pRoutine) const { return new WaitThreadUI(pRoutine);}
|
||||||
virtual wxDateTime VolumeTimeToDateTime (VolumeTime volumeTime) const { return wxDateTime ((time_t) (volumeTime / 1000ULL / 1000 / 10 - 134774ULL * 24 * 3600)); }
|
virtual wxDateTime VolumeTimeToDateTime (VolumeTime volumeTime) const { return wxDateTime ((time_t) (volumeTime / 1000ULL / 1000 / 10 - 134774ULL * 24 * 3600)); }
|
||||||
virtual wxString VolumeTimeToString (VolumeTime volumeTime) const;
|
virtual wxString VolumeTimeToString (VolumeTime volumeTime) const;
|
||||||
virtual wxString VolumeTypeToString (VolumeType::Enum type, VolumeProtection::Enum protection) const;
|
virtual wxString VolumeTypeToString (VolumeType::Enum type, bool truecryptMode, VolumeProtection::Enum protection) const;
|
||||||
|
|
||||||
Event PreferencesUpdatedEvent;
|
Event PreferencesUpdatedEvent;
|
||||||
|
|
||||||
@@ -100,8 +100,8 @@ namespace VeraCrypt
|
|||||||
virtual void OnWarning (EventArgs &args);
|
virtual void OnWarning (EventArgs &args);
|
||||||
virtual bool ProcessCommandLine ();
|
virtual bool ProcessCommandLine ();
|
||||||
|
|
||||||
virtual wxString ExceptionToString (const Exception &ex) const;
|
static wxString ExceptionToString (const Exception &ex);
|
||||||
virtual wxString ExceptionTypeToString (const std::type_info &ex) const;
|
static wxString ExceptionTypeToString (const std::type_info &ex);
|
||||||
|
|
||||||
UserPreferences Preferences;
|
UserPreferences Preferences;
|
||||||
UserInterfaceType::Enum InterfaceType;
|
UserInterfaceType::Enum InterfaceType;
|
||||||
|
|||||||
@@ -89,7 +89,9 @@ namespace VeraCrypt
|
|||||||
TC_EXCEPTION (StringConversionFailed); \
|
TC_EXCEPTION (StringConversionFailed); \
|
||||||
TC_EXCEPTION (TestFailed); \
|
TC_EXCEPTION (TestFailed); \
|
||||||
TC_EXCEPTION (TimeOut); \
|
TC_EXCEPTION (TimeOut); \
|
||||||
TC_EXCEPTION (UnknownException); \
|
TC_EXCEPTION (UnknownException); \
|
||||||
|
TC_EXCEPTION (UnsupportedAlgoInTrueCryptMode); \
|
||||||
|
TC_EXCEPTION (UnsupportedTrueCryptFormat); \
|
||||||
TC_EXCEPTION (UserAbort)
|
TC_EXCEPTION (UserAbort)
|
||||||
|
|
||||||
TC_EXCEPTION_SET;
|
TC_EXCEPTION_SET;
|
||||||
|
|||||||
@@ -791,17 +791,17 @@ namespace VeraCrypt
|
|||||||
ConstBufferPtr salt (saltData, sizeof (saltData));
|
ConstBufferPtr salt (saltData, sizeof (saltData));
|
||||||
Buffer derivedKey (4);
|
Buffer derivedKey (4);
|
||||||
|
|
||||||
Pkcs5HmacRipemd160 pkcs5HmacRipemd160;
|
Pkcs5HmacRipemd160 pkcs5HmacRipemd160(false);
|
||||||
pkcs5HmacRipemd160.DeriveKey (derivedKey, password, salt, 5);
|
pkcs5HmacRipemd160.DeriveKey (derivedKey, password, salt, 5);
|
||||||
if (memcmp (derivedKey.Ptr(), "\x7a\x3d\x7c\x03", 4) != 0)
|
if (memcmp (derivedKey.Ptr(), "\x7a\x3d\x7c\x03", 4) != 0)
|
||||||
throw TestFailed (SRC_POS);
|
throw TestFailed (SRC_POS);
|
||||||
|
|
||||||
Pkcs5HmacSha512 pkcs5HmacSha512;
|
Pkcs5HmacSha512 pkcs5HmacSha512(false);
|
||||||
pkcs5HmacSha512.DeriveKey (derivedKey, password, salt, 5);
|
pkcs5HmacSha512.DeriveKey (derivedKey, password, salt, 5);
|
||||||
if (memcmp (derivedKey.Ptr(), "\x13\x64\xae\xf8", 4) != 0)
|
if (memcmp (derivedKey.Ptr(), "\x13\x64\xae\xf8", 4) != 0)
|
||||||
throw TestFailed (SRC_POS);
|
throw TestFailed (SRC_POS);
|
||||||
|
|
||||||
Pkcs5HmacWhirlpool pkcs5HmacWhirlpool;
|
Pkcs5HmacWhirlpool pkcs5HmacWhirlpool(false);
|
||||||
pkcs5HmacWhirlpool.DeriveKey (derivedKey, password, salt, 5);
|
pkcs5HmacWhirlpool.DeriveKey (derivedKey, password, salt, 5);
|
||||||
if (memcmp (derivedKey.Ptr(), "\x50\x7c\x36\x6f", 4) != 0)
|
if (memcmp (derivedKey.Ptr(), "\x50\x7c\x36\x6f", 4) != 0)
|
||||||
throw TestFailed (SRC_POS);
|
throw TestFailed (SRC_POS);
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
|
|
||||||
namespace VeraCrypt
|
namespace VeraCrypt
|
||||||
{
|
{
|
||||||
Pkcs5Kdf::Pkcs5Kdf ()
|
Pkcs5Kdf::Pkcs5Kdf (bool truecryptMode) : m_truecryptMode(truecryptMode)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -25,9 +25,9 @@ namespace VeraCrypt
|
|||||||
DeriveKey (key, password, salt, GetIterationCount());
|
DeriveKey (key, password, salt, GetIterationCount());
|
||||||
}
|
}
|
||||||
|
|
||||||
shared_ptr <Pkcs5Kdf> Pkcs5Kdf::GetAlgorithm (const wstring &name)
|
shared_ptr <Pkcs5Kdf> Pkcs5Kdf::GetAlgorithm (const wstring &name, bool truecryptMode)
|
||||||
{
|
{
|
||||||
foreach (shared_ptr <Pkcs5Kdf> kdf, GetAvailableAlgorithms())
|
foreach (shared_ptr <Pkcs5Kdf> kdf, GetAvailableAlgorithms(truecryptMode))
|
||||||
{
|
{
|
||||||
if (kdf->GetName() == name)
|
if (kdf->GetName() == name)
|
||||||
return kdf;
|
return kdf;
|
||||||
@@ -35,9 +35,9 @@ namespace VeraCrypt
|
|||||||
throw ParameterIncorrect (SRC_POS);
|
throw ParameterIncorrect (SRC_POS);
|
||||||
}
|
}
|
||||||
|
|
||||||
shared_ptr <Pkcs5Kdf> Pkcs5Kdf::GetAlgorithm (const Hash &hash)
|
shared_ptr <Pkcs5Kdf> Pkcs5Kdf::GetAlgorithm (const Hash &hash, bool truecryptMode)
|
||||||
{
|
{
|
||||||
foreach (shared_ptr <Pkcs5Kdf> kdf, GetAvailableAlgorithms())
|
foreach (shared_ptr <Pkcs5Kdf> kdf, GetAvailableAlgorithms(truecryptMode))
|
||||||
{
|
{
|
||||||
if (typeid (*kdf->GetHash()) == typeid (hash))
|
if (typeid (*kdf->GetHash()) == typeid (hash))
|
||||||
return kdf;
|
return kdf;
|
||||||
@@ -46,14 +46,23 @@ namespace VeraCrypt
|
|||||||
throw ParameterIncorrect (SRC_POS);
|
throw ParameterIncorrect (SRC_POS);
|
||||||
}
|
}
|
||||||
|
|
||||||
Pkcs5KdfList Pkcs5Kdf::GetAvailableAlgorithms ()
|
Pkcs5KdfList Pkcs5Kdf::GetAvailableAlgorithms (bool truecryptMode)
|
||||||
{
|
{
|
||||||
Pkcs5KdfList l;
|
Pkcs5KdfList l;
|
||||||
|
|
||||||
l.push_back (shared_ptr <Pkcs5Kdf> (new Pkcs5HmacSha512 ()));
|
if (truecryptMode)
|
||||||
l.push_back (shared_ptr <Pkcs5Kdf> (new Pkcs5HmacWhirlpool ()));
|
{
|
||||||
l.push_back (shared_ptr <Pkcs5Kdf> (new Pkcs5HmacSha256 ()));
|
l.push_back (shared_ptr <Pkcs5Kdf> (new Pkcs5HmacRipemd160 (true)));
|
||||||
l.push_back (shared_ptr <Pkcs5Kdf> (new Pkcs5HmacRipemd160 ()));
|
l.push_back (shared_ptr <Pkcs5Kdf> (new Pkcs5HmacSha512 (true)));
|
||||||
|
l.push_back (shared_ptr <Pkcs5Kdf> (new Pkcs5HmacWhirlpool (true)));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
l.push_back (shared_ptr <Pkcs5Kdf> (new Pkcs5HmacSha512 (false)));
|
||||||
|
l.push_back (shared_ptr <Pkcs5Kdf> (new Pkcs5HmacWhirlpool (false)));
|
||||||
|
l.push_back (shared_ptr <Pkcs5Kdf> (new Pkcs5HmacSha256 ()));
|
||||||
|
l.push_back (shared_ptr <Pkcs5Kdf> (new Pkcs5HmacRipemd160 (false)));
|
||||||
|
}
|
||||||
|
|
||||||
return l;
|
return l;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -25,17 +25,20 @@ namespace VeraCrypt
|
|||||||
|
|
||||||
virtual void DeriveKey (const BufferPtr &key, const VolumePassword &password, const ConstBufferPtr &salt) const;
|
virtual void DeriveKey (const BufferPtr &key, const VolumePassword &password, const ConstBufferPtr &salt) const;
|
||||||
virtual void DeriveKey (const BufferPtr &key, const VolumePassword &password, const ConstBufferPtr &salt, int iterationCount) const = 0;
|
virtual void DeriveKey (const BufferPtr &key, const VolumePassword &password, const ConstBufferPtr &salt, int iterationCount) const = 0;
|
||||||
static shared_ptr <Pkcs5Kdf> GetAlgorithm (const wstring &name);
|
static shared_ptr <Pkcs5Kdf> GetAlgorithm (const wstring &name, bool truecryptMode);
|
||||||
static shared_ptr <Pkcs5Kdf> GetAlgorithm (const Hash &hash);
|
static shared_ptr <Pkcs5Kdf> GetAlgorithm (const Hash &hash, bool truecryptMode);
|
||||||
static Pkcs5KdfList GetAvailableAlgorithms ();
|
static Pkcs5KdfList GetAvailableAlgorithms (bool truecryptMode);
|
||||||
virtual shared_ptr <Hash> GetHash () const = 0;
|
virtual shared_ptr <Hash> GetHash () const = 0;
|
||||||
virtual int GetIterationCount () const = 0;
|
virtual int GetIterationCount () const = 0;
|
||||||
virtual wstring GetName () const = 0;
|
virtual wstring GetName () const = 0;
|
||||||
virtual Pkcs5Kdf* Clone () const = 0;
|
virtual Pkcs5Kdf* Clone () const = 0;
|
||||||
virtual bool IsDeprecated () const { return GetHash()->IsDeprecated(); }
|
virtual bool IsDeprecated () const { return GetHash()->IsDeprecated(); }
|
||||||
|
bool GetTrueCryptMode () const { return m_truecryptMode;}
|
||||||
|
void SetTrueCryptMode (bool truecryptMode) { m_truecryptMode = truecryptMode;}
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
Pkcs5Kdf ();
|
bool m_truecryptMode;
|
||||||
|
Pkcs5Kdf (bool truecryptMode);
|
||||||
|
|
||||||
void ValidateParameters (const BufferPtr &key, const VolumePassword &password, const ConstBufferPtr &salt, int iterationCount) const;
|
void ValidateParameters (const BufferPtr &key, const VolumePassword &password, const ConstBufferPtr &salt, int iterationCount) const;
|
||||||
|
|
||||||
@@ -47,14 +50,14 @@ namespace VeraCrypt
|
|||||||
class Pkcs5HmacRipemd160 : public Pkcs5Kdf
|
class Pkcs5HmacRipemd160 : public Pkcs5Kdf
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
Pkcs5HmacRipemd160 () { }
|
Pkcs5HmacRipemd160 (bool truecryptMode) : Pkcs5Kdf (truecryptMode) { }
|
||||||
virtual ~Pkcs5HmacRipemd160 () { }
|
virtual ~Pkcs5HmacRipemd160 () { }
|
||||||
|
|
||||||
virtual void DeriveKey (const BufferPtr &key, const VolumePassword &password, const ConstBufferPtr &salt, int iterationCount) const;
|
virtual void DeriveKey (const BufferPtr &key, const VolumePassword &password, const ConstBufferPtr &salt, int iterationCount) const;
|
||||||
virtual shared_ptr <Hash> GetHash () const { return shared_ptr <Hash> (new Ripemd160); }
|
virtual shared_ptr <Hash> GetHash () const { return shared_ptr <Hash> (new Ripemd160); }
|
||||||
virtual int GetIterationCount () const { return 655331; }
|
virtual int GetIterationCount () const { return m_truecryptMode? 2000 : 655331; }
|
||||||
virtual wstring GetName () const { return L"HMAC-RIPEMD-160"; }
|
virtual wstring GetName () const { return L"HMAC-RIPEMD-160"; }
|
||||||
virtual Pkcs5Kdf* Clone () const { return new Pkcs5HmacRipemd160(); }
|
virtual Pkcs5Kdf* Clone () const { return new Pkcs5HmacRipemd160(m_truecryptMode); }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Pkcs5HmacRipemd160 (const Pkcs5HmacRipemd160 &);
|
Pkcs5HmacRipemd160 (const Pkcs5HmacRipemd160 &);
|
||||||
@@ -64,14 +67,14 @@ namespace VeraCrypt
|
|||||||
class Pkcs5HmacRipemd160_1000 : public Pkcs5Kdf
|
class Pkcs5HmacRipemd160_1000 : public Pkcs5Kdf
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
Pkcs5HmacRipemd160_1000 () { }
|
Pkcs5HmacRipemd160_1000 (bool truecryptMode) : Pkcs5Kdf(truecryptMode) { }
|
||||||
virtual ~Pkcs5HmacRipemd160_1000 () { }
|
virtual ~Pkcs5HmacRipemd160_1000 () { }
|
||||||
|
|
||||||
virtual void DeriveKey (const BufferPtr &key, const VolumePassword &password, const ConstBufferPtr &salt, int iterationCount) const;
|
virtual void DeriveKey (const BufferPtr &key, const VolumePassword &password, const ConstBufferPtr &salt, int iterationCount) const;
|
||||||
virtual shared_ptr <Hash> GetHash () const { return shared_ptr <Hash> (new Ripemd160); }
|
virtual shared_ptr <Hash> GetHash () const { return shared_ptr <Hash> (new Ripemd160); }
|
||||||
virtual int GetIterationCount () const { return 327661; }
|
virtual int GetIterationCount () const { return m_truecryptMode? 1000 : 327661; }
|
||||||
virtual wstring GetName () const { return L"HMAC-RIPEMD-160"; }
|
virtual wstring GetName () const { return L"HMAC-RIPEMD-160"; }
|
||||||
virtual Pkcs5Kdf* Clone () const { return new Pkcs5HmacRipemd160_1000(); }
|
virtual Pkcs5Kdf* Clone () const { return new Pkcs5HmacRipemd160_1000(m_truecryptMode); }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Pkcs5HmacRipemd160_1000 (const Pkcs5HmacRipemd160_1000 &);
|
Pkcs5HmacRipemd160_1000 (const Pkcs5HmacRipemd160_1000 &);
|
||||||
@@ -81,7 +84,7 @@ namespace VeraCrypt
|
|||||||
class Pkcs5HmacSha256_Boot : public Pkcs5Kdf
|
class Pkcs5HmacSha256_Boot : public Pkcs5Kdf
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
Pkcs5HmacSha256_Boot () { }
|
Pkcs5HmacSha256_Boot () : Pkcs5Kdf(false) { }
|
||||||
virtual ~Pkcs5HmacSha256_Boot () { }
|
virtual ~Pkcs5HmacSha256_Boot () { }
|
||||||
|
|
||||||
virtual void DeriveKey (const BufferPtr &key, const VolumePassword &password, const ConstBufferPtr &salt, int iterationCount) const;
|
virtual void DeriveKey (const BufferPtr &key, const VolumePassword &password, const ConstBufferPtr &salt, int iterationCount) const;
|
||||||
@@ -98,7 +101,7 @@ namespace VeraCrypt
|
|||||||
class Pkcs5HmacSha256 : public Pkcs5Kdf
|
class Pkcs5HmacSha256 : public Pkcs5Kdf
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
Pkcs5HmacSha256 () { }
|
Pkcs5HmacSha256 () : Pkcs5Kdf(false) { }
|
||||||
virtual ~Pkcs5HmacSha256 () { }
|
virtual ~Pkcs5HmacSha256 () { }
|
||||||
|
|
||||||
virtual void DeriveKey (const BufferPtr &key, const VolumePassword &password, const ConstBufferPtr &salt, int iterationCount) const;
|
virtual void DeriveKey (const BufferPtr &key, const VolumePassword &password, const ConstBufferPtr &salt, int iterationCount) const;
|
||||||
@@ -115,14 +118,14 @@ namespace VeraCrypt
|
|||||||
class Pkcs5HmacSha512 : public Pkcs5Kdf
|
class Pkcs5HmacSha512 : public Pkcs5Kdf
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
Pkcs5HmacSha512 () { }
|
Pkcs5HmacSha512 (bool truecryptMode) : Pkcs5Kdf(truecryptMode) { }
|
||||||
virtual ~Pkcs5HmacSha512 () { }
|
virtual ~Pkcs5HmacSha512 () { }
|
||||||
|
|
||||||
virtual void DeriveKey (const BufferPtr &key, const VolumePassword &password, const ConstBufferPtr &salt, int iterationCount) const;
|
virtual void DeriveKey (const BufferPtr &key, const VolumePassword &password, const ConstBufferPtr &salt, int iterationCount) const;
|
||||||
virtual shared_ptr <Hash> GetHash () const { return shared_ptr <Hash> (new Sha512); }
|
virtual shared_ptr <Hash> GetHash () const { return shared_ptr <Hash> (new Sha512); }
|
||||||
virtual int GetIterationCount () const { return 500000; }
|
virtual int GetIterationCount () const { return m_truecryptMode? 1000 : 500000; }
|
||||||
virtual wstring GetName () const { return L"HMAC-SHA-512"; }
|
virtual wstring GetName () const { return L"HMAC-SHA-512"; }
|
||||||
virtual Pkcs5Kdf* Clone () const { return new Pkcs5HmacSha512(); }
|
virtual Pkcs5Kdf* Clone () const { return new Pkcs5HmacSha512(m_truecryptMode); }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Pkcs5HmacSha512 (const Pkcs5HmacSha512 &);
|
Pkcs5HmacSha512 (const Pkcs5HmacSha512 &);
|
||||||
@@ -132,14 +135,14 @@ namespace VeraCrypt
|
|||||||
class Pkcs5HmacWhirlpool : public Pkcs5Kdf
|
class Pkcs5HmacWhirlpool : public Pkcs5Kdf
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
Pkcs5HmacWhirlpool () { }
|
Pkcs5HmacWhirlpool (bool truecryptMode) : Pkcs5Kdf(truecryptMode) { }
|
||||||
virtual ~Pkcs5HmacWhirlpool () { }
|
virtual ~Pkcs5HmacWhirlpool () { }
|
||||||
|
|
||||||
virtual void DeriveKey (const BufferPtr &key, const VolumePassword &password, const ConstBufferPtr &salt, int iterationCount) const;
|
virtual void DeriveKey (const BufferPtr &key, const VolumePassword &password, const ConstBufferPtr &salt, int iterationCount) const;
|
||||||
virtual shared_ptr <Hash> GetHash () const { return shared_ptr <Hash> (new Whirlpool); }
|
virtual shared_ptr <Hash> GetHash () const { return shared_ptr <Hash> (new Whirlpool); }
|
||||||
virtual int GetIterationCount () const { return 500000; }
|
virtual int GetIterationCount () const { return m_truecryptMode? 1000 : 500000; }
|
||||||
virtual wstring GetName () const { return L"HMAC-Whirlpool"; }
|
virtual wstring GetName () const { return L"HMAC-Whirlpool"; }
|
||||||
virtual Pkcs5Kdf* Clone () const { return new Pkcs5HmacWhirlpool; }
|
virtual Pkcs5Kdf* Clone () const { return new Pkcs5HmacWhirlpool(m_truecryptMode); }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Pkcs5HmacWhirlpool (const Pkcs5HmacWhirlpool &);
|
Pkcs5HmacWhirlpool (const Pkcs5HmacWhirlpool &);
|
||||||
|
|||||||
@@ -23,7 +23,8 @@ namespace VeraCrypt
|
|||||||
VolumeDataSize (0),
|
VolumeDataSize (0),
|
||||||
TopWriteOffset (0),
|
TopWriteOffset (0),
|
||||||
TotalDataRead (0),
|
TotalDataRead (0),
|
||||||
TotalDataWritten (0)
|
TotalDataWritten (0),
|
||||||
|
TrueCryptMode (false)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -62,7 +63,7 @@ namespace VeraCrypt
|
|||||||
return EA->GetMode();
|
return EA->GetMode();
|
||||||
}
|
}
|
||||||
|
|
||||||
void Volume::Open (const VolumePath &volumePath, bool preserveTimestamps, shared_ptr <VolumePassword> password, shared_ptr <Pkcs5Kdf> kdf, shared_ptr <KeyfileList> keyfiles, VolumeProtection::Enum protection, shared_ptr <VolumePassword> protectionPassword, shared_ptr <Pkcs5Kdf> protectionKdf, shared_ptr <KeyfileList> protectionKeyfiles, bool sharedAccessAllowed, VolumeType::Enum volumeType, bool useBackupHeaders, bool partitionInSystemEncryptionScope)
|
void Volume::Open (const VolumePath &volumePath, bool preserveTimestamps, shared_ptr <VolumePassword> password, shared_ptr <Pkcs5Kdf> kdf, bool truecryptMode, shared_ptr <KeyfileList> keyfiles, VolumeProtection::Enum protection, shared_ptr <VolumePassword> protectionPassword, shared_ptr <Pkcs5Kdf> protectionKdf, shared_ptr <KeyfileList> protectionKeyfiles, bool sharedAccessAllowed, VolumeType::Enum volumeType, bool useBackupHeaders, bool partitionInSystemEncryptionScope)
|
||||||
{
|
{
|
||||||
make_shared_auto (File, file);
|
make_shared_auto (File, file);
|
||||||
|
|
||||||
@@ -93,14 +94,21 @@ namespace VeraCrypt
|
|||||||
throw;
|
throw;
|
||||||
}
|
}
|
||||||
|
|
||||||
return Open (file, password, kdf, keyfiles, protection, protectionPassword, protectionKdf,protectionKeyfiles, volumeType, useBackupHeaders, partitionInSystemEncryptionScope);
|
return Open (file, password, kdf, truecryptMode, keyfiles, protection, protectionPassword, protectionKdf,protectionKeyfiles, volumeType, useBackupHeaders, partitionInSystemEncryptionScope);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Volume::Open (shared_ptr <File> volumeFile, shared_ptr <VolumePassword> password, shared_ptr <Pkcs5Kdf> kdf, shared_ptr <KeyfileList> keyfiles, VolumeProtection::Enum protection, shared_ptr <VolumePassword> protectionPassword, shared_ptr <Pkcs5Kdf> protectionKdf,shared_ptr <KeyfileList> protectionKeyfiles, VolumeType::Enum volumeType, bool useBackupHeaders, bool partitionInSystemEncryptionScope)
|
void Volume::Open (shared_ptr <File> volumeFile, shared_ptr <VolumePassword> password, shared_ptr <Pkcs5Kdf> kdf, bool truecryptMode, shared_ptr <KeyfileList> keyfiles, VolumeProtection::Enum protection, shared_ptr <VolumePassword> protectionPassword, shared_ptr <Pkcs5Kdf> protectionKdf,shared_ptr <KeyfileList> protectionKeyfiles, VolumeType::Enum volumeType, bool useBackupHeaders, bool partitionInSystemEncryptionScope)
|
||||||
{
|
{
|
||||||
if (!volumeFile)
|
if (!volumeFile)
|
||||||
throw ParameterIncorrect (SRC_POS);
|
throw ParameterIncorrect (SRC_POS);
|
||||||
|
|
||||||
|
// TrueCrypt doesn't support SHA-256
|
||||||
|
if (kdf && truecryptMode && (kdf->GetName() == L"HMAC-SHA-256"))
|
||||||
|
throw UnsupportedAlgoInTrueCryptMode (SRC_POS);
|
||||||
|
|
||||||
|
if (truecryptMode && partitionInSystemEncryptionScope)
|
||||||
|
throw ParameterIncorrect (SRC_POS);
|
||||||
|
|
||||||
Protection = protection;
|
Protection = protection;
|
||||||
VolumeFile = volumeFile;
|
VolumeFile = volumeFile;
|
||||||
SystemEncryption = partitionInSystemEncryptionScope;
|
SystemEncryption = partitionInSystemEncryptionScope;
|
||||||
@@ -182,11 +190,11 @@ namespace VeraCrypt
|
|||||||
|
|
||||||
shared_ptr <VolumeHeader> header = layout->GetHeader();
|
shared_ptr <VolumeHeader> header = layout->GetHeader();
|
||||||
|
|
||||||
if (header->Decrypt (headerBuffer, *passwordKey, kdf, layout->GetSupportedKeyDerivationFunctions(), layoutEncryptionAlgorithms, layoutEncryptionModes))
|
if (header->Decrypt (headerBuffer, *passwordKey, kdf, truecryptMode, layout->GetSupportedKeyDerivationFunctions(truecryptMode), layoutEncryptionAlgorithms, layoutEncryptionModes))
|
||||||
{
|
{
|
||||||
// Header decrypted
|
// Header decrypted
|
||||||
|
|
||||||
if (typeid (*layout) == typeid (VolumeLayoutV2Normal) && header->GetRequiredMinProgramVersion() < 0x10b)
|
if (!truecryptMode && typeid (*layout) == typeid (VolumeLayoutV2Normal) && header->GetRequiredMinProgramVersion() < 0x10b)
|
||||||
{
|
{
|
||||||
// VolumeLayoutV1Normal has been opened as VolumeLayoutV2Normal
|
// VolumeLayoutV1Normal has been opened as VolumeLayoutV2Normal
|
||||||
layout.reset (new VolumeLayoutV1Normal);
|
layout.reset (new VolumeLayoutV1Normal);
|
||||||
@@ -194,6 +202,7 @@ namespace VeraCrypt
|
|||||||
layout->SetHeader (header);
|
layout->SetHeader (header);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TrueCryptMode = truecryptMode;
|
||||||
Type = layout->GetType();
|
Type = layout->GetType();
|
||||||
SectorSize = header->GetSectorSize();
|
SectorSize = header->GetSectorSize();
|
||||||
|
|
||||||
@@ -231,7 +240,7 @@ namespace VeraCrypt
|
|||||||
Volume protectedVolume;
|
Volume protectedVolume;
|
||||||
|
|
||||||
protectedVolume.Open (VolumeFile,
|
protectedVolume.Open (VolumeFile,
|
||||||
protectionPassword, protectionKdf, protectionKeyfiles,
|
protectionPassword, protectionKdf, truecryptMode, protectionKeyfiles,
|
||||||
VolumeProtection::ReadOnly,
|
VolumeProtection::ReadOnly,
|
||||||
shared_ptr <VolumePassword> (), shared_ptr <Pkcs5Kdf> (),shared_ptr <KeyfileList> (),
|
shared_ptr <VolumePassword> (), shared_ptr <Pkcs5Kdf> (),shared_ptr <KeyfileList> (),
|
||||||
VolumeType::Hidden,
|
VolumeType::Hidden,
|
||||||
@@ -269,11 +278,12 @@ namespace VeraCrypt
|
|||||||
Buffer mbr (VolumeFile->GetDeviceSectorSize());
|
Buffer mbr (VolumeFile->GetDeviceSectorSize());
|
||||||
driveDevice.ReadAt (mbr, 0);
|
driveDevice.ReadAt (mbr, 0);
|
||||||
|
|
||||||
// Search for the string "VeraCrypt"
|
// Search for the string "VeraCrypt" or "TrueCrypt"
|
||||||
size_t nameLen = strlen (TC_APP_NAME);
|
const char* bootSignature = truecryptMode? "TrueCrypt" : TC_APP_NAME;
|
||||||
|
size_t nameLen = strlen (bootSignature);
|
||||||
for (size_t i = 0; i < mbr.Size() - nameLen; ++i)
|
for (size_t i = 0; i < mbr.Size() - nameLen; ++i)
|
||||||
{
|
{
|
||||||
if (memcmp (mbr.Ptr() + i, TC_APP_NAME, nameLen) == 0)
|
if (memcmp (mbr.Ptr() + i, bootSignature, nameLen) == 0)
|
||||||
throw PasswordOrMountOptionsIncorrect (SRC_POS);
|
throw PasswordOrMountOptionsIncorrect (SRC_POS);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -86,11 +86,12 @@ namespace VeraCrypt
|
|||||||
uint64 GetTotalDataRead () const { return TotalDataRead; }
|
uint64 GetTotalDataRead () const { return TotalDataRead; }
|
||||||
uint64 GetTotalDataWritten () const { return TotalDataWritten; }
|
uint64 GetTotalDataWritten () const { return TotalDataWritten; }
|
||||||
VolumeType::Enum GetType () const { return Type; }
|
VolumeType::Enum GetType () const { return Type; }
|
||||||
|
bool GetTrueCryptMode() const { return TrueCryptMode; }
|
||||||
uint64 GetVolumeCreationTime () const { return Header->GetVolumeCreationTime(); }
|
uint64 GetVolumeCreationTime () const { return Header->GetVolumeCreationTime(); }
|
||||||
bool IsHiddenVolumeProtectionTriggered () const { return HiddenVolumeProtectionTriggered; }
|
bool IsHiddenVolumeProtectionTriggered () const { return HiddenVolumeProtectionTriggered; }
|
||||||
bool IsInSystemEncryptionScope () const { return SystemEncryption; }
|
bool IsInSystemEncryptionScope () const { return SystemEncryption; }
|
||||||
void Open (const VolumePath &volumePath, bool preserveTimestamps, shared_ptr <VolumePassword> password, shared_ptr <Pkcs5Kdf> kdf, shared_ptr <KeyfileList> keyfiles, VolumeProtection::Enum protection = VolumeProtection::None, shared_ptr <VolumePassword> protectionPassword = shared_ptr <VolumePassword> (), shared_ptr <Pkcs5Kdf> protectionKdf = shared_ptr <Pkcs5Kdf> (),shared_ptr <KeyfileList> protectionKeyfiles = shared_ptr <KeyfileList> (), bool sharedAccessAllowed = false, VolumeType::Enum volumeType = VolumeType::Unknown, bool useBackupHeaders = false, bool partitionInSystemEncryptionScope = false);
|
void Open (const VolumePath &volumePath, bool preserveTimestamps, shared_ptr <VolumePassword> password, shared_ptr <Pkcs5Kdf> kdf, bool truecryptMode, shared_ptr <KeyfileList> keyfiles, VolumeProtection::Enum protection = VolumeProtection::None, shared_ptr <VolumePassword> protectionPassword = shared_ptr <VolumePassword> (), shared_ptr <Pkcs5Kdf> protectionKdf = shared_ptr <Pkcs5Kdf> (),shared_ptr <KeyfileList> protectionKeyfiles = shared_ptr <KeyfileList> (), bool sharedAccessAllowed = false, VolumeType::Enum volumeType = VolumeType::Unknown, bool useBackupHeaders = false, bool partitionInSystemEncryptionScope = false);
|
||||||
void Open (shared_ptr <File> volumeFile, shared_ptr <VolumePassword> password, shared_ptr <Pkcs5Kdf> kdf, shared_ptr <KeyfileList> keyfiles, VolumeProtection::Enum protection = VolumeProtection::None, shared_ptr <VolumePassword> protectionPassword = shared_ptr <VolumePassword> (), shared_ptr <Pkcs5Kdf> protectionKdf = shared_ptr <Pkcs5Kdf> (), shared_ptr <KeyfileList> protectionKeyfiles = shared_ptr <KeyfileList> (), VolumeType::Enum volumeType = VolumeType::Unknown, bool useBackupHeaders = false, bool partitionInSystemEncryptionScope = false);
|
void Open (shared_ptr <File> volumeFile, shared_ptr <VolumePassword> password, shared_ptr <Pkcs5Kdf> kdf, bool truecryptMode, shared_ptr <KeyfileList> keyfiles, VolumeProtection::Enum protection = VolumeProtection::None, shared_ptr <VolumePassword> protectionPassword = shared_ptr <VolumePassword> (), shared_ptr <Pkcs5Kdf> protectionKdf = shared_ptr <Pkcs5Kdf> (), shared_ptr <KeyfileList> protectionKeyfiles = shared_ptr <KeyfileList> (), VolumeType::Enum volumeType = VolumeType::Unknown, bool useBackupHeaders = false, bool partitionInSystemEncryptionScope = false);
|
||||||
void ReadSectors (const BufferPtr &buffer, uint64 byteOffset);
|
void ReadSectors (const BufferPtr &buffer, uint64 byteOffset);
|
||||||
void ReEncryptHeader (bool backupHeader, const ConstBufferPtr &newSalt, const ConstBufferPtr &newHeaderKey, shared_ptr <Pkcs5Kdf> newPkcs5Kdf);
|
void ReEncryptHeader (bool backupHeader, const ConstBufferPtr &newSalt, const ConstBufferPtr &newHeaderKey, shared_ptr <Pkcs5Kdf> newPkcs5Kdf);
|
||||||
void WriteSectors (const ConstBufferPtr &buffer, uint64 byteOffset);
|
void WriteSectors (const ConstBufferPtr &buffer, uint64 byteOffset);
|
||||||
@@ -116,6 +117,7 @@ namespace VeraCrypt
|
|||||||
uint64 TopWriteOffset;
|
uint64 TopWriteOffset;
|
||||||
uint64 TotalDataRead;
|
uint64 TotalDataRead;
|
||||||
uint64 TotalDataWritten;
|
uint64 TotalDataWritten;
|
||||||
|
bool TrueCryptMode;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Volume (const Volume &);
|
Volume (const Volume &);
|
||||||
|
|||||||
@@ -78,7 +78,7 @@ namespace VeraCrypt
|
|||||||
EncryptNew (headerBuffer, options.Salt, options.HeaderKey, options.Kdf);
|
EncryptNew (headerBuffer, options.Salt, options.HeaderKey, options.Kdf);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool VolumeHeader::Decrypt (const ConstBufferPtr &encryptedData, const VolumePassword &password, shared_ptr <Pkcs5Kdf> kdf, const Pkcs5KdfList &keyDerivationFunctions, const EncryptionAlgorithmList &encryptionAlgorithms, const EncryptionModeList &encryptionModes)
|
bool VolumeHeader::Decrypt (const ConstBufferPtr &encryptedData, const VolumePassword &password, shared_ptr <Pkcs5Kdf> kdf, bool truecryptMode, const Pkcs5KdfList &keyDerivationFunctions, const EncryptionAlgorithmList &encryptionAlgorithms, const EncryptionModeList &encryptionModes)
|
||||||
{
|
{
|
||||||
if (password.Size() < 1)
|
if (password.Size() < 1)
|
||||||
throw PasswordEmpty (SRC_POS);
|
throw PasswordEmpty (SRC_POS);
|
||||||
@@ -121,7 +121,7 @@ namespace VeraCrypt
|
|||||||
header.CopyFrom (encryptedData.GetRange (EncryptedHeaderDataOffset, EncryptedHeaderDataSize));
|
header.CopyFrom (encryptedData.GetRange (EncryptedHeaderDataOffset, EncryptedHeaderDataSize));
|
||||||
ea->Decrypt (header);
|
ea->Decrypt (header);
|
||||||
|
|
||||||
if (Deserialize (header, ea, mode))
|
if (Deserialize (header, ea, mode, truecryptMode))
|
||||||
{
|
{
|
||||||
EA = ea;
|
EA = ea;
|
||||||
Pkcs5 = pkcs5;
|
Pkcs5 = pkcs5;
|
||||||
@@ -134,15 +134,21 @@ namespace VeraCrypt
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool VolumeHeader::Deserialize (const ConstBufferPtr &header, shared_ptr <EncryptionAlgorithm> &ea, shared_ptr <EncryptionMode> &mode)
|
bool VolumeHeader::Deserialize (const ConstBufferPtr &header, shared_ptr <EncryptionAlgorithm> &ea, shared_ptr <EncryptionMode> &mode, bool truecryptMode)
|
||||||
{
|
{
|
||||||
if (header.Size() != EncryptedHeaderDataSize)
|
if (header.Size() != EncryptedHeaderDataSize)
|
||||||
throw ParameterIncorrect (SRC_POS);
|
throw ParameterIncorrect (SRC_POS);
|
||||||
|
|
||||||
if (header[0] != 'V' ||
|
if (truecryptMode && (header[0] != 'T' ||
|
||||||
|
header[1] != 'R' ||
|
||||||
|
header[2] != 'U' ||
|
||||||
|
header[3] != 'E'))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if (!truecryptMode && (header[0] != 'V' ||
|
||||||
header[1] != 'E' ||
|
header[1] != 'E' ||
|
||||||
header[2] != 'R' ||
|
header[2] != 'R' ||
|
||||||
header[3] != 'A')
|
header[3] != 'A'))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
size_t offset = 4;
|
size_t offset = 4;
|
||||||
@@ -163,9 +169,16 @@ namespace VeraCrypt
|
|||||||
|
|
||||||
RequiredMinProgramVersion = DeserializeEntry <uint16> (header, offset);
|
RequiredMinProgramVersion = DeserializeEntry <uint16> (header, offset);
|
||||||
|
|
||||||
if (RequiredMinProgramVersion > Version::Number())
|
if (!truecryptMode && (RequiredMinProgramVersion > Version::Number()))
|
||||||
throw HigherVersionRequired (SRC_POS);
|
throw HigherVersionRequired (SRC_POS);
|
||||||
|
|
||||||
|
if (truecryptMode)
|
||||||
|
{
|
||||||
|
if (RequiredMinProgramVersion < 0x700 || RequiredMinProgramVersion > 0x71a)
|
||||||
|
throw UnsupportedTrueCryptFormat (SRC_POS);
|
||||||
|
RequiredMinProgramVersion = CurrentRequiredMinProgramVersion;
|
||||||
|
}
|
||||||
|
|
||||||
VolumeKeyAreaCrc32 = DeserializeEntry <uint32> (header, offset);
|
VolumeKeyAreaCrc32 = DeserializeEntry <uint32> (header, offset);
|
||||||
VolumeCreationTime = DeserializeEntry <uint64> (header, offset);
|
VolumeCreationTime = DeserializeEntry <uint64> (header, offset);
|
||||||
HeaderCreationTime = DeserializeEntry <uint64> (header, offset);
|
HeaderCreationTime = DeserializeEntry <uint64> (header, offset);
|
||||||
|
|||||||
@@ -56,7 +56,7 @@ namespace VeraCrypt
|
|||||||
virtual ~VolumeHeader ();
|
virtual ~VolumeHeader ();
|
||||||
|
|
||||||
void Create (const BufferPtr &headerBuffer, VolumeHeaderCreationOptions &options);
|
void Create (const BufferPtr &headerBuffer, VolumeHeaderCreationOptions &options);
|
||||||
bool Decrypt (const ConstBufferPtr &encryptedData, const VolumePassword &password, shared_ptr <Pkcs5Kdf> kdf, const Pkcs5KdfList &keyDerivationFunctions, const EncryptionAlgorithmList &encryptionAlgorithms, const EncryptionModeList &encryptionModes);
|
bool Decrypt (const ConstBufferPtr &encryptedData, const VolumePassword &password, shared_ptr <Pkcs5Kdf> kdf, bool truecryptMode, const Pkcs5KdfList &keyDerivationFunctions, const EncryptionAlgorithmList &encryptionAlgorithms, const EncryptionModeList &encryptionModes);
|
||||||
void EncryptNew (const BufferPtr &newHeaderBuffer, const ConstBufferPtr &newSalt, const ConstBufferPtr &newHeaderKey, shared_ptr <Pkcs5Kdf> newPkcs5Kdf);
|
void EncryptNew (const BufferPtr &newHeaderBuffer, const ConstBufferPtr &newSalt, const ConstBufferPtr &newHeaderKey, shared_ptr <Pkcs5Kdf> newPkcs5Kdf);
|
||||||
uint64 GetEncryptedAreaStart () const { return EncryptedAreaStart; }
|
uint64 GetEncryptedAreaStart () const { return EncryptedAreaStart; }
|
||||||
uint64 GetEncryptedAreaLength () const { return EncryptedAreaLength; }
|
uint64 GetEncryptedAreaLength () const { return EncryptedAreaLength; }
|
||||||
@@ -74,7 +74,7 @@ namespace VeraCrypt
|
|||||||
void SetSize (uint32 headerSize);
|
void SetSize (uint32 headerSize);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
bool Deserialize (const ConstBufferPtr &header, shared_ptr <EncryptionAlgorithm> &ea, shared_ptr <EncryptionMode> &mode);
|
bool Deserialize (const ConstBufferPtr &header, shared_ptr <EncryptionAlgorithm> &ea, shared_ptr <EncryptionMode> &mode, bool truecryptMode);
|
||||||
template <typename T> T DeserializeEntry (const ConstBufferPtr &header, size_t &offset) const;
|
template <typename T> T DeserializeEntry (const ConstBufferPtr &header, size_t &offset) const;
|
||||||
template <typename T> T DeserializeEntryAt (const ConstBufferPtr &header, const size_t &offset) const;
|
template <typename T> T DeserializeEntryAt (const ConstBufferPtr &header, const size_t &offset) const;
|
||||||
void Init ();
|
void Init ();
|
||||||
|
|||||||
@@ -50,6 +50,7 @@ namespace VeraCrypt
|
|||||||
Type = static_cast <VolumeType::Enum> (sr.DeserializeInt32 ("Type"));
|
Type = static_cast <VolumeType::Enum> (sr.DeserializeInt32 ("Type"));
|
||||||
VirtualDevice = sr.DeserializeWString ("VirtualDevice");
|
VirtualDevice = sr.DeserializeWString ("VirtualDevice");
|
||||||
sr.Deserialize ("VolumeCreationTime", VolumeCreationTime);
|
sr.Deserialize ("VolumeCreationTime", VolumeCreationTime);
|
||||||
|
sr.Deserialize ("TrueCryptMode", TrueCryptMode);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool VolumeInfo::FirstVolumeMountedAfterSecond (shared_ptr <VolumeInfo> first, shared_ptr <VolumeInfo> second)
|
bool VolumeInfo::FirstVolumeMountedAfterSecond (shared_ptr <VolumeInfo> first, shared_ptr <VolumeInfo> second)
|
||||||
@@ -89,6 +90,7 @@ namespace VeraCrypt
|
|||||||
sr.Serialize ("Type", static_cast <uint32> (Type));
|
sr.Serialize ("Type", static_cast <uint32> (Type));
|
||||||
sr.Serialize ("VirtualDevice", wstring (VirtualDevice));
|
sr.Serialize ("VirtualDevice", wstring (VirtualDevice));
|
||||||
sr.Serialize ("VolumeCreationTime", VolumeCreationTime);
|
sr.Serialize ("VolumeCreationTime", VolumeCreationTime);
|
||||||
|
sr.Serialize ("TrueCryptMode", TrueCryptMode);
|
||||||
}
|
}
|
||||||
|
|
||||||
void VolumeInfo::Set (const Volume &volume)
|
void VolumeInfo::Set (const Volume &volume)
|
||||||
@@ -112,6 +114,7 @@ namespace VeraCrypt
|
|||||||
TopWriteOffset = volume.GetTopWriteOffset();
|
TopWriteOffset = volume.GetTopWriteOffset();
|
||||||
TotalDataRead = volume.GetTotalDataRead();
|
TotalDataRead = volume.GetTotalDataRead();
|
||||||
TotalDataWritten = volume.GetTotalDataWritten();
|
TotalDataWritten = volume.GetTotalDataWritten();
|
||||||
|
TrueCryptMode = volume.GetTrueCryptMode();
|
||||||
}
|
}
|
||||||
|
|
||||||
TC_SERIALIZER_FACTORY_ADD_CLASS (VolumeInfo);
|
TC_SERIALIZER_FACTORY_ADD_CLASS (VolumeInfo);
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ namespace VeraCrypt
|
|||||||
|
|
||||||
TC_SERIALIZABLE (VolumeInfo);
|
TC_SERIALIZABLE (VolumeInfo);
|
||||||
static bool FirstVolumeMountedAfterSecond (shared_ptr <VolumeInfo> first, shared_ptr <VolumeInfo> second);
|
static bool FirstVolumeMountedAfterSecond (shared_ptr <VolumeInfo> first, shared_ptr <VolumeInfo> second);
|
||||||
void Set (const Volume &volume);
|
void Set (const Volume &volume);
|
||||||
|
|
||||||
// Modifying this structure can introduce incompatibility with previous versions
|
// Modifying this structure can introduce incompatibility with previous versions
|
||||||
DirectoryPath AuxMountPoint;
|
DirectoryPath AuxMountPoint;
|
||||||
@@ -56,6 +56,7 @@ namespace VeraCrypt
|
|||||||
VolumeType::Enum Type;
|
VolumeType::Enum Type;
|
||||||
DevicePath VirtualDevice;
|
DevicePath VirtualDevice;
|
||||||
VolumeTime VolumeCreationTime;
|
VolumeTime VolumeCreationTime;
|
||||||
|
bool TrueCryptMode;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
VolumeInfo (const VolumeInfo &);
|
VolumeInfo (const VolumeInfo &);
|
||||||
|
|||||||
@@ -196,12 +196,12 @@ namespace VeraCrypt
|
|||||||
return volumeHostSize;
|
return volumeHostSize;
|
||||||
}
|
}
|
||||||
|
|
||||||
Pkcs5KdfList VolumeLayoutSystemEncryption::GetSupportedKeyDerivationFunctions () const
|
Pkcs5KdfList VolumeLayoutSystemEncryption::GetSupportedKeyDerivationFunctions (bool truecryptMode) const
|
||||||
{
|
{
|
||||||
Pkcs5KdfList l;
|
Pkcs5KdfList l;
|
||||||
|
if (!truecryptMode)
|
||||||
l.push_back (shared_ptr <Pkcs5Kdf> (new Pkcs5HmacSha256_Boot ()));
|
l.push_back (shared_ptr <Pkcs5Kdf> (new Pkcs5HmacSha256_Boot ()));
|
||||||
l.push_back (shared_ptr <Pkcs5Kdf> (new Pkcs5HmacRipemd160_1000 ()));
|
l.push_back (shared_ptr <Pkcs5Kdf> (new Pkcs5HmacRipemd160_1000 (truecryptMode)));
|
||||||
return l;
|
return l;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -34,7 +34,7 @@ namespace VeraCrypt
|
|||||||
virtual uint32 GetHeaderSize () const { return HeaderSize; }
|
virtual uint32 GetHeaderSize () const { return HeaderSize; }
|
||||||
virtual uint64 GetMaxDataSize (uint64 volumeSize) const = 0;
|
virtual uint64 GetMaxDataSize (uint64 volumeSize) const = 0;
|
||||||
virtual EncryptionAlgorithmList GetSupportedEncryptionAlgorithms () const { return SupportedEncryptionAlgorithms; }
|
virtual EncryptionAlgorithmList GetSupportedEncryptionAlgorithms () const { return SupportedEncryptionAlgorithms; }
|
||||||
virtual Pkcs5KdfList GetSupportedKeyDerivationFunctions () const { return Pkcs5Kdf::GetAvailableAlgorithms(); }
|
virtual Pkcs5KdfList GetSupportedKeyDerivationFunctions (bool truecryptMode) const { return Pkcs5Kdf::GetAvailableAlgorithms(truecryptMode); }
|
||||||
virtual EncryptionModeList GetSupportedEncryptionModes () const { return SupportedEncryptionModes; }
|
virtual EncryptionModeList GetSupportedEncryptionModes () const { return SupportedEncryptionModes; }
|
||||||
virtual VolumeType::Enum GetType () const { return Type; }
|
virtual VolumeType::Enum GetType () const { return Type; }
|
||||||
virtual bool HasBackupHeader () const = 0;
|
virtual bool HasBackupHeader () const = 0;
|
||||||
@@ -122,7 +122,7 @@ namespace VeraCrypt
|
|||||||
virtual uint64 GetDataOffset (uint64 volumeHostSize) const;
|
virtual uint64 GetDataOffset (uint64 volumeHostSize) const;
|
||||||
virtual uint64 GetDataSize (uint64 volumeHostSize) const;
|
virtual uint64 GetDataSize (uint64 volumeHostSize) const;
|
||||||
virtual uint64 GetMaxDataSize (uint64 volumeSize) const { throw NotApplicable (SRC_POS); }
|
virtual uint64 GetMaxDataSize (uint64 volumeSize) const { throw NotApplicable (SRC_POS); }
|
||||||
virtual Pkcs5KdfList GetSupportedKeyDerivationFunctions () const;
|
virtual Pkcs5KdfList GetSupportedKeyDerivationFunctions (bool truecryptMode) const;
|
||||||
virtual bool HasBackupHeader () const { return false; }
|
virtual bool HasBackupHeader () const { return false; }
|
||||||
virtual bool HasDriveHeader () const { return true; }
|
virtual bool HasDriveHeader () const { return true; }
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user