RadioShuttle Lib for the STM32 L4 Heltec Board

Dependents:   Turtle_RadioShuttle

util/aes.h

Committer:
Helmut Tschemernjak
Date:
2019-03-04
Revision:
11:91bc7ef20f21
Parent:
0:0c31756924a2

File content as of revision 11:91bc7ef20f21:

#ifndef _AES128_H_
#define _AES128_H_

#include <stdint.h>

#ifdef __cplusplus
extern "C" {
#endif

// #define the macros below to 1/0 to enable/disable the mode of operation.
//
// CBC enables AES128 encryption in CBC-mode of operation and handles 0-padding.
// ECB enables the basic ECB 16-byte block algorithm. Both can be enabled simultaneously.

// The #ifndef-guard allows it to be configured before #include'ing or at compile time.
#ifndef DISABLE_CBC_MODE
 #define CBC_MODE
#endif

#ifndef DISABLE_ECB_MODE
 #define ECB_MODE
#endif

/*****************************************************************************/
/* Private variables:                                                        */
/*****************************************************************************/
// state - array holding the intermediate results during decryption.
typedef uint8_t state_t[4][4];

// Key length in bytes [128 bit]
#define AES128_KEYLEN 16
// The number of rounds in AES Cipher.
#define Nr 10


typedef struct {
    state_t* state;
	uint8_t RoundKey[176];	// The array that stores the round keys
#ifdef CBC_MODE
    // uint8_t* Iv;
    uint8_t InitialVector[AES128_KEYLEN]; // Initial Vector used only for CBC mode
#endif
} AES_CTX;

void AES128_InitContext(AES_CTX *ctx, const uint8_t* key, const uint8_t* initialVector);

#ifdef ECB_MODE

void AES128_ECB_encrypt(AES_CTX *ctx, const uint8_t* input, uint8_t *output);
void AES128_ECB_decrypt(AES_CTX *ctx, const uint8_t* input, uint8_t *output);

#endif // ECB_MODE


#ifdef CBC_MODE

void AES128_CBC_encrypt_buffer(AES_CTX *ctx, uint8_t* output, const uint8_t* input, uint32_t length);
void AES128_CBC_decrypt_buffer(AES_CTX *ctx, uint8_t* output, const uint8_t* input, uint32_t length);

#endif // CBC_MODE

#ifdef __cplusplus
}
#endif

#endif //_AES128_H_