1
0
Fork 0

Adds cached associated data version of eax for when AD doesn't change

This commit is contained in:
Shawn Nock 2017-08-03 15:54:07 -04:00
parent ce318382ee
commit f3e0affe8f
2 changed files with 25 additions and 0 deletions

23
eax.c
View File

@ -31,6 +31,29 @@ static void eax_omac(uint8_t *dest, uint8_t *msg, uint32_t msg_len,
return;
}
void aes128_eax_cache_ad(uint8_t *dest, uint8_t *header, uint32_t header_len,
uint8_t *msg, uint32_t msg_len, uint_fast8_t tag_len) {
uint8_t nonce_cmac[16], ciphertext_cmac[16],
ciphertext[msg_len];
static uint8_t header_cmac[16];
static bool header_cached = false;
if (!header_cached) {
eax_omac(header_cmac, header, header_len, 1);
header_cached = true;
}
eax_omac(nonce_cmac, g_nonce, 16, 0);
aes128_ctr_init(NULL, nonce_cmac);
aes128_ctr(ciphertext, msg, msg_len);
eax_omac(ciphertext_cmac, ciphertext, msg_len, 2);
block_xor(nonce_cmac, nonce_cmac, header_cmac);
block_xor(nonce_cmac, nonce_cmac, ciphertext_cmac);
memcpy(dest, ciphertext, msg_len);
memcpy(dest + msg_len, nonce_cmac, tag_len);
return;
}
void aes128_eax(uint8_t *dest, uint8_t *header, uint32_t header_len,
uint8_t *msg, uint32_t msg_len, uint_fast8_t tag_len) {
uint8_t nonce_cmac[16], header_cmac[16], ciphertext_cmac[16],

2
eax.h
View File

@ -2,5 +2,7 @@
void aes128_eax(uint8_t *, uint8_t *, uint32_t, uint8_t *, uint32_t,
uint_fast8_t);
void aes128_eax_cache_ad(uint8_t *dest, uint8_t *header, uint32_t header_len,
uint8_t *msg, uint32_t msg_len, uint_fast8_t tag_len);
void aes128_eax_init(const uint8_t *, uint8_t *);
void eax_dump_state(void);