1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
|
/*
Copyright (c) 2008-2009 TrueCrypt Developers Association. All rights reserved.
Governed by the TrueCrypt License 3.0 the full text of which is contained in
the file License.txt included in TrueCrypt binary and source code distribution
packages.
*/
#include "Common/Tcdefs.h"
#include "VolumeInfo.h"
#include "Platform/SerializerFactory.h"
namespace VeraCrypt
{
void VolumeInfo::Deserialize (shared_ptr <Stream> stream)
{
Serializer sr (stream);
sr.Deserialize ("ProgramVersion", ProgramVersion);
AuxMountPoint = sr.DeserializeWString ("AuxMountPoint");
sr.Deserialize ("EncryptionAlgorithmBlockSize", EncryptionAlgorithmBlockSize);
sr.Deserialize ("EncryptionAlgorithmKeySize", EncryptionAlgorithmKeySize);
sr.Deserialize ("EncryptionAlgorithmMinBlockSize", EncryptionAlgorithmMinBlockSize);
EncryptionAlgorithmName = sr.DeserializeWString ("EncryptionAlgorithmName");
EncryptionModeName = sr.DeserializeWString ("EncryptionModeName");
sr.Deserialize ("HeaderCreationTime", HeaderCreationTime);
sr.Deserialize ("HiddenVolumeProtectionTriggered", HiddenVolumeProtectionTriggered);
LoopDevice = sr.DeserializeWString ("LoopDevice");
if (ProgramVersion >= 0x10b)
sr.Deserialize ("MinRequiredProgramVersion", MinRequiredProgramVersion);
MountPoint = sr.DeserializeWString ("MountPoint");
Path = sr.DeserializeWString ("Path");
sr.Deserialize ("Pkcs5IterationCount", Pkcs5IterationCount);
Pkcs5PrfName = sr.DeserializeWString ("Pkcs5PrfName");
Protection = static_cast <VolumeProtection::Enum> (sr.DeserializeInt32 ("Protection"));
sr.Deserialize ("SerialInstanceNumber", SerialInstanceNumber);
sr.Deserialize ("Size", Size);
sr.Deserialize ("SlotNumber", SlotNumber);
if (ProgramVersion >= 0x10b)
sr.Deserialize ("SystemEncryption", SystemEncryption);
if (ProgramVersion >= 0x10b)
sr.Deserialize ("TopWriteOffset", TopWriteOffset);
sr.Deserialize ("TotalDataRead", TotalDataRead);
sr.Deserialize ("TotalDataWritten", TotalDataWritten);
Type = static_cast <VolumeType::Enum> (sr.DeserializeInt32 ("Type"));
VirtualDevice = sr.DeserializeWString ("VirtualDevice");
sr.Deserialize ("VolumeCreationTime", VolumeCreationTime);
}
bool VolumeInfo::FirstVolumeMountedAfterSecond (shared_ptr <VolumeInfo> first, shared_ptr <VolumeInfo> second)
{
return first->SerialInstanceNumber > second->SerialInstanceNumber;
}
void VolumeInfo::Serialize (shared_ptr <Stream> stream) const
{
Serializable::Serialize (stream);
Serializer sr (stream);
const uint32 version = VERSION_NUM;
sr.Serialize ("ProgramVersion", version);
sr.Serialize ("AuxMountPoint", wstring (AuxMountPoint));
sr.Serialize ("EncryptionAlgorithmBlockSize", EncryptionAlgorithmBlockSize);
sr.Serialize ("EncryptionAlgorithmKeySize", EncryptionAlgorithmKeySize);
sr.Serialize ("EncryptionAlgorithmMinBlockSize", EncryptionAlgorithmMinBlockSize);
sr.Serialize ("EncryptionAlgorithmName", EncryptionAlgorithmName);
sr.Serialize ("EncryptionModeName", EncryptionModeName);
sr.Serialize ("HeaderCreationTime", HeaderCreationTime);
sr.Serialize ("HiddenVolumeProtectionTriggered", HiddenVolumeProtectionTriggered);
sr.Serialize ("LoopDevice", wstring (LoopDevice));
sr.Serialize ("MinRequiredProgramVersion", MinRequiredProgramVersion);
sr.Serialize ("MountPoint", wstring (MountPoint));
sr.Serialize ("Path", wstring (Path));
sr.Serialize ("Pkcs5IterationCount", Pkcs5IterationCount);
sr.Serialize ("Pkcs5PrfName", Pkcs5PrfName);
sr.Serialize ("Protection", static_cast <uint32> (Protection));
sr.Serialize ("SerialInstanceNumber", SerialInstanceNumber);
sr.Serialize ("Size", Size);
sr.Serialize ("SlotNumber", SlotNumber);
sr.Serialize ("SystemEncryption", SystemEncryption);
sr.Serialize ("TopWriteOffset", TopWriteOffset);
sr.Serialize ("TotalDataRead", TotalDataRead);
sr.Serialize ("TotalDataWritten", TotalDataWritten);
sr.Serialize ("Type", static_cast <uint32> (Type));
sr.Serialize ("VirtualDevice", wstring (VirtualDevice));
sr.Serialize ("VolumeCreationTime", VolumeCreationTime);
}
void VolumeInfo::Set (const Volume &volume)
{
EncryptionAlgorithmBlockSize = static_cast <uint32> (volume.GetEncryptionAlgorithm()->GetMaxBlockSize());
EncryptionAlgorithmKeySize = static_cast <uint32> (volume.GetEncryptionAlgorithm()->GetKeySize());
EncryptionAlgorithmMinBlockSize = static_cast <uint32> (volume.GetEncryptionAlgorithm()->GetMinBlockSize());
EncryptionAlgorithmName = volume.GetEncryptionAlgorithm()->GetName();
EncryptionModeName = volume.GetEncryptionMode()->GetName();
HeaderCreationTime = volume.GetHeaderCreationTime();
VolumeCreationTime = volume.GetVolumeCreationTime();
HiddenVolumeProtectionTriggered = volume.IsHiddenVolumeProtectionTriggered();
MinRequiredProgramVersion = volume.GetHeader()->GetRequiredMinProgramVersion();
Path = volume.GetPath();
Pkcs5IterationCount = volume.GetPkcs5Kdf()->GetIterationCount();
Pkcs5PrfName = volume.GetPkcs5Kdf()->GetName();
Protection = volume.GetProtectionType();
Size = volume.GetSize();
SystemEncryption = volume.IsInSystemEncryptionScope();
Type = volume.GetType();
TopWriteOffset = volume.GetTopWriteOffset();
TotalDataRead = volume.GetTotalDataRead();
TotalDataWritten = volume.GetTotalDataWritten();
}
TC_SERIALIZER_FACTORY_ADD_CLASS (VolumeInfo);
}
|