1 /** 2 * @file re_aes.h Interface to AES (Advanced Encryption Standard) 3 * 4 * Copyright (C) 2010 Creytiv.com 5 */ 6 7 8 #ifndef AES_BLOCK_SIZE 9 #define AES_BLOCK_SIZE 16 10 #endif 11 12 /** AES mode */ 13 enum aes_mode { 14 AES_MODE_CTR, /**< AES Counter mode (CTR) */ 15 AES_MODE_GCM, /**< AES Galois Counter Mode (GCM) */ 16 }; 17 18 struct aes; 19 20 int aes_alloc(struct aes **stp, enum aes_mode mode, 21 const uint8_t *key, size_t key_bits, 22 const uint8_t *iv); 23 void aes_set_iv(struct aes *aes, const uint8_t *iv); 24 int aes_encr(struct aes *aes, uint8_t *out, const uint8_t *in, size_t len); 25 int aes_decr(struct aes *aes, uint8_t *out, const uint8_t *in, size_t len); 26 int aes_get_authtag(struct aes *aes, uint8_t *tag, size_t taglen); 27 int aes_authenticate(struct aes *aes, const uint8_t *tag, size_t taglen); 28