This commit is contained in:
iceman1001 2020-06-12 22:49:42 +02:00
commit 94403bee59

View file

@ -32,8 +32,7 @@
#include "fileutils.h" #include "fileutils.h"
#include "pm3_cmd.h" #include "pm3_cmd.h"
#define BCD(c) (((c) >= '0' && (c) <= '9') ? ((c) - '0') : \ #define BCD(c) (((c) >= '0' && (c) <= '9') ? ((c) - '0') : -1)
-1)
#define HEX(c) (((c) >= '0' && (c) <= '9') ? ((c) - '0') : \ #define HEX(c) (((c) >= '0' && (c) <= '9') ? ((c) - '0') : \
((c) >= 'A' && (c) <= 'F') ? ((c) - 'A' + 10) : \ ((c) >= 'A' && (c) <= 'F') ? ((c) - 'A' + 10) : \
@ -93,7 +92,6 @@ static ssize_t emv_pk_read_ymv(char *buf, size_t buflen, unsigned *ymv) {
if (buf == NULL) if (buf == NULL)
return 0; return 0;
int i;
unsigned char temp[3]; unsigned char temp[3];
char *p = buf; char *p = buf;
@ -102,7 +100,7 @@ static ssize_t emv_pk_read_ymv(char *buf, size_t buflen, unsigned *ymv) {
while ((*p == ' ') && (p < (buf + buflen - 1))) while ((*p == ' ') && (p < (buf + buflen - 1)))
p++; p++;
for (i = 0; i < 3; i++) { for (int i = 0; i < 3; i++) {
int c1, c2; int c1, c2;
c1 = BCD(*p); c1 = BCD(*p);
if (c1 == -1) if (c1 == -1)
@ -164,7 +162,6 @@ static ssize_t emv_pk_read_string(char *buf, size_t buflen, char *str, size_t si
return (p - buf); return (p - buf);
} }
struct emv_pk *emv_pk_parse_pk(char *buf, size_t buflen) { struct emv_pk *emv_pk_parse_pk(char *buf, size_t buflen) {
struct emv_pk *r = calloc(1, sizeof(*r)); struct emv_pk *r = calloc(1, sizeof(*r));
ssize_t l; ssize_t l;
@ -264,22 +261,22 @@ static size_t emv_pk_write_str(char *out, size_t outlen, const char *str) {
} }
char *emv_pk_dump_pk(const struct emv_pk *pk) { char *emv_pk_dump_pk(const struct emv_pk *pk) {
size_t outpos = 0;
size_t outsize = 1024; /* should be enough */ size_t outsize = 1024; /* should be enough */
char *out = malloc(outsize); /* should be enough */ char *out = malloc(outsize); /* should be enough */
size_t outpos = 0;
size_t rc;
if (!out) if (!out)
return NULL; return NULL;
rc = emv_pk_write_bin(out + outpos, outsize - outpos, pk->rid, 5); size_t rc = emv_pk_write_bin(out + outpos, outsize - outpos, pk->rid, 5);
if (rc == 0) if (rc == 0)
goto err; goto err;
outpos += rc; outpos += rc;
rc = emv_pk_write_bin(out + outpos, outsize - outpos, &pk->index, 1); rc = emv_pk_write_bin(out + outpos, outsize - outpos, &pk->index, 1);
if (rc == 0) if (rc == 0)
goto err; goto err;
outpos += rc; outpos += rc;
if (outpos + 7 > outsize) if (outpos + 7 > outsize)
@ -504,21 +501,23 @@ struct emv_pk *emv_pk_get_ca_pk(const unsigned char *rid, unsigned char idx) {
if (!pk) if (!pk)
return NULL; return NULL;
printf("Verifying CA PK for %02hhx:%02hhx:%02hhx:%02hhx:%02hhx IDX %02hhx %zu bits...", bool isok = emv_pk_verify(pk);
PrintAndLogEx(INFO, "Verifying CA PK for %02hhx:%02hhx:%02hhx:%02hhx:%02hhx IDX %02hhx %zu bits. ( %s )",
pk->rid[0], pk->rid[0],
pk->rid[1], pk->rid[1],
pk->rid[2], pk->rid[2],
pk->rid[3], pk->rid[3],
pk->rid[4], pk->rid[4],
pk->index, pk->index,
pk->mlen * 8); pk->mlen * 8,
(isok) ? _GREEN_("ok") : _RED_("failed")
);
if (emv_pk_verify(pk)) { if (isok) {
printf("OK\n");
return pk; return pk;
} }
printf("Failed!\n");
emv_pk_free(pk); emv_pk_free(pk);
return NULL; return NULL;
} }