From 49d25920c1a85b20b5ae081bd7b03897bc107ce7 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Wed, 19 Mar 2025 08:57:20 +0100 Subject: [PATCH] added support function for left shifting arrays --- common/commonutil.c | 19 +++++++++++++++---- common/commonutil.h | 4 +++- 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/common/commonutil.c b/common/commonutil.c index 35a583988..a5b545f33 100644 --- a/common/commonutil.c +++ b/common/commonutil.c @@ -433,11 +433,21 @@ void xor(uint8_t *dest, const uint8_t *src, size_t n) { } } -void lsl(uint8_t *data, size_t len) { - for (size_t n = 0; n < len - 1; n++) { - data[n] = (data[n] << 1) | (data[n + 1] >> 7); +// left shift an array of length one bit +void lsl(uint8_t *d, size_t n) { + for (size_t i = 0; i < n - 1; i++) { + d[i] = (d[i] << 1) | (d[i + 1] >> 7); + } + d[n - 1] <<= 1; +} + +void lslx(uint8_t *d, size_t n, uint8_t shifts) { + for (uint8_t i = 0; i < shifts; i++) { + for (size_t j = 0; j < n - 1; j++) { + d[j] = (d[j] << 1) | (d[j + 1] >> 7); + } + d[n - 1] <<= 1; } - data[len - 1] <<= 1; } @@ -562,6 +572,7 @@ void reverse_arraybytes_copy(uint8_t *arr, uint8_t *dest, size_t len) { */ size_t concatbits(uint8_t *dest, int dest_offset, const uint8_t *src, int src_offset, size_t nbits, bool src_lsb) { int i, end, step; + // overlap if ((src - dest) * 8 + src_offset - dest_offset > 0) { i = 0; diff --git a/common/commonutil.h b/common/commonutil.h index 2360f2a57..499674d24 100644 --- a/common/commonutil.h +++ b/common/commonutil.h @@ -132,7 +132,9 @@ void rol(uint8_t *data, const size_t n); void ror(uint8_t *data, const size_t n); void xor(uint8_t *dest, const uint8_t *src, size_t n); -void lsl(uint8_t *data, size_t len); +void lsl(uint8_t *d, size_t n); +void lslx(uint8_t *d, size_t n, uint8_t shifts); + uint32_t le24toh(const uint8_t data[3]); void htole24(uint32_t val, uint8_t data[3]);