mirror of
https://github.com/Proxmark/proxmark3.git
synced 2025-07-30 11:38:38 -07:00
tlv decoder works.
This commit is contained in:
parent
499df9088d
commit
23207d748f
3 changed files with 3 additions and 26 deletions
|
@ -760,7 +760,7 @@ int CmdHF14AAPDU(const char *cmd) {
|
||||||
|
|
||||||
PrintAndLog("APDU response: %02x %02x - %s", data[datalen - 2], data[datalen - 1], GetAPDUCodeDescription(data[datalen - 2], data[datalen - 1]));
|
PrintAndLog("APDU response: %02x %02x - %s", data[datalen - 2], data[datalen - 1], GetAPDUCodeDescription(data[datalen - 2], data[datalen - 1]));
|
||||||
|
|
||||||
// here TLV decoder...
|
// TLV decoder
|
||||||
if (decodeTLV && datalen > 4) {
|
if (decodeTLV && datalen > 4) {
|
||||||
TLVPrintFromBuffer(data, datalen - 2);
|
TLVPrintFromBuffer(data, datalen - 2);
|
||||||
}
|
}
|
||||||
|
|
|
@ -30,7 +30,6 @@ enum emv_tag_t {
|
||||||
EMV_TAG_STRING,
|
EMV_TAG_STRING,
|
||||||
EMV_TAG_NUMERIC,
|
EMV_TAG_NUMERIC,
|
||||||
EMV_TAG_YYMMDD,
|
EMV_TAG_YYMMDD,
|
||||||
EMV_TAG_FCI,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
struct emv_tag {
|
struct emv_tag {
|
||||||
|
@ -128,7 +127,7 @@ static const struct emv_tag emv_tags[] = {
|
||||||
{ 0x5f30, "Service Code", EMV_TAG_NUMERIC },
|
{ 0x5f30, "Service Code", EMV_TAG_NUMERIC },
|
||||||
{ 0x5f34, "Application Primary Account Number (PAN) Sequence Number", EMV_TAG_NUMERIC },
|
{ 0x5f34, "Application Primary Account Number (PAN) Sequence Number", EMV_TAG_NUMERIC },
|
||||||
{ 0x61 , "Application Template" },
|
{ 0x61 , "Application Template" },
|
||||||
{ 0x6f , "File Control Information (FCI) Template", EMV_TAG_FCI },
|
{ 0x6f , "File Control Information (FCI) Template" },
|
||||||
{ 0x70 , "READ RECORD Response Message Template" },
|
{ 0x70 , "READ RECORD Response Message Template" },
|
||||||
{ 0x77 , "Response Message Template Format 2" },
|
{ 0x77 , "Response Message Template Format 2" },
|
||||||
{ 0x80 , "Response Message Template Format 1" },
|
{ 0x80 , "Response Message Template Format 1" },
|
||||||
|
@ -269,25 +268,6 @@ static void emv_tag_dump_dol(const struct tlv *tlv, const struct emv_tag *tag, F
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void emv_tag_dump_fci(const struct tlv *tlv, const struct emv_tag *tag, FILE *f) {
|
|
||||||
const unsigned char *buf = tlv->value;
|
|
||||||
size_t left = tlv->len;
|
|
||||||
|
|
||||||
while (left) {
|
|
||||||
struct tlv doltlv;
|
|
||||||
const struct emv_tag *doltag;
|
|
||||||
|
|
||||||
if (!tlv_parse_tl(&buf, &left, &doltlv)) {
|
|
||||||
fprintf(f, "Invalid Tag-Len\n");
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
doltag = emv_get_tag(&doltlv);
|
|
||||||
|
|
||||||
fprintf(f, "\t--%2hx[%02zx]'%s'\n", doltlv.tag, doltlv.len, doltag->name);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void emv_tag_dump_string(const struct tlv *tlv, const struct emv_tag *tag, FILE *f)
|
static void emv_tag_dump_string(const struct tlv *tlv, const struct emv_tag *tag, FILE *f)
|
||||||
{
|
{
|
||||||
fprintf(f, "\tString value '");
|
fprintf(f, "\tString value '");
|
||||||
|
@ -471,9 +451,6 @@ bool emv_tag_dump(const struct tlv *tlv, FILE *f)
|
||||||
case EMV_TAG_YYMMDD:
|
case EMV_TAG_YYMMDD:
|
||||||
emv_tag_dump_yymmdd(tlv, tag, f);
|
emv_tag_dump_yymmdd(tlv, tag, f);
|
||||||
break;
|
break;
|
||||||
case EMV_TAG_FCI:
|
|
||||||
emv_tag_dump_fci(tlv, tag, f);
|
|
||||||
break;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
|
|
@ -19,7 +19,7 @@ static bool print_cb(void *data, const struct tlv *tlv) {
|
||||||
|
|
||||||
void TLVPrintFromBuffer(uint8_t *data, int datalen) {
|
void TLVPrintFromBuffer(uint8_t *data, int datalen) {
|
||||||
struct tlvdb *t = NULL;
|
struct tlvdb *t = NULL;
|
||||||
t = tlvdb_parse(data, datalen);
|
t = tlvdb_parse_multi(data, datalen);
|
||||||
if (t) {
|
if (t) {
|
||||||
PrintAndLog("TLV decoded:");
|
PrintAndLog("TLV decoded:");
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue