diff options
author | Mounir IDRASSI <mounir.idrassi@idrix.fr> | 2023-06-29 00:06:20 +0200 |
---|---|---|
committer | Mounir IDRASSI <mounir.idrassi@idrix.fr> | 2023-06-29 00:06:20 +0200 |
commit | 034b64f4153550cbe5849bcbfc27e187377cc512 (patch) | |
tree | d831496163c3891031765010bf1934406b0c4a3c /src/Common/TLVParser.h | |
parent | 502ab9112a7624dbd7c1c90c2e12ed45512b8b3c (diff) | |
download | VeraCrypt-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.h | 130 |
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 |