From 8db2325b137b8aaa8063a793ebb593aaba977508 Mon Sep 17 00:00:00 2001 From: merlokk <807634+merlokk@users.noreply.github.com> Date: Sun, 25 Jul 2021 20:03:15 +0300 Subject: [PATCH] move byte operations to commonutils --- client/src/mifare/desfirecore.c | 2 +- client/src/util.c | 30 ----------------- client/src/util.h | 8 ----- common/commonutil.c | 60 +++++++++++++++++++++++++++++++++ common/commonutil.h | 14 ++++++++ 5 files changed, 75 insertions(+), 39 deletions(-) diff --git a/client/src/mifare/desfirecore.c b/client/src/mifare/desfirecore.c index a9630ce17..f59f7c7b2 100644 --- a/client/src/mifare/desfirecore.c +++ b/client/src/mifare/desfirecore.c @@ -19,13 +19,13 @@ #include #include #include +#include "commonutil.h" #include "aes.h" #include "ui.h" #include "crc.h" #include "crc16.h" // crc16 ccitt #include "crc32.h" #include "protocols.h" -#include "commonutil.h" #include "cmdhf14a.h" #include "iso7816/apduinfo.h" // APDU manipulation / errorcodes #include "iso7816/iso7816core.h" // APDU logging diff --git a/client/src/util.c b/client/src/util.c index e8d4da4da..ed6ca6e7c 100644 --- a/client/src/util.c +++ b/client/src/util.c @@ -503,36 +503,6 @@ void SwapEndian64ex(const uint8_t *src, const size_t len, const uint8_t blockSiz } } -uint16_t MemLeToUint2byte(uint8_t *data) { - return (data[1] << 8) + data[0]; -} - -uint32_t MemLeToUint3byte(uint8_t *data) { - return (data[2] << 16) + (data[1] << 8) + data[0]; -} - -uint32_t MemLeToUint4byte(uint8_t *data) { - return (data[3] << 24) + (data[2] << 16) + (data[1] << 8) + data[0]; -} - -void Uint2byteToMemLe(uint8_t *data, uint16_t value) { - data[0] = (value >> 8) & 0xff; - data[1] = value & 0xff; -} - -void Uint3byteToMemLe(uint8_t *data, uint32_t value) { - data[0] = (value >> 16) & 0xff; - data[1] = (value >> 8) & 0xff; - data[2] = value & 0xff; -} - -void Uint4byteToMemLe(uint8_t *data, uint32_t value) { - data[0] = (value >> 24) & 0xff; - data[1] = (value >> 16) & 0xff; - data[2] = (value >> 8) & 0xff; - data[3] = value & 0xff; -} - // ------------------------------------------------------------------------- // string parameters lib // ------------------------------------------------------------------------- diff --git a/client/src/util.h b/client/src/util.h index d2d8d0fa5..9357eb1d0 100644 --- a/client/src/util.h +++ b/client/src/util.h @@ -64,14 +64,6 @@ void bytes_to_bytebits(void *src, size_t srclen, void *dest); uint8_t *SwapEndian64(const uint8_t *src, const size_t len, const uint8_t blockSize); void SwapEndian64ex(const uint8_t *src, const size_t len, const uint8_t blockSize, uint8_t *dest); -// LE to/from memory -uint16_t MemLeToUint2byte(uint8_t *data); -uint32_t MemLeToUint3byte(uint8_t *data); -uint32_t MemLeToUint4byte(uint8_t *data); -void Uint2byteToMemLe(uint8_t *data, uint16_t value); -void Uint3byteToMemLe(uint8_t *data, uint32_t value); -void Uint4byteToMemLe(uint8_t *data, uint32_t value); - // parameter helper functions int param_getlength(const char *line, int paramnum); char param_getchar(const char *line, int paramnum); diff --git a/common/commonutil.c b/common/commonutil.c index 802f362d8..cbc2afb99 100644 --- a/common/commonutil.c +++ b/common/commonutil.c @@ -129,6 +129,66 @@ uint64_t bytes_to_num(uint8_t *src, size_t len) { return num; } +uint16_t MemLeToUint2byte(uint8_t *data) { + return (data[1] << 8) + data[0]; +} + +uint32_t MemLeToUint3byte(uint8_t *data) { + return (data[2] << 16) + (data[1] << 8) + data[0]; +} + +uint32_t MemLeToUint4byte(uint8_t *data) { + return (data[3] << 24) + (data[2] << 16) + (data[1] << 8) + data[0]; +} + +uint16_t MemBeToUint2byte(uint8_t *data) { + return (data[0] << 8) + data[1]; +} + +uint32_t MemBeToUint3byte(uint8_t *data) { + return (data[0] << 16) + (data[1] << 8) + data[2]; +} + +uint32_t MemBeToUint4byte(uint8_t *data) { + return (data[0] << 24) + (data[1] << 16) + (data[2] << 8) + data[3]; +} + +void Uint2byteToMemLe(uint8_t *data, uint16_t value) { + data[1] = (value >> 8) & 0xff; + data[0] = value & 0xff; +} + +void Uint3byteToMemLe(uint8_t *data, uint32_t value) { + data[2] = (value >> 16) & 0xff; + data[1] = (value >> 8) & 0xff; + data[0] = value & 0xff; +} + +void Uint4byteToMemLe(uint8_t *data, uint32_t value) { + data[3] = (value >> 24) & 0xff; + data[2] = (value >> 16) & 0xff; + data[1] = (value >> 8) & 0xff; + data[0] = value & 0xff; +} + +void Uint2byteToMemBe(uint8_t *data, uint16_t value) { + data[0] = (value >> 8) & 0xff; + data[1] = value & 0xff; +} + +void Uint3byteToMemBe(uint8_t *data, uint32_t value) { + data[0] = (value >> 16) & 0xff; + data[1] = (value >> 8) & 0xff; + data[2] = value & 0xff; +} + +void Uint4byteToMemBe(uint8_t *data, uint32_t value) { + data[0] = (value >> 24) & 0xff; + data[1] = (value >> 16) & 0xff; + data[2] = (value >> 8) & 0xff; + data[3] = value & 0xff; +} + // RotateLeft - Ultralight, Desfire void rol(uint8_t *data, const size_t len) { uint8_t first = data[0]; diff --git a/common/commonutil.h b/common/commonutil.h index 4ba65d171..d751f4d6b 100644 --- a/common/commonutil.h +++ b/common/commonutil.h @@ -52,6 +52,20 @@ uint32_t reflect32(uint32_t b); // dedicated 32bit reversal void num_to_bytes(uint64_t n, size_t len, uint8_t *dest); uint64_t bytes_to_num(uint8_t *src, size_t len); +// LE and BE to/from memory +uint16_t MemLeToUint2byte(uint8_t *data); +uint32_t MemLeToUint3byte(uint8_t *data); +uint32_t MemLeToUint4byte(uint8_t *data); +uint16_t MemBeToUint2byte(uint8_t *data); +uint32_t MemBeToUint3byte(uint8_t *data); +uint32_t MemBeToUint4byte(uint8_t *data); +void Uint2byteToMemLe(uint8_t *data, uint16_t value); +void Uint3byteToMemLe(uint8_t *data, uint32_t value); +void Uint4byteToMemLe(uint8_t *data, uint32_t value); +void Uint2byteToMemBe(uint8_t *data, uint16_t value); +void Uint3byteToMemBe(uint8_t *data, uint32_t value); +void Uint4byteToMemBe(uint8_t *data, uint32_t value); + // rotate left byte array void rol(uint8_t *data, const size_t len); void lsl(uint8_t *data, size_t len);