#include #include #include #include "ae-common.h" #include "cipher.h" #include "lilliput-ae.h" static void _generate_tag( const uint8_t key[KEY_BYTES], size_t M_len, const uint8_t M[M_len], const uint8_t N[NONCE_BYTES], const uint8_t Auth[BLOCK_BYTES], uint8_t tag[TAG_BYTES] ) { } static void _encrypt_message( const uint8_t key[KEY_BYTES], size_t M_len, const uint8_t M[M_len], const uint8_t N[NONCE_BYTES], const uint8_t tag[TAG_BYTES], uint8_t C[M_len] ) { } static void _decrypt_message( const uint8_t key[KEY_BYTES], size_t C_len, const uint8_t C[C_len], const uint8_t N[NONCE_BYTES], const uint8_t tag[TAG_BYTES], uint8_t M[C_len] ) { } void lilliput_ae_encrypt( size_t message_len, const uint8_t message[message_len], size_t auth_data_len, const uint8_t auth_data[auth_data_len], const uint8_t key[KEY_BYTES], const uint8_t nonce[NONCE_BYTES], uint8_t ciphertext[message_len], uint8_t tag[TAG_BYTES] ) { uint8_t auth[BLOCK_BYTES]; process_associated_data(key, auth_data_len, auth_data, auth); _generate_tag(key, message_len, message, nonce, auth, tag); _encrypt_message(key, message_len, message, nonce, tag, ciphertext); } bool lilliput_ae_decrypt( size_t ciphertext_len, const uint8_t ciphertext[ciphertext_len], size_t auth_data_len, const uint8_t auth_data[auth_data_len], const uint8_t key[KEY_BYTES], const uint8_t nonce[NONCE_BYTES], const uint8_t tag[TAG_BYTES], uint8_t message[ciphertext_len] ) { _decrypt_message(key, ciphertext_len, ciphertext, nonce, tag, message); uint8_t auth[BLOCK_BYTES]; process_associated_data(key, auth_data_len, auth_data, auth); uint8_t effective_tag[TAG_BYTES]; _generate_tag(key, ciphertext_len, message, nonce, auth, effective_tag); return memcmp(tag, effective_tag, TAG_BYTES) == 0; }