emrtd: Validate date further
This commit is contained in:
@@ -1298,6 +1298,22 @@ static void text_to_upper(uint8_t *data, int datalen) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static bool validate_date(uint8_t *data, int datalen) {
|
||||||
|
// Date has to be 6 chars
|
||||||
|
if (datalen != 6) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check for valid date and month numbers
|
||||||
|
char temp[4] = { 0x00 };
|
||||||
|
memcpy(temp, data + 2, 2);
|
||||||
|
int month = (int) strtol(temp, NULL, 10);
|
||||||
|
memcpy(temp, data + 4, 2);
|
||||||
|
int day = (int) strtol(temp, NULL, 10);
|
||||||
|
|
||||||
|
return !(day <= 0 || day > 31 || month <= 0 || month > 12);
|
||||||
|
}
|
||||||
|
|
||||||
static int cmd_hf_emrtd_dump(const char *Cmd) {
|
static int cmd_hf_emrtd_dump(const char *Cmd) {
|
||||||
CLIParserContext *ctx;
|
CLIParserContext *ctx;
|
||||||
CLIParserInit(&ctx, "hf emrtd dump",
|
CLIParserInit(&ctx, "hf emrtd dump",
|
||||||
@@ -1333,8 +1349,8 @@ static int cmd_hf_emrtd_dump(const char *Cmd) {
|
|||||||
if (CLIParamStrToBuf(arg_get_str(ctx, 2), dob, 6, &slen) != 0 || slen == 0) {
|
if (CLIParamStrToBuf(arg_get_str(ctx, 2), dob, 6, &slen) != 0 || slen == 0) {
|
||||||
BAC = false;
|
BAC = false;
|
||||||
} else {
|
} else {
|
||||||
if (slen != 6) {
|
if (!validate_date(dob, slen)) {
|
||||||
PrintAndLogEx(ERR, "Date of Birth length is incorrect, cannot continue.");
|
PrintAndLogEx(ERR, "Date of birth date format is incorrect, cannot continue.");
|
||||||
PrintAndLogEx(HINT, "Use the format YYMMDD.");
|
PrintAndLogEx(HINT, "Use the format YYMMDD.");
|
||||||
return PM3_ESOFT;
|
return PM3_ESOFT;
|
||||||
}
|
}
|
||||||
@@ -1343,8 +1359,8 @@ static int cmd_hf_emrtd_dump(const char *Cmd) {
|
|||||||
if (CLIParamStrToBuf(arg_get_str(ctx, 3), expiry, 6, &slen) != 0 || slen == 0) {
|
if (CLIParamStrToBuf(arg_get_str(ctx, 3), expiry, 6, &slen) != 0 || slen == 0) {
|
||||||
BAC = false;
|
BAC = false;
|
||||||
} else {
|
} else {
|
||||||
if (slen != 6) {
|
if (!validate_date(expiry, slen)) {
|
||||||
PrintAndLogEx(ERR, "Document expiry length is incorrect, cannot continue.");
|
PrintAndLogEx(ERR, "Expiry date format is incorrect, cannot continue.");
|
||||||
PrintAndLogEx(HINT, "Use the format YYMMDD.");
|
PrintAndLogEx(HINT, "Use the format YYMMDD.");
|
||||||
return PM3_ESOFT;
|
return PM3_ESOFT;
|
||||||
}
|
}
|
||||||
@@ -1388,8 +1404,8 @@ static int cmd_hf_emrtd_info(const char *Cmd) {
|
|||||||
if (CLIParamStrToBuf(arg_get_str(ctx, 2), dob, 6, &slen) != 0 || slen == 0) {
|
if (CLIParamStrToBuf(arg_get_str(ctx, 2), dob, 6, &slen) != 0 || slen == 0) {
|
||||||
BAC = false;
|
BAC = false;
|
||||||
} else {
|
} else {
|
||||||
if (slen != 6) {
|
if (!validate_date(dob, slen)) {
|
||||||
PrintAndLogEx(ERR, "Date of Birth length is incorrect, cannot continue.");
|
PrintAndLogEx(ERR, "Date of birth date format is incorrect, cannot continue.");
|
||||||
PrintAndLogEx(HINT, "Use the format YYMMDD.");
|
PrintAndLogEx(HINT, "Use the format YYMMDD.");
|
||||||
return PM3_ESOFT;
|
return PM3_ESOFT;
|
||||||
}
|
}
|
||||||
@@ -1398,8 +1414,8 @@ static int cmd_hf_emrtd_info(const char *Cmd) {
|
|||||||
if (CLIParamStrToBuf(arg_get_str(ctx, 3), expiry, 6, &slen) != 0 || slen == 0) {
|
if (CLIParamStrToBuf(arg_get_str(ctx, 3), expiry, 6, &slen) != 0 || slen == 0) {
|
||||||
BAC = false;
|
BAC = false;
|
||||||
} else {
|
} else {
|
||||||
if (slen != 6) {
|
if (!validate_date(expiry, slen)) {
|
||||||
PrintAndLogEx(ERR, "Document expiry length is incorrect, cannot continue.");
|
PrintAndLogEx(ERR, "Expiry date format is incorrect, cannot continue.");
|
||||||
PrintAndLogEx(HINT, "Use the format YYMMDD.");
|
PrintAndLogEx(HINT, "Use the format YYMMDD.");
|
||||||
return PM3_ESOFT;
|
return PM3_ESOFT;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user