VeraCrypt
aboutsummaryrefslogtreecommitdiff
path: root/src/Platform/Serializer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/Platform/Serializer.cpp')
-rw-r--r--src/Platform/Serializer.cpp586
1 files changed, 293 insertions, 293 deletions
diff --git a/src/Platform/Serializer.cpp b/src/Platform/Serializer.cpp
index f30f2212..1ac71cd1 100644
--- a/src/Platform/Serializer.cpp
+++ b/src/Platform/Serializer.cpp
@@ -8,296 +8,296 @@
and are governed by the Apache License 2.0 the full text of which is
contained in the file License.txt included in VeraCrypt binary and source
code distribution packages.
-*/
-
-#include "Exception.h"
-#include "ForEach.h"
-#include "Memory.h"
-#include "Serializer.h"
-
-namespace VeraCrypt
-{
- template <typename T>
- T Serializer::Deserialize ()
- {
- uint64 size;
- DataStream->ReadCompleteBuffer (BufferPtr ((byte *) &size, sizeof (size)));
-
- if (Endian::Big (size) != sizeof (T))
- throw ParameterIncorrect (SRC_POS);
-
- T data;
- DataStream->ReadCompleteBuffer (BufferPtr ((byte *) &data, sizeof (data)));
-
- return Endian::Big (data);
- }
-
- void Serializer::Deserialize (const string &name, bool &data)
- {
- ValidateName (name);
- data = Deserialize <byte> () == 1;
- }
-
- void Serializer::Deserialize (const string &name, byte &data)
- {
- ValidateName (name);
- data = Deserialize <byte> ();
- }
-
- void Serializer::Deserialize (const string &name, int32 &data)
- {
- ValidateName (name);
- data = (int32) Deserialize <uint32> ();
- }
-
- void Serializer::Deserialize (const string &name, int64 &data)
- {
- ValidateName (name);
- data = (int64) Deserialize <uint64> ();
- }
-
- void Serializer::Deserialize (const string &name, uint32 &data)
- {
- ValidateName (name);
- data = Deserialize <uint32> ();
- }
-
- void Serializer::Deserialize (const string &name, uint64 &data)
- {
- ValidateName (name);
- data = Deserialize <uint64> ();
- }
-
- void Serializer::Deserialize (const string &name, string &data)
- {
- ValidateName (name);
- data = DeserializeString ();
- }
-
- void Serializer::Deserialize (const string &name, wstring &data)
- {
- ValidateName (name);
- data = DeserializeWString ();
- }
-
- void Serializer::Deserialize (const string &name, const BufferPtr &data)
- {
- ValidateName (name);
-
- uint64 size = Deserialize <uint64> ();
- if (data.Size() != size)
- throw ParameterIncorrect (SRC_POS);
-
- DataStream->ReadCompleteBuffer (data);
- }
-
- bool Serializer::DeserializeBool (const string &name)
- {
- bool data;
- Deserialize (name, data);
- return data;
- }
-
- int32 Serializer::DeserializeInt32 (const string &name)
- {
- ValidateName (name);
- return Deserialize <uint32> ();
- }
-
- int64 Serializer::DeserializeInt64 (const string &name)
- {
- ValidateName (name);
- return Deserialize <uint64> ();
- }
-
- uint32 Serializer::DeserializeUInt32 (const string &name)
- {
- ValidateName (name);
- return Deserialize <uint32> ();
- }
-
- uint64 Serializer::DeserializeUInt64 (const string &name)
- {
- ValidateName (name);
- return Deserialize <uint64> ();
- }
-
- string Serializer::DeserializeString ()
- {
- uint64 size = Deserialize <uint64> ();
-
- vector <char> data ((size_t) size);
- DataStream->ReadCompleteBuffer (BufferPtr ((byte *) &data[0], (size_t) size));
-
- return string (&data[0]);
- }
-
- string Serializer::DeserializeString (const string &name)
- {
- ValidateName (name);
- return DeserializeString ();
- }
-
- list <string> Serializer::DeserializeStringList (const string &name)
- {
- ValidateName (name);
- list <string> deserializedList;
- uint64 listSize = Deserialize <uint64> ();
-
- for (size_t i = 0; i < listSize; i++)
- deserializedList.push_back (DeserializeString ());
-
- return deserializedList;
- }
-
- wstring Serializer::DeserializeWString ()
- {
- uint64 size = Deserialize <uint64> ();
-
- vector <wchar_t> data ((size_t) size / sizeof (wchar_t));
- DataStream->ReadCompleteBuffer (BufferPtr ((byte *) &data[0], (size_t) size));
-
- return wstring (&data[0]);
- }
-
- list <wstring> Serializer::DeserializeWStringList (const string &name)
- {
- ValidateName (name);
- list <wstring> deserializedList;
- uint64 listSize = Deserialize <uint64> ();
-
- for (size_t i = 0; i < listSize; i++)
- deserializedList.push_back (DeserializeWString ());
-
- return deserializedList;
- }
-
- wstring Serializer::DeserializeWString (const string &name)
- {
- ValidateName (name);
- return DeserializeWString ();
- }
-
- template <typename T>
- void Serializer::Serialize (T data)
- {
- uint64 size = Endian::Big (uint64 (sizeof (data)));
- DataStream->Write (ConstBufferPtr ((byte *) &size, sizeof (size)));
-
- data = Endian::Big (data);
- DataStream->Write (ConstBufferPtr ((byte *) &data, sizeof (data)));
- }
-
- void Serializer::Serialize (const string &name, bool data)
- {
- SerializeString (name);
- byte d = data ? 1 : 0;
- Serialize (d);
- }
-
- void Serializer::Serialize (const string &name, byte data)
- {
- SerializeString (name);
- Serialize (data);
- }
-
- void Serializer::Serialize (const string &name, const char *data)
- {
- Serialize (name, string (data));
- }
-
- void Serializer::Serialize (const string &name, int32 data)
- {
- SerializeString (name);
- Serialize ((uint32) data);
- }
-
- void Serializer::Serialize (const string &name, int64 data)
- {
- SerializeString (name);
- Serialize ((uint64) data);
- }
-
- void Serializer::Serialize (const string &name, uint32 data)
- {
- SerializeString (name);
- Serialize (data);
- }
-
- void Serializer::Serialize (const string &name, uint64 data)
- {
- SerializeString (name);
- Serialize (data);
- }
-
- void Serializer::Serialize (const string &name, const string &data)
- {
- SerializeString (name);
- SerializeString (data);
- }
-
- void Serializer::Serialize (const string &name, const wchar_t *data)
- {
- Serialize (name, wstring (data));
- }
-
- void Serializer::Serialize (const string &name, const wstring &data)
- {
- SerializeString (name);
- SerializeWString (data);
- }
-
- void Serializer::Serialize (const string &name, const list <string> &stringList)
- {
- SerializeString (name);
-
- uint64 listSize = stringList.size();
- Serialize (listSize);
-
- foreach (const string &item, stringList)
- SerializeString (item);
- }
-
- void Serializer::Serialize (const string &name, const list <wstring> &stringList)
- {
- SerializeString (name);
-
- uint64 listSize = stringList.size();
- Serialize (listSize);
-
- foreach (const wstring &item, stringList)
- SerializeWString (item);
- }
-
- void Serializer::Serialize (const string &name, const ConstBufferPtr &data)
- {
- SerializeString (name);
-
- uint64 size = data.Size();
- Serialize (size);
-
- DataStream->Write (data);
- }
-
- void Serializer::SerializeString (const string &data)
- {
- Serialize ((uint64) data.size() + 1);
- DataStream->Write (ConstBufferPtr ((byte *) (data.data() ? data.data() : data.c_str()), data.size() + 1));
- }
-
- void Serializer::SerializeWString (const wstring &data)
- {
- uint64 size = (data.size() + 1) * sizeof (wchar_t);
- Serialize (size);
- DataStream->Write (ConstBufferPtr ((byte *) (data.data() ? data.data() : data.c_str()), (size_t) size));
- }
-
- void Serializer::ValidateName (const string &name)
- {
- string dName = DeserializeString();
- if (dName != name)
- {
- throw ParameterIncorrect (SRC_POS);
- }
- }
-}
+*/
+
+#include "Exception.h"
+#include "ForEach.h"
+#include "Memory.h"
+#include "Serializer.h"
+
+namespace VeraCrypt
+{
+ template <typename T>
+ T Serializer::Deserialize ()
+ {
+ uint64 size;
+ DataStream->ReadCompleteBuffer (BufferPtr ((byte *) &size, sizeof (size)));
+
+ if (Endian::Big (size) != sizeof (T))
+ throw ParameterIncorrect (SRC_POS);
+
+ T data;
+ DataStream->ReadCompleteBuffer (BufferPtr ((byte *) &data, sizeof (data)));
+
+ return Endian::Big (data);
+ }
+
+ void Serializer::Deserialize (const string &name, bool &data)
+ {
+ ValidateName (name);
+ data = Deserialize <byte> () == 1;
+ }
+
+ void Serializer::Deserialize (const string &name, byte &data)
+ {
+ ValidateName (name);
+ data = Deserialize <byte> ();
+ }
+
+ void Serializer::Deserialize (const string &name, int32 &data)
+ {
+ ValidateName (name);
+ data = (int32) Deserialize <uint32> ();
+ }
+
+ void Serializer::Deserialize (const string &name, int64 &data)
+ {
+ ValidateName (name);
+ data = (int64) Deserialize <uint64> ();
+ }
+
+ void Serializer::Deserialize (const string &name, uint32 &data)
+ {
+ ValidateName (name);
+ data = Deserialize <uint32> ();
+ }
+
+ void Serializer::Deserialize (const string &name, uint64 &data)
+ {
+ ValidateName (name);
+ data = Deserialize <uint64> ();
+ }
+
+ void Serializer::Deserialize (const string &name, string &data)
+ {
+ ValidateName (name);
+ data = DeserializeString ();
+ }
+
+ void Serializer::Deserialize (const string &name, wstring &data)
+ {
+ ValidateName (name);
+ data = DeserializeWString ();
+ }
+
+ void Serializer::Deserialize (const string &name, const BufferPtr &data)
+ {
+ ValidateName (name);
+
+ uint64 size = Deserialize <uint64> ();
+ if (data.Size() != size)
+ throw ParameterIncorrect (SRC_POS);
+
+ DataStream->ReadCompleteBuffer (data);
+ }
+
+ bool Serializer::DeserializeBool (const string &name)
+ {
+ bool data;
+ Deserialize (name, data);
+ return data;
+ }
+
+ int32 Serializer::DeserializeInt32 (const string &name)
+ {
+ ValidateName (name);
+ return Deserialize <uint32> ();
+ }
+
+ int64 Serializer::DeserializeInt64 (const string &name)
+ {
+ ValidateName (name);
+ return Deserialize <uint64> ();
+ }
+
+ uint32 Serializer::DeserializeUInt32 (const string &name)
+ {
+ ValidateName (name);
+ return Deserialize <uint32> ();
+ }
+
+ uint64 Serializer::DeserializeUInt64 (const string &name)
+ {
+ ValidateName (name);
+ return Deserialize <uint64> ();
+ }
+
+ string Serializer::DeserializeString ()
+ {
+ uint64 size = Deserialize <uint64> ();
+
+ vector <char> data ((size_t) size);
+ DataStream->ReadCompleteBuffer (BufferPtr ((byte *) &data[0], (size_t) size));
+
+ return string (&data[0]);
+ }
+
+ string Serializer::DeserializeString (const string &name)
+ {
+ ValidateName (name);
+ return DeserializeString ();
+ }
+
+ list <string> Serializer::DeserializeStringList (const string &name)
+ {
+ ValidateName (name);
+ list <string> deserializedList;
+ uint64 listSize = Deserialize <uint64> ();
+
+ for (size_t i = 0; i < listSize; i++)
+ deserializedList.push_back (DeserializeString ());
+
+ return deserializedList;
+ }
+
+ wstring Serializer::DeserializeWString ()
+ {
+ uint64 size = Deserialize <uint64> ();
+
+ vector <wchar_t> data ((size_t) size / sizeof (wchar_t));
+ DataStream->ReadCompleteBuffer (BufferPtr ((byte *) &data[0], (size_t) size));
+
+ return wstring (&data[0]);
+ }
+
+ list <wstring> Serializer::DeserializeWStringList (const string &name)
+ {
+ ValidateName (name);
+ list <wstring> deserializedList;
+ uint64 listSize = Deserialize <uint64> ();
+
+ for (size_t i = 0; i < listSize; i++)
+ deserializedList.push_back (DeserializeWString ());
+
+ return deserializedList;
+ }
+
+ wstring Serializer::DeserializeWString (const string &name)
+ {
+ ValidateName (name);
+ return DeserializeWString ();
+ }
+
+ template <typename T>
+ void Serializer::Serialize (T data)
+ {
+ uint64 size = Endian::Big (uint64 (sizeof (data)));
+ DataStream->Write (ConstBufferPtr ((byte *) &size, sizeof (size)));
+
+ data = Endian::Big (data);
+ DataStream->Write (ConstBufferPtr ((byte *) &data, sizeof (data)));
+ }
+
+ void Serializer::Serialize (const string &name, bool data)
+ {
+ SerializeString (name);
+ byte d = data ? 1 : 0;
+ Serialize (d);
+ }
+
+ void Serializer::Serialize (const string &name, byte data)
+ {
+ SerializeString (name);
+ Serialize (data);
+ }
+
+ void Serializer::Serialize (const string &name, const char *data)
+ {
+ Serialize (name, string (data));
+ }
+
+ void Serializer::Serialize (const string &name, int32 data)
+ {
+ SerializeString (name);
+ Serialize ((uint32) data);
+ }
+
+ void Serializer::Serialize (const string &name, int64 data)
+ {
+ SerializeString (name);
+ Serialize ((uint64) data);
+ }
+
+ void Serializer::Serialize (const string &name, uint32 data)
+ {
+ SerializeString (name);
+ Serialize (data);
+ }
+
+ void Serializer::Serialize (const string &name, uint64 data)
+ {
+ SerializeString (name);
+ Serialize (data);
+ }
+
+ void Serializer::Serialize (const string &name, const string &data)
+ {
+ SerializeString (name);
+ SerializeString (data);
+ }
+
+ void Serializer::Serialize (const string &name, const wchar_t *data)
+ {
+ Serialize (name, wstring (data));
+ }
+
+ void Serializer::Serialize (const string &name, const wstring &data)
+ {
+ SerializeString (name);
+ SerializeWString (data);
+ }
+
+ void Serializer::Serialize (const string &name, const list <string> &stringList)
+ {
+ SerializeString (name);
+
+ uint64 listSize = stringList.size();
+ Serialize (listSize);
+
+ foreach (const string &item, stringList)
+ SerializeString (item);
+ }
+
+ void Serializer::Serialize (const string &name, const list <wstring> &stringList)
+ {
+ SerializeString (name);
+
+ uint64 listSize = stringList.size();
+ Serialize (listSize);
+
+ foreach (const wstring &item, stringList)
+ SerializeWString (item);
+ }
+
+ void Serializer::Serialize (const string &name, const ConstBufferPtr &data)
+ {
+ SerializeString (name);
+
+ uint64 size = data.Size();
+ Serialize (size);
+
+ DataStream->Write (data);
+ }
+
+ void Serializer::SerializeString (const string &data)
+ {
+ Serialize ((uint64) data.size() + 1);
+ DataStream->Write (ConstBufferPtr ((byte *) (data.data() ? data.data() : data.c_str()), data.size() + 1));
+ }
+
+ void Serializer::SerializeWString (const wstring &data)
+ {
+ uint64 size = (data.size() + 1) * sizeof (wchar_t);
+ Serialize (size);
+ DataStream->Write (ConstBufferPtr ((byte *) (data.data() ? data.data() : data.c_str()), (size_t) size));
+ }
+
+ void Serializer::ValidateName (const string &name)
+ {
+ string dName = DeserializeString();
+ if (dName != name)
+ {
+ throw ParameterIncorrect (SRC_POS);
+ }
+ }
+}