|
|
1.1 ! root 1: /* ! 2: Copyright (c) 2008 TrueCrypt Foundation. All rights reserved. ! 3: ! 4: Governed by the TrueCrypt License 2.4 the full text of which is contained ! 5: in the file License.txt included in TrueCrypt binary and source code ! 6: distribution packages. ! 7: */ ! 8: ! 9: #ifndef TC_HEADER_Encryption_Password ! 10: #define TC_HEADER_Encryption_Password ! 11: ! 12: #include "Platform/Platform.h" ! 13: #include "Platform/Serializable.h" ! 14: ! 15: namespace TrueCrypt ! 16: { ! 17: class VolumePassword : public Serializable ! 18: { ! 19: public: ! 20: VolumePassword (); ! 21: VolumePassword (const byte *password, size_t size); ! 22: VolumePassword (const char *password, size_t size); ! 23: VolumePassword (const wchar_t *password, size_t charCount); ! 24: VolumePassword (const wstring &password); ! 25: VolumePassword (const VolumePassword &password) { Set (password); } ! 26: virtual ~VolumePassword (); ! 27: ! 28: bool operator== (const VolumePassword &other) const { return ConstBufferPtr (DataPtr(), Size()).IsDataEqual (ConstBufferPtr (other.DataPtr(), other.Size())); } ! 29: bool operator!= (const VolumePassword &other) const { return !(*this == other); } ! 30: VolumePassword &operator= (const VolumePassword &password) { Set (password); return *this; } ! 31: ! 32: operator BufferPtr () const { return BufferPtr (PasswordBuffer); } ! 33: ! 34: void CheckPortability () const; ! 35: byte *DataPtr () const { return PasswordBuffer; } ! 36: bool IsEmpty () const { return PasswordSize == 0; } ! 37: size_t Size () const { return PasswordSize; } ! 38: void Set (const byte *password, size_t size); ! 39: void Set (const wchar_t *password, size_t charCount); ! 40: void Set (const ConstBufferPtr &password); ! 41: void Set (const VolumePassword &password); ! 42: ! 43: TC_SERIALIZABLE (VolumePassword); ! 44: ! 45: static const size_t MaxSize = 64; ! 46: static const size_t WarningSizeThreshold = 12; ! 47: ! 48: protected: ! 49: void AllocateBuffer (); ! 50: bool IsPortable () const; ! 51: ! 52: SecureBuffer PasswordBuffer; ! 53: ! 54: size_t PasswordSize; ! 55: bool Unportable; ! 56: }; ! 57: ! 58: struct PasswordException : public Exception ! 59: { ! 60: protected: ! 61: PasswordException () { } ! 62: PasswordException (const string &message) : Exception (message) { } ! 63: PasswordException (const string &message, const wstring &subject) : Exception (message, subject) { } ! 64: }; ! 65: ! 66: TC_EXCEPTION_DECL (PasswordIncorrect, PasswordException); ! 67: TC_EXCEPTION_DECL (PasswordKeyfilesIncorrect, PasswordIncorrect); ! 68: TC_EXCEPTION_DECL (ProtectionPasswordIncorrect, PasswordIncorrect); ! 69: TC_EXCEPTION_DECL (ProtectionPasswordKeyfilesIncorrect, PasswordIncorrect); ! 70: ! 71: #define TC_EXCEPTION(NAME) TC_EXCEPTION_DECL(NAME,PasswordException) ! 72: ! 73: #undef TC_EXCEPTION_SET ! 74: #define TC_EXCEPTION_SET \ ! 75: TC_EXCEPTION_NODECL (PasswordIncorrect); \ ! 76: TC_EXCEPTION_NODECL (PasswordKeyfilesIncorrect); \ ! 77: TC_EXCEPTION_NODECL (ProtectionPasswordIncorrect); \ ! 78: TC_EXCEPTION_NODECL (ProtectionPasswordKeyfilesIncorrect); \ ! 79: TC_EXCEPTION (PasswordEmpty); \ ! 80: TC_EXCEPTION (PasswordTooLong); \ ! 81: TC_EXCEPTION (UnportablePassword); ! 82: ! 83: TC_EXCEPTION_SET; ! 84: ! 85: #undef TC_EXCEPTION ! 86: } ! 87: ! 88: #endif // TC_HEADER_Encryption_Password
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.