diff options
author | Mounir IDRASSI <mounir.idrassi@idrix.fr> | 2014-12-25 22:54:14 +0100 |
---|---|---|
committer | Mounir IDRASSI <mounir.idrassi@idrix.fr> | 2014-12-26 00:51:52 +0100 |
commit | d90d9f0c401a21c85a525aaca0b97df8f7955db8 (patch) | |
tree | 699016cd3928010352b3cbad97c1a7c94c4e8f13 /src/Core/Core.h | |
parent | bbcc944855d7824812af3a10fd447ccefc534a71 (diff) | |
download | VeraCrypt-d90d9f0c401a21c85a525aaca0b97df8f7955db8.tar.gz VeraCrypt-d90d9f0c401a21c85a525aaca0b97df8f7955db8.zip |
Linux/MacOSX: Implement waiting dialog for lengthy operations in order to have a better user experience.
Diffstat (limited to 'src/Core/Core.h')
-rw-r--r-- | src/Core/Core.h | 132 |
1 files changed, 132 insertions, 0 deletions
diff --git a/src/Core/Core.h b/src/Core/Core.h index 5f218775..1a7a1611 100644 --- a/src/Core/Core.h +++ b/src/Core/Core.h @@ -15,6 +15,138 @@ namespace VeraCrypt { extern auto_ptr <CoreBase> Core; extern auto_ptr <CoreBase> CoreDirect; + + class WaitThreadRoutine + { + public: + Exception* m_pException; + WaitThreadRoutine() : m_pException(NULL) {} + virtual ~WaitThreadRoutine() {if (m_pException) delete m_pException;} + bool HasException () { return m_pException != NULL;} + Exception* GetException () const { return m_pException;} + void Execute(void) + { + try + { + ExecutionCode(); + } + catch(Exception& ex) + { + m_pException = ex.CloneNew(); + } + catch(...) + { + m_pException = new UnknownException (SRC_POS); + } + } + virtual void ExecutionCode(void) = 0; + }; + + class MountThreadRoutine : public WaitThreadRoutine + { + public: + MountOptions& m_options; + shared_ptr <VolumeInfo> m_pVolume; + MountThreadRoutine(MountOptions &options) : m_options(options) {} + virtual ~MountThreadRoutine() { } + virtual void ExecutionCode(void) { m_pVolume = Core->MountVolume(m_options); } + }; + + class VolumeCreatorThreadRoutine : public WaitThreadRoutine + { + public: + shared_ptr <VolumeCreationOptions> m_options; + shared_ptr <VolumeCreator> m_pCreator; + VolumeCreatorThreadRoutine(shared_ptr <VolumeCreationOptions> options, shared_ptr <VolumeCreator> pCreator) + : m_options(options), m_pCreator(pCreator) {} + virtual ~VolumeCreatorThreadRoutine() { } + virtual void ExecutionCode(void) { m_pCreator->CreateVolume (m_options); } + }; + + class ChangePasswordThreadRoutine : public WaitThreadRoutine + { + public: + shared_ptr <VolumePath> m_volumePath; + bool m_preserveTimestamps; + shared_ptr <VolumePassword> m_password; + shared_ptr <Pkcs5Kdf> m_kdf; + shared_ptr <KeyfileList> m_keyfiles; + shared_ptr <VolumePassword> m_newPassword; + shared_ptr <KeyfileList> m_newKeyfiles; + shared_ptr <Pkcs5Kdf> m_newPkcs5Kdf; + 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) {} + 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); } + }; + + class OpenVolumeThreadRoutine : public WaitThreadRoutine + { + public: + shared_ptr <VolumePath> m_volumePath; + bool m_preserveTimestamps; + shared_ptr <VolumePassword> m_password; + shared_ptr<Pkcs5Kdf> m_Kdf; + shared_ptr <KeyfileList> m_keyfiles; + VolumeProtection::Enum m_protection; + shared_ptr <VolumePassword> m_protectionPassword; + shared_ptr<Pkcs5Kdf> m_protectionKdf; + shared_ptr <KeyfileList> m_protectionKeyfiles; + bool m_sharedAccessAllowed; + VolumeType::Enum m_volumeType; + bool m_useBackupHeaders; + bool m_partitionInSystemEncryptionScope; + 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): + m_volumePath(volumePath), m_preserveTimestamps(preserveTimestamps), m_password(password), m_Kdf(Kdf), 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_partitionInSystemEncryptionScope(partitionInSystemEncryptionScope) {} + + ~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); } + + }; + + class ReEncryptHeaderThreadRoutine : public WaitThreadRoutine + { + public: + const BufferPtr &m_newHeaderBuffer; + shared_ptr <VolumeHeader> m_header; + shared_ptr <VolumePassword> m_password; + shared_ptr <KeyfileList> m_keyfiles; + ReEncryptHeaderThreadRoutine(const BufferPtr &newHeaderBuffer, shared_ptr <VolumeHeader> header, shared_ptr <VolumePassword> password, shared_ptr <KeyfileList> keyfiles) + : m_newHeaderBuffer(newHeaderBuffer), m_header(header), m_password(password), m_keyfiles(keyfiles) {} + virtual ~ReEncryptHeaderThreadRoutine() { } + virtual void ExecutionCode(void) { Core->ReEncryptVolumeHeaderWithNewSalt (m_newHeaderBuffer, m_header, m_password, m_keyfiles); } + }; + + class DecryptThreadRoutine : public WaitThreadRoutine + { + public: + shared_ptr <VolumeHeader> m_pHeader; + const ConstBufferPtr &m_encryptedData; + const VolumePassword &m_password; + shared_ptr <Pkcs5Kdf> m_kdf; + const Pkcs5KdfList &m_keyDerivationFunctions; + const EncryptionAlgorithmList &m_encryptionAlgorithms; + const EncryptionModeList &m_encryptionModes; + 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) + : m_pHeader(header), m_encryptedData(encryptedData), m_password(password), m_kdf(kdf), m_keyDerivationFunctions(keyDerivationFunctions), m_encryptionAlgorithms(encryptionAlgorithms), m_encryptionModes(encryptionModes), m_bResult(false){} + virtual ~DecryptThreadRoutine() { } + virtual void ExecutionCode(void) { m_bResult = m_pHeader->Decrypt(m_encryptedData, m_password, m_kdf, m_keyDerivationFunctions, m_encryptionAlgorithms, m_encryptionModes); } + }; + + class WaitThreadUI + { + public: + WaitThreadUI(WaitThreadRoutine* pRoutine): m_pRoutine(pRoutine) {} + virtual ~WaitThreadUI() {} + virtual void Run(void) { m_pRoutine->ExecutionCode();} + WaitThreadRoutine* m_pRoutine; + }; } #endif // TC_HEADER_Core_Core |