#include #include #include #include "ae-common.h" #include "cipher.h" #include "lilliput-ae.h" static const uint8_t _0n[BLOCK_BYTES] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; static void _fill_ad_tweak( uint8_t prefix, uint64_t block_nb, uint8_t tweak[TWEAK_BYTES] ) { /* The 192-bit tweak is filled as follows: * * - bits 1-188: block number * 1- 64: actual 64-bit block number * 65-188: 0-padding * - bits 189-192: constant 4-bit prefix */ for (size_t i=0; i> 8*i; tweak[i] = b; } /* Assume padding bytes have already been memset to 0. */ tweak[TWEAK_BYTES-1] |= prefix << 4; } static void _fill_msg_tweak( uint8_t prefix, const uint8_t N[NONCE_BYTES], uint64_t block_nb, uint8_t tweak[TWEAK_BYTES] ) { /* The 192-bit tweak is filled as follows: * * - bits 1- 68: block number * 1- 64: actual 64-bit block number * 64- 68: 0-padding * - bits 67-188: nonce * - bits 189-192: constant 4-bit prefix */ for (size_t i=0; i> 8*i; tweak[i] = b; } tweak[sizeof(block_nb)] = lower_nibble(N[0]) << 4; for (size_t i=1; i