VeraCrypt
aboutsummaryrefslogtreecommitdiff
path: root/src/Common/TLVParser.h
diff options
context:
space:
mode:
authorMounir IDRASSI <mounir.idrassi@idrix.fr>2023-06-29 00:06:20 +0200
committerMounir IDRASSI <mounir.idrassi@idrix.fr>2023-06-29 00:06:20 +0200
commit034b64f4153550cbe5849bcbfc27e187377cc512 (patch)
treed831496163c3891031765010bf1934406b0c4a3c /src/Common/TLVParser.h
parent502ab9112a7624dbd7c1c90c2e12ed45512b8b3c (diff)
downloadVeraCrypt-034b64f4153550cbe5849bcbfc27e187377cc512.tar.gz
VeraCrypt-034b64f4153550cbe5849bcbfc27e187377cc512.zip
EMV keyfile support: Overall code improvements and bug fixes
Diffstat (limited to 'src/Common/TLVParser.h')
-rw-r--r--src/Common/TLVParser.h130
1 files changed, 65 insertions, 65 deletions
diff --git a/src/Common/TLVParser.h b/src/Common/TLVParser.h
index e25e429f..b989ca41 100644
--- a/src/Common/TLVParser.h
+++ b/src/Common/TLVParser.h
@@ -1,80 +1,80 @@
-//
-// Created by bshp on 1/20/23.
-//
-
-#ifndef ICC_EXTRACTOR_TLVPARSER_H
-#define ICC_EXTRACTOR_TLVPARSER_H
-#include <stdint.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <algorithm>
-#include <string>
-#include <memory>
-#include "iostream"
-#include "Tcdefs.h"
-using namespace std;
-struct TLVNode{
- uint16_t Tag; /* T */
- uint16_t Length; /* L */
- unsigned char* Value; /* V */
- unsigned char TagSize;
- unsigned char LengthSize;
- uint16_t MoreFlag; /* Used In Sub */
- uint16_t SubFlag; /* Does it have sub-nodes? */
- uint16_t SubCount;
- shared_ptr<TLVNode> Sub[256];
- shared_ptr<TLVNode> Next;
-
- ~TLVNode() {
- burn(Value, Length);
- delete Value;
- }
-};
+#ifndef TC_HEADER_Common_TLVPARSER
+#define TC_HEADER_Common_TLVPARSER
-class TLVParser{
-private :
+#include "Platform/PlatformBase.h"
+#include "Tcdefs.h"
- /* TLV node structure creation */
- static shared_ptr<TLVNode> TLV_CreateNode();
+namespace VeraCrypt
+{
+ struct TLVNode
+ {
+ uint16 Tag; /* T */
+ uint16 Length; /* L */
+ shared_ptr<vector<byte>> Value; /* V */
+ byte TagSize;
+ byte LengthSize;
+ uint16 MoreFlag; /* Used In Sub */
+ uint16 SubFlag; /* Does it have sub-nodes? */
+ shared_ptr<vector<shared_ptr<TLVNode>>> Subs;
+
+ TLVNode() : Tag(0), Length(0), TagSize(0), LengthSize(0), MoreFlag(0), SubFlag(0)
+ {
+ Value = make_shared<vector<byte>>();
+ Subs = make_shared<vector<shared_ptr<TLVNode>>>();
+ }
+
+ ~TLVNode()
+ {
+ burn(Value->data(), Value->size());
+ }
+ };
+
+ class TLVParser
+ {
+ private :
- /* Check if the bit is correct */
- static uint16_t CheckBit(unsigned char value, int bit);
+ /* TLV node structure creation */
+ static shared_ptr<TLVNode> TLV_CreateNode();
- /* Parsing one TLV node */
- static shared_ptr<TLVNode> TLV_Parse_One(unsigned char* buf,int size);
+ /* Check if the bit is correct */
+ static uint16 CheckBit(byte value, int bit);
- /* Parsing all TLV nodes */
- static int TLV_Parse_SubNodes(shared_ptr<TLVNode> parent);
+ /* Parsing one TLV node */
+ static shared_ptr<TLVNode> TLV_Parse_One(byte* buf, size_t size);
- /* Parsing all sub-nodes (in width not in depth) of a given parent node */
- static int TLV_Parse_All(shared_ptr<TLVNode> parent);
+ /* Parsing all TLV nodes */
+ static int TLV_Parse_SubNodes(shared_ptr<TLVNode> parent);
- /* Recursive function to parse all nodes starting from a root parent node */
- static void TLV_Parse_Sub(shared_ptr<TLVNode> parent);
+ /* Parsing all sub-nodes (in width not in depth) of a given parent node */
+ static int TLV_Parse_All(shared_ptr<TLVNode> parent);
-public:
+ /* Recursive function to parse all nodes starting from a root parent node */
+ static void TLV_Parse_Sub(shared_ptr<TLVNode> parent);
- /* Parsing TLV from a buffer and constructing TLV structure */
- static shared_ptr<TLVNode> TLV_Parse(unsigned char* buf,int size);
+ public:
- /* Finding a TLV node with a particular tag */
- static shared_ptr<TLVNode> TLV_Find(shared_ptr<TLVNode> node,uint16_t tag);
-};
+ /* Parsing TLV from a buffer and constructing TLV structure */
+ static shared_ptr<TLVNode> TLV_Parse(byte* buf, size_t size);
-/* The definition of the exception class related to the TLV parsing */
-class TLVException
-{
-public:
- TLVException(std::string errormessage): m_errormessage(errormessage){}
+ /* Finding a TLV node with a particular tag */
+ static shared_ptr<TLVNode> TLV_Find(shared_ptr<TLVNode> node, uint16 tag);
+ };
- /* Get the error message */
- inline std::string ErrorMessage() const
+ /* The definition of the exception class related to the TLV parsing */
+ class TLVException
{
- return m_errormessage;
- }
+ 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;
-};
+ protected:
+ std::string m_errormessage;
+ };
+}
-#endif //ICC_EXTRACTOR_TLVPARSER_H
+#endif //TC_HEADER_Common_TLVPARSER