mirror of
https://github.com/Proxmark/proxmark3.git
synced 2025-08-22 06:13:27 -07:00
added to hf emv exec
: load params from json and some refactoring
This commit is contained in:
parent
c1feddf2f3
commit
145111e84e
3 changed files with 44 additions and 26 deletions
|
@ -334,8 +334,13 @@ bool ParamLoadFromJson(struct tlvdb *tlv) {
|
|||
return false;
|
||||
}
|
||||
|
||||
// TODO: add search current path
|
||||
root = json_load_file("./emv/defparams.json", 0, &error);
|
||||
// current path + file name
|
||||
const char *relfname = "emv/defparams.json";
|
||||
char fname[strlen(get_my_executable_directory()) + strlen(relfname) + 1];
|
||||
strcpy(fname, get_my_executable_directory());
|
||||
strcat(fname, relfname);
|
||||
|
||||
root = json_load_file(fname, 0, &error);
|
||||
if (!root) {
|
||||
PrintAndLog("Load params: json error on line %d: %s", error.line, error.text);
|
||||
return false;
|
||||
|
@ -396,7 +401,7 @@ bool ParamLoadFromJson(struct tlvdb *tlv) {
|
|||
uint8_t buf[251] = {0};
|
||||
size_t buflen = 0;
|
||||
|
||||
// here max length must be 4, but now tlv_tag_t is 2-byte var. so let it be 2 by now... needs refactoring tlv_tag_t...
|
||||
// here max length must be 4, but now tlv_tag_t is 2-byte var. so let it be 2 by now... TODO: needs refactoring tlv_tag_t...
|
||||
if (!HexToBuffer("TLV Error type:", tlvType, buf, 2, &buflen)) {
|
||||
json_decref(root);
|
||||
return false;
|
||||
|
@ -425,6 +430,26 @@ bool ParamLoadFromJson(struct tlvdb *tlv) {
|
|||
return true;
|
||||
}
|
||||
|
||||
void ParamLoadDefaults(struct tlvdb *tlvRoot) {
|
||||
//9F02:(Amount, authorized (Numeric)) len:6
|
||||
TLV_ADD(0x9F02, "\x00\x00\x00\x00\x01\x00");
|
||||
//9F1A:(Terminal Country Code) len:2
|
||||
TLV_ADD(0x9F1A, "ru");
|
||||
//5F2A:(Transaction Currency Code) len:2
|
||||
// USD 840, EUR 978, RUR 810, RUB 643, RUR 810(old), UAH 980, AZN 031, n/a 999
|
||||
TLV_ADD(0x5F2A, "\x09\x80");
|
||||
//9A:(Transaction Date) len:3
|
||||
TLV_ADD(0x9A, "\x00\x00\x00");
|
||||
//9C:(Transaction Type) len:1 | 00 => Goods and service #01 => Cash
|
||||
TLV_ADD(0x9C, "\x00");
|
||||
// 9F37 Unpredictable Number len:4
|
||||
TLV_ADD(0x9F37, "\x01\x02\x03\x04");
|
||||
// 9F6A Unpredictable Number (MSD for UDOL) len:4
|
||||
TLV_ADD(0x9F6A, "\x01\x02\x03\x04");
|
||||
//9F66:(Terminal Transaction Qualifiers (TTQ)) len:4
|
||||
TLV_ADD(0x9F66, "\x26\x00\x00\x00"); // qVSDC
|
||||
}
|
||||
|
||||
int CmdHFEMVExec(const char *cmd) {
|
||||
bool activateField = false;
|
||||
bool showAPDU = false;
|
||||
|
@ -432,6 +457,7 @@ int CmdHFEMVExec(const char *cmd) {
|
|||
bool forceSearch = false;
|
||||
enum TransactionType TrType = TT_MSD;
|
||||
bool GenACGPO = false;
|
||||
bool paramLoadJSON = false;
|
||||
|
||||
uint8_t buf[APDU_RES_LEN] = {0};
|
||||
size_t len = 0;
|
||||
|
@ -493,6 +519,10 @@ int CmdHFEMVExec(const char *cmd) {
|
|||
case 'G':
|
||||
GenACGPO = true;
|
||||
break;
|
||||
case 'j':
|
||||
case 'J':
|
||||
paramLoadJSON = true;
|
||||
break;
|
||||
default:
|
||||
PrintAndLog("Unknown parameter '%c'", param_getchar_indx(cmd, 1, cmdp));
|
||||
return 1;
|
||||
|
@ -559,7 +589,12 @@ int CmdHFEMVExec(const char *cmd) {
|
|||
|
||||
PrintAndLog("\n* Init transaction parameters.");
|
||||
|
||||
ParamLoadFromJson(tlvRoot);
|
||||
ParamLoadDefaults(tlvRoot);
|
||||
|
||||
if (paramLoadJSON) {
|
||||
PrintAndLog("* * Transaction parameters loading from JSON...");
|
||||
ParamLoadFromJson(tlvRoot);
|
||||
}
|
||||
|
||||
//9F66:(Terminal Transaction Qualifiers (TTQ)) len:4
|
||||
char *qVSDC = "\x26\x00\x00\x00";
|
||||
|
@ -581,26 +616,9 @@ int CmdHFEMVExec(const char *cmd) {
|
|||
TLV_ADD(0x9F66, qVSDC); // qVSDC (VISA CDA not enabled)
|
||||
break;
|
||||
default:
|
||||
TLV_ADD(0x9F66, "\x26\x00\x00\x00"); // qVSDC
|
||||
break;
|
||||
}
|
||||
|
||||
//9F02:(Amount, authorized (Numeric)) len:6
|
||||
TLV_ADD(0x9F02, "\x00\x00\x00\x00\x01\x00");
|
||||
//9F1A:(Terminal Country Code) len:2
|
||||
TLV_ADD(0x9F1A, "ru");
|
||||
//5F2A:(Transaction Currency Code) len:2
|
||||
// USD 840, EUR 978, RUR 810, RUB 643, RUR 810(old), UAH 980, AZN 031, n/a 999
|
||||
TLV_ADD(0x5F2A, "\x09\x80");
|
||||
//9A:(Transaction Date) len:3
|
||||
TLV_ADD(0x9A, "\x00\x00\x00");
|
||||
//9C:(Transaction Type) len:1 | 00 => Goods and service #01 => Cash
|
||||
TLV_ADD(0x9C, "\x00");
|
||||
// 9F37 Unpredictable Number len:4
|
||||
TLV_ADD(0x9F37, "\x01\x02\x03\x04");
|
||||
// 9F6A Unpredictable Number (MSD for UDOL) len:4
|
||||
TLV_ADD(0x9F6A, "\x01\x02\x03\x04");
|
||||
|
||||
TLVPrintFromTLV(tlvRoot); // TODO delete!!!
|
||||
|
||||
PrintAndLog("\n* Calc PDOL.");
|
||||
|
|
|
@ -51,8 +51,8 @@
|
|||
{
|
||||
"name": "Unpredictable Number (MSD for UDOL)",
|
||||
"type": "9F 6A",
|
||||
"value": "01 02 03 04",
|
||||
"value": "01 02 03 05",
|
||||
"length": 4,
|
||||
"hint": "4 byte random number"
|
||||
}
|
||||
]
|
||||
]
|
||||
|
|
|
@ -376,12 +376,12 @@ void tlvdb_change_or_add_node(struct tlvdb *tlvdb, tlv_tag_t tag, size_t len, co
|
|||
tnewelm->next = telm->next;
|
||||
tnewelm->parent = telm->parent;
|
||||
|
||||
// if elm stays 1st in children link
|
||||
// if telm stayed first in children chain
|
||||
if (telm->parent && telm->parent->children == telm) {
|
||||
telm->parent->children = tnewelm;
|
||||
}
|
||||
|
||||
// if elm have prev element
|
||||
// if telm have previous element
|
||||
if (telm != tlvdb) {
|
||||
// elm in root
|
||||
struct tlvdb *celm = tlvdb;
|
||||
|
@ -398,7 +398,7 @@ void tlvdb_change_or_add_node(struct tlvdb *tlvdb, tlv_tag_t tag, size_t len, co
|
|||
}
|
||||
}
|
||||
|
||||
// free old element
|
||||
// free old element with childrens
|
||||
telm->next = NULL;
|
||||
tlvdb_free(telm);
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue