diff --git a/client/emv/cmdemv.c b/client/emv/cmdemv.c index 420e9c35..a6789cda 100644 --- a/client/emv/cmdemv.c +++ b/client/emv/cmdemv.c @@ -1234,6 +1234,11 @@ int CmdHFEMVScan(const char *cmd) { if (decodeTLV) TLVPrintFromBuffer(buf, len); + // check mode + if (tlvdb_get(tlvRoot, 0x9f38, NULL)) { + JsonSaveStr(root, "$.Application.Mode", TransactionTypeStr[TrType]); + } + struct tlvdb *fci = tlvdb_parse_multi(buf, len); if (extractTLVElements) JsonSaveTLVTree(root, root, "$.Application.FCITemplate", fci); diff --git a/client/emv/emvcore.c b/client/emv/emvcore.c index 5de00dfb..66b70319 100644 --- a/client/emv/emvcore.c +++ b/client/emv/emvcore.c @@ -19,6 +19,13 @@ static const char *PSElist [] = { }; //static const size_t PSElistLen = sizeof(PSElist)/sizeof(char*); +char *TransactionTypeStr[] = { + "MSD", + "VSDC", + "qVCDCMCHIP", + "CDA" +}; + typedef struct { enum CardPSVendor vendor; const char* aid; diff --git a/client/emv/emvcore.h b/client/emv/emvcore.h index 0041ec30..b2aa4510 100644 --- a/client/emv/emvcore.h +++ b/client/emv/emvcore.h @@ -39,6 +39,8 @@ enum TransactionType { TT_CDA, }; +extern char *TransactionTypeStr[]; + typedef struct { uint8_t CLA; uint8_t INS;