| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 | To realize the AES-CCM functionality using the aes.c interface herewith, pull the files aes-ccm.c and aes.h from the repo: https://github.com/wi-fi-analyzer/crackle, and make the following updates -** Update the 'xor_aes_block()' function implementation as below and use.static void xor_aes_block(u8 *dst, const u8 *src){#ifdef HAVE_ALIGNED_MEM_OPERATION    u32 *d = (u32 *) dst;    u32 *s = (u32 *) src;    *d++ ^= *s++;    *d++ ^= *s++;    *d++ ^= *s++;    *d++ ^= *s++;#else /* HAVE_ALIGNED_MEM_OPERATION */    u32 i;    for (i = 0; i < 16; i++)    {        *dst++ ^= *src++;    }#endif /* HAVE_ALIGNED_MEM_OPERATION */}** Update the 'aes_ccm_encr()' function implementation as below and use.static void aes_ccm_encr(void *aes, size_t L, const u8 *in, size_t len, u8 *out,                         u8 *a){    size_t last = len % AES_BLOCK_SIZE;    size_t i;    /* crypt = msg XOR (S_1 | S_2 | ... | S_n) */    for (i = 1; i <= len / AES_BLOCK_SIZE; i++) {        PUT_BE16(&a[AES_BLOCK_SIZE - 2], i);        /* S_i = E(K, A_i) */        aes_encrypt(aes, a, out);        xor_aes_block(out, in);        out += AES_BLOCK_SIZE;        in += AES_BLOCK_SIZE;    }#if 0    if (last) {        PUT_BE16(&a[AES_BLOCK_SIZE - 2], i);        aes_encrypt(aes, a, out);        /* XOR zero-padded last block */        for (i = 0; i < last; i++)            *out++ ^= *in++;    }#else /* 0 */    if (last) {        u8 tout[AES_BLOCK_SIZE];        PUT_BE16(&a[AES_BLOCK_SIZE - 2], i);        aes_encrypt(aes, a, tout);        /* XOR zero-padded last block */        for (i = 0; i < last; i++)            *out++ = tout[i] ^ *in++;    }#endif /* 0 */}
 |