/** * @file re_aes.h Interface to AES (Advanced Encryption Standard) * * Copyright (C) 2010 Creytiv.com */ #ifndef AES_BLOCK_SIZE #define AES_BLOCK_SIZE 16 #endif /** AES mode */ enum aes_mode { AES_MODE_CTR, /**< AES Counter mode (CTR) */ AES_MODE_GCM, /**< AES Galois Counter Mode (GCM) */ }; struct aes; int aes_alloc(struct aes **stp, enum aes_mode mode, const uint8_t *key, size_t key_bits, const uint8_t *iv); void aes_set_iv(struct aes *aes, const uint8_t *iv); int aes_encr(struct aes *aes, uint8_t *out, const uint8_t *in, size_t len); int aes_decr(struct aes *aes, uint8_t *out, const uint8_t *in, size_t len); int aes_get_authtag(struct aes *aes, uint8_t *tag, size_t taglen); int aes_authenticate(struct aes *aes, const uint8_t *tag, size_t taglen);