mirror of
https://github.com/RfidResearchGroup/proxmark3.git
synced 2025-02-26 00:55:19 +08:00
moved and unified some reverse array fct
This commit is contained in:
parent
32a06758bb
commit
7abfff4095
5 changed files with 51 additions and 38 deletions
|
@ -223,16 +223,6 @@ static const productName_t uidmapping[] = {
|
|||
{ 0, 0, "no tag-info available" } // must be the last entry
|
||||
};
|
||||
|
||||
static inline void reverse(uint8_t *buff, uint8_t length) {
|
||||
uint8_t upper_bound = (length % 2 == 0) ? length / 2 : (length / 2) + 1;
|
||||
uint8_t tmp = 0;
|
||||
for (int start = 0, end = length - 1; end >= upper_bound; ++start, --end) {
|
||||
tmp = buff[end];
|
||||
buff[end] = buff[start];
|
||||
buff[start] = tmp;
|
||||
}
|
||||
}
|
||||
|
||||
static int CmdHF15Help(const char *Cmd);
|
||||
|
||||
static int nxp_15693_print_signature(uint8_t *uid, uint8_t *signature) {
|
||||
|
@ -287,16 +277,14 @@ static int nxp_15693_print_signature(uint8_t *uid, uint8_t *signature) {
|
|||
}
|
||||
};
|
||||
*/
|
||||
uint8_t i;
|
||||
uint8_t revuid[8];
|
||||
for (i = 0; i < sizeof(revuid); i++) {
|
||||
revuid[i] = uid[7 - i];
|
||||
}
|
||||
uint8_t revsign[32];
|
||||
for (i = 0; i < sizeof(revsign); i++) {
|
||||
revsign[i] = signature[31 - i];
|
||||
}
|
||||
|
||||
uint8_t revuid[8] = {0};
|
||||
reverse_array_copy(uid, sizeof(revuid), revuid);
|
||||
|
||||
uint8_t revsign[32] = {0};
|
||||
reverse_array_copy(signature, sizeof(revsign), revsign);
|
||||
|
||||
uint8_t i;
|
||||
int reason = 0;
|
||||
bool is_valid = false;
|
||||
for (i = 0; i < ARRAYLEN(nxp_15693_public_keys); i++) {
|
||||
|
@ -1823,7 +1811,7 @@ static int CmdHF15Readmulti(const char *Cmd) {
|
|||
return PM3_EINVARG;
|
||||
}
|
||||
} else {
|
||||
reverse(uid, HF15_UID_LENGTH);
|
||||
reverse_array(uid, HF15_UID_LENGTH);
|
||||
}
|
||||
// add UID (scan, uid)
|
||||
memcpy(req + reqlen, uid, HF15_UID_LENGTH);
|
||||
|
@ -1953,7 +1941,7 @@ static int CmdHF15Readblock(const char *Cmd) {
|
|||
return PM3_EINVARG;
|
||||
}
|
||||
} else {
|
||||
reverse(uid, HF15_UID_LENGTH);
|
||||
reverse_array(uid, HF15_UID_LENGTH);
|
||||
}
|
||||
// add UID (scan, uid)
|
||||
memcpy(req + reqlen, uid, HF15_UID_LENGTH);
|
||||
|
@ -2129,7 +2117,7 @@ static int CmdHF15Write(const char *Cmd) {
|
|||
return PM3_EINVARG;
|
||||
}
|
||||
} else {
|
||||
reverse(uid, HF15_UID_LENGTH);
|
||||
reverse_array(uid, HF15_UID_LENGTH);
|
||||
}
|
||||
// add UID (scan, uid)
|
||||
memcpy(req + reqlen, uid, HF15_UID_LENGTH);
|
||||
|
@ -2356,11 +2344,7 @@ static int CmdHF15CSetUID(const char *Cmd) {
|
|||
|
||||
// reverse cardUID to compare
|
||||
uint8_t revuid[8] = {0};
|
||||
uint8_t i = 0;
|
||||
while (i < sizeof(revuid)) {
|
||||
revuid[i] = carduid[7 - i];
|
||||
i++;
|
||||
}
|
||||
reverse_array_copy(carduid, sizeof(carduid), revuid);
|
||||
|
||||
if (memcmp(revuid, payload.uid, 8) != 0) {
|
||||
PrintAndLogEx(FAILED, "setting new UID ( " _RED_("fail") " )");
|
||||
|
|
|
@ -1493,13 +1493,9 @@ const char *vigik_get_service(uint16_t service_code) {
|
|||
return vigik_rsa_pk[ARRAYLEN(vigik_rsa_pk) - 1].desc;
|
||||
}
|
||||
|
||||
static void reverse_array(const uint8_t *src, int src_len, uint8_t *dest) {
|
||||
for (int i = 0; i < src_len; i++) {
|
||||
dest[i] = src[(src_len - 1) - i];
|
||||
}
|
||||
};
|
||||
|
||||
int vigik_verify(mfc_vigik_t *d) {
|
||||
#define PUBLIC_VIGIK_KEYLEN 128
|
||||
|
||||
// iso9796
|
||||
// Exponent V = 2
|
||||
|
@ -1512,8 +1508,18 @@ int vigik_verify(mfc_vigik_t *d) {
|
|||
PrintAndLogEx(INFO, "Raw signature");
|
||||
print_hex_noascii_break(d->rsa_signature, sizeof(d->rsa_signature), MFBLOCK_SIZE * 2);
|
||||
}
|
||||
|
||||
/*
|
||||
int dl = 0;
|
||||
|
||||
param_gethex_to_eol("1C07D46DA3849326D24B3468BD76673F4F3C41827DC413E81E4F3C7804FAC727213059B21D047510D6432448643A92EBFC67FBEDDAB468D13D948B172F5EBC79A0E3FEFDFAF4E81FC7108E070F1E3CD0", 0, signature, PUBLIC_VIGIK_KEYLEN, &dl);
|
||||
|
||||
param_gethex_to_eol("1AB86FE0C17FFFFE4379D5E15A4B2FAFFEFCFA0F1F3F7FA03E7DDDF1E3C78FFFB1F0E23F7FFF51584771C5C18307FEA36CA74E60AA6B0409ACA66A9EC155F4E9112345708A2B8457E722608EE1157408", 0, signature, PUBLIC_VIGIK_KEYLEN, &dl);
|
||||
signature_len = dl;
|
||||
*/
|
||||
|
||||
uint8_t rev_sig[128];
|
||||
reverse_array(d->rsa_signature, sizeof(d->rsa_signature), rev_sig);
|
||||
reverse_array_copy(d->rsa_signature, sizeof(d->rsa_signature), rev_sig);
|
||||
|
||||
PrintAndLogEx(INFO, "Raw signature reverse");
|
||||
print_hex_noascii_break(rev_sig, sizeof(d->rsa_signature), MFBLOCK_SIZE * 2);
|
||||
|
@ -1532,10 +1538,6 @@ int vigik_verify(mfc_vigik_t *d) {
|
|||
// sha1 hash H = 20 bytes, 160 bits
|
||||
// padding = 20 bytes, 96 bits
|
||||
|
||||
|
||||
// ref: MIFARE Classic EV1 Originality Signature Validation
|
||||
#define PUBLIC_VIGIK_KEYLEN 128
|
||||
|
||||
uint8_t i;
|
||||
bool is_valid = false;
|
||||
|
||||
|
|
|
@ -300,7 +300,6 @@ void print_hex_noascii_break(const uint8_t *data, const size_t len, uint8_t brea
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
static void print_buffer_ex(const uint8_t *data, const size_t len, int level, uint8_t breaks) {
|
||||
|
||||
// sanity checks
|
||||
|
|
|
@ -269,3 +269,27 @@ uint16_t get_sw(const uint8_t *d, uint16_t n) {
|
|||
n -= 2;
|
||||
return (d[n] << 8 | d[n + 1]);
|
||||
}
|
||||
|
||||
// reverse same array
|
||||
void reverse_array(uint8_t *d, size_t n) {
|
||||
if (d == NULL || n < 2) {
|
||||
return;
|
||||
}
|
||||
|
||||
for (int i = 0, j = n - 1; i < j; ++i, --j) {
|
||||
d[i] ^= d[j];
|
||||
d[j] ^= d[i];
|
||||
d[i] ^= d[j];
|
||||
}
|
||||
}
|
||||
|
||||
// reverse src array into dest array
|
||||
void reverse_array_copy(const uint8_t *src, int src_len, uint8_t *dest) {
|
||||
if (src == NULL || src_len == 0 || dest == NULL) {
|
||||
return;
|
||||
}
|
||||
|
||||
for (int i = 0; i < src_len; i++) {
|
||||
dest[i] = src[(src_len - 1) - i];
|
||||
}
|
||||
}
|
|
@ -86,4 +86,8 @@ uint32_t rotl(uint32_t a, uint8_t n);
|
|||
uint32_t rotr(uint32_t a, uint8_t n);
|
||||
|
||||
uint16_t get_sw(const uint8_t *d, uint16_t n);
|
||||
|
||||
void reverse_array(uint8_t *d, size_t n);
|
||||
void reverse_array_copy(const uint8_t *src, int src_len, uint8_t *dest);
|
||||
|
||||
#endif
|
||||
|
|
Loading…
Reference in a new issue