|
|
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.