pvvx
Активный участник сообщества
Для сверх оптимизации можно выкинуть из ccm.c/ccm.h
Но термометрам всё равно желательно работать с mijia форматом, а там используется "add"...
C:
/*
* If there is additional data, update CBC-MAC with
* add_len, add, 0 (padding to a block boundary)
*/
if (add_len > 0) {
size_t use_len;
len_left = add_len;
src = add;
memset(b, 0, 16);
b[0] = (unsigned char) ((add_len >> 8) & 0xFF);
b[1] = (unsigned char) ((add_len) & 0xFF);
use_len = len_left < 16 - 2 ? len_left : 16 - 2;
memcpy(b + 2, src, use_len);
len_left -= use_len;
src += use_len;
UPDATE_CBC_MAC;
while (len_left > 0) {
use_len = len_left > 16 ? 16 : len_left;
memset(b, 0, 16);
memcpy(b, src, use_len);
UPDATE_CBC_MAC;
len_left -= use_len;
src += use_len;
}
}