Lightweight Cryptography Primitives
 All Data Structures Files Functions Variables Typedefs Macros Pages
Data Structures | Macros | Functions
internal-aes.h File Reference

AES block cipher. More...

#include "internal-util.h"

Go to the source code of this file.

Data Structures

struct  aes_key_schedule_t
 Structure of the key schedule for AES. More...
 

Macros

#define AES_BLOCK_SIZE   16
 Size of the AES block in bytes.
 
#define AES128_KEY_SIZE   16
 Size of the AES-128 key in bytes.
 
#define AES192_KEY_SIZE   24
 Size of the AES-192 key in bytes.
 
#define AES256_KEY_SIZE   32
 Size of the AES-256 key in bytes.
 
#define AES_ROUND_KEYS   60
 Number of round keys for the AES key schedule. More...
 

Functions

void aes_128_init (aes_key_schedule_t *ks, const unsigned char *key)
 Initializes the key schedule for AES-128. More...
 
void aes_192_init (aes_key_schedule_t *ks, const unsigned char *key)
 Initializes the key schedule for AES-192. More...
 
void aes_256_init (aes_key_schedule_t *ks, const unsigned char *key)
 Initializes the key schedule for AES-256. More...
 
void aes_ecb_encrypt (const aes_key_schedule_t *ks, unsigned char *output, const unsigned char *input)
 Encrypts a 128-bit block with AES in ECB mode. More...
 

Detailed Description

AES block cipher.

This version of AES is intended for performing comparisons with the other candidates in the Lightweight Cryptography Competition.

Note: This implementation is not constant cache. Internally it uses lookup tables for the AES S-box and MixColumns operation. This means that it has similar behaviour to other "fast" 32-bit software implementations of AES but is not suitable for use where memory cache attacks are a concern.

Macro Definition Documentation

#define AES_ROUND_KEYS   60

Number of round keys for the AES key schedule.

This is sized for AES-256. There will be some wasted space for AES-128 and AES-192.

Function Documentation

void aes_128_init ( aes_key_schedule_t ks,
const unsigned char *  key 
)

Initializes the key schedule for AES-128.

Parameters
ksPoints to the key schedule to initialize.
keyPoints to the key data.
void aes_192_init ( aes_key_schedule_t ks,
const unsigned char *  key 
)

Initializes the key schedule for AES-192.

Parameters
ksPoints to the key schedule to initialize.
keyPoints to the key data.
void aes_256_init ( aes_key_schedule_t ks,
const unsigned char *  key 
)

Initializes the key schedule for AES-256.

Parameters
ksPoints to the key schedule to initialize.
keyPoints to the key data.
void aes_ecb_encrypt ( const aes_key_schedule_t ks,
unsigned char *  output,
const unsigned char *  input 
)

Encrypts a 128-bit block with AES in ECB mode.

Parameters
ksPoints to the AES key schedule.
outputOutput buffer which must be at least 16 bytes in length.
inputInput buffer which must be at least 16 bytes in length.

The input and output buffers can be the same buffer for in-place encryption.