#ifndef TC_HEADER_Common_TLVPARSER #define TC_HEADER_Common_TLVPARSER #include "Platform/PlatformBase.h" #include "Tcdefs.h" namespace VeraCrypt { struct TLVNode { uint16 Tag; /* T */ uint16 Length; /* L */ shared_ptr> Value; /* V */ byte TagSize; byte LengthSize; uint16 MoreFlag; /* Used In Sub */ uint16 SubFlag; /* Does it have sub-nodes? */ shared_ptr>> Subs; TLVNode() : Tag(0), Length(0), TagSize(0), LengthSize(0), MoreFlag(0), SubFlag(0) { Value = make_shared>(); Subs = make_shared>>(); } ~TLVNode() { burn(Value->data(), Value->size()); } }; class TLVParser { private : /* TLV node structure creation */ static shared_ptr TLV_CreateNode(); /* Check if the bit is correct */ static uint16 CheckBit(byte value, int bit); /* Parsing one TLV node */ static shared_ptr TLV_Parse_One(byte* buf, size_t size); /* Parsing all TLV nodes */ static int TLV_Parse_SubNodes(shared_ptr parent); /* Parsing all sub-nodes (in width not in depth) of a given parent node */ static int TLV_Parse_All(shared_ptr parent); /* Recursive function to parse all nodes starting from a root parent node */ static void TLV_Parse_Sub(shared_ptr parent); public: /* Parsing TLV from a buffer and constructing TLV structure */ static shared_ptr TLV_Parse(byte* buf, size_t size); /* Finding a TLV node with a particular tag */ static shared_ptr TLV_Find(shared_ptr node, uint16 tag); }; /* The definition of the exception class related to the TLV parsing */ class TLVException { public: TLVException(std::string errormessage): m_errormessage(errormessage){} /* Get the error message */ inline std::string ErrorMessage() const { return m_errormessage; } protected: std::string m_errormessage; }; } #endif //TC_HEADER_Common_TLVPARSER orms/VolumePasswordPanel.h?h=CI&id=e412c0458b9df6bb1f2482823d397acc2a656464'>diff
blob: 83efc2ffed512177232da8cb2eac94259893ab8d (plain)
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