#include #include #include #include "lilliput-ae.h" static void _process_associated_data( const uint8_t key[KEY_BYTES], size_t auth_data_len, const uint8_t auth_data[auth_data_len], uint8_t auth[BLOCK_BYTES] ) { } static void _encrypt_message( const uint8_t key[KEY_BYTES], size_t message_len, const uint8_t message[message_len], const uint8_t nonce[NONCE_BYTES], size_t *ciphertext_len, uint8_t ciphertext[message_len+BLOCK_BYTES], uint8_t final[BLOCK_BYTES] ) { } static void _decrypt_message( const uint8_t key[KEY_BYTES], size_t ciphertext_len, const uint8_t ciphertext[ciphertext_len], const uint8_t nonce[NONCE_BYTES], size_t *message_len, uint8_t message[ciphertext_len], uint8_t final[BLOCK_BYTES] ) { } static void _generate_tag( const uint8_t final[BLOCK_BYTES], const uint8_t auth[BLOCK_BYTES], uint8_t tag[TAG_BYTES] ) { } 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], size_t *ciphertext_len, uint8_t ciphertext[message_len+BLOCK_BYTES], uint8_t tag[TAG_BYTES] ) { uint8_t auth[BLOCK_BYTES]; _process_associated_data(key, auth_data_len, auth_data, auth); uint8_t final[BLOCK_BYTES]; _encrypt_message(key, message_len, message, nonce, ciphertext_len, ciphertext, final); _generate_tag(final, auth, tag); } 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], size_t *message_len, uint8_t message[ciphertext_len] ) { uint8_t auth[BLOCK_BYTES]; _process_associated_data(key, auth_data_len, auth_data, auth); uint8_t final[BLOCK_BYTES]; _decrypt_message(key, ciphertext_len, ciphertext, nonce, message_len, message, final); uint8_t effective_tag[TAG_BYTES]; _generate_tag(final, auth, effective_tag); return memcmp(tag, effective_tag, TAG_BYTES) == 0; }