Interface of the at86rf2xx security module (AES)
More...
Interface of the at86rf2xx security module (AES)
The extended feature set of at86rf2xx transceivers comprises a hardware implementation of AES. There are two supported block cipher modes, ECB and CBC.
- Author
- Fabian Hüßler fabia.nosp@m.n.hu.nosp@m.essle.nosp@m.r@ov.nosp@m.gu.de
Definition in file at86rf2xx_aes.h.
Go to the source code of this file.
|
void | at86rf2xx_aes_key_read_encrypt (at86rf2xx_t *dev, uint8_t key[AT86RF2XX_AES_KEY_LENGTH]) |
| Read the AES key used for encryption. More...
|
|
void | at86rf2xx_aes_key_write_encrypt (at86rf2xx_t *dev, const uint8_t key[AT86RF2XX_AES_KEY_LENGTH]) |
| Write the AES key used for encryption. More...
|
|
void | at86rf2xx_aes_key_read_decrypt (at86rf2xx_t *dev, uint8_t key[AT86RF2XX_AES_KEY_LENGTH]) |
| Read the AES key used for decryption. More...
|
|
void | at86rf2xx_aes_key_write_decrypt (at86rf2xx_t *dev, const uint8_t key[AT86RF2XX_AES_KEY_LENGTH]) |
| Write the AES key used for decryption. More...
|
|
void | at86rf2xx_aes_ecb_encrypt (at86rf2xx_t *dev, aes_block_t *cipher, uint8_t key[AT86RF2XX_AES_BLOCK_SIZE], const aes_block_t *plain, uint8_t nblocks) |
| Perform AES algorithm and encrypt data blocks in plain to cipher data blocks, using ECB mode. More...
|
|
void | at86rf2xx_aes_ecb_decrypt (at86rf2xx_t *dev, aes_block_t *plain, uint8_t key[AT86RF2XX_AES_BLOCK_SIZE], const aes_block_t *cipher, uint8_t nblocks) |
| Perform AES algorithm and decrypt data blocks in cipher to plain data blocks, using ECB mode. More...
|
|
void | at86rf2xx_aes_cbc_encrypt (at86rf2xx_t *dev, aes_block_t *cipher, uint8_t key[AT86RF2XX_AES_BLOCK_SIZE], uint8_t iv[AT86RF2XX_AES_BLOCK_SIZE], const aes_block_t *plain, uint8_t nblocks) |
| Perform AES algorithm and encrypt data blocks in plain to cipher data blocks, using CBC mode. More...
|
|
void | at86rf2xx_aes_cbc_decrypt (at86rf2xx_t *dev, aes_block_t *plain, uint8_t key[AT86RF2XX_AES_BLOCK_SIZE], uint8_t iv[AT86RF2XX_AES_BLOCK_SIZE], const aes_block_t *cipher, uint8_t nblocks) |
| Perform AES algorithm and decrypt data blocks in cipher to plain data blocks, using CBC mode. More...
|
|
#define | AT86RF2XX_AES_KEY_BITS (128U) |
| AES key length in bits.
|
|
#define | AT86RF2XX_AES_KEY_LENGTH ((AT86RF2XX_AES_KEY_BITS) / 8) |
| AES key length in bytes.
|
|
#define | AT86RF2XX_AES_BLOCK_SIZE ((AT86RF2XX_AES_KEY_BITS) / 8) |
| AES block size in bytes.
|
|
#define | AT86RF2XX_AES_DELAY_US (24) |
| Time to complete the AES algorithm in us.
|
|
|
#define | AT86RF2XX_REG__AES_STATUS (0x82) |
|
#define | AT86RF2XX_REG__AES_CTRL (0x83) |
|
#define | AT86RF2XX_REG__AES_KEY_START (0x84) |
|
#define | AT86RF2XX_REG__AES_KEY_END (0x93) |
|
#define | AT86RF2XX_REG__AES_DATA_START (0x84) |
|
#define | AT86RF2XX_REG__AES_DATA_END (0x93) |
|
#define | AT86RF2XX_REG__AES_CTRL_MIRROR (0x94) |
|
|
#define | AT86RF2XX_AES_STATUS_MASK__AES_ER (0x80) |
|
#define | AT86RF2XX_AES_STATUS_MASK__AES_DONE (0x01) |
|
#define | AT86RF2XX_AES_STATUS_AES_ER__NO_ERROR (0x00) |
|
#define | AT86RF2XX_AES_STATUS_AES_ER__ERROR (0x80) |
|
#define | AT86RF2XX_AES_STATUS_AES_DONE__NOT_DONE (0x00) |
|
#define | AT86RF2XX_AES_STATUS_AES_DONE__DONE (0x01) |
|
|
#define | AT86RF2XX_AES_CTRL_MASK__AES_REQUEST (0x80) |
|
#define | AT86RF2XX_AES_CTRL_MASK__AES_MODE (0x70) |
|
#define | AT86RF2XX_AES_CTRL_MASK__AES_DIR (0x08) |
|
#define | AT86RF2XX_AES_CTRL_AES_REQUEST__IDLE (0x00) |
|
#define | AT86RF2XX_AES_CTRL_AES_REQUEST__START (0x80) |
|
#define | AT86RF2XX_AES_CTRL_AES_MODE__ECB (0x00) |
|
#define | AT86RF2XX_AES_CTRL_AES_MODE__KEY (0x10) |
|
#define | AT86RF2XX_AES_CTRL_AES_MODE__CBC (0x20) |
|
#define | AT86RF2XX_AES_CTRL_AES_DIR__ENC (0x00) |
|
#define | AT86RF2XX_AES_CTRL_AES_DIR__DEC (0x08) |
|
|
#define | AT86RF2XX_AES_CTRL_MIRROR_MASK__AES_REQUEST (0x80) |
|
#define | AT86RF2XX_AES_CTRL_MIRROR_MASK__AES_MODE (0x70) |
|
#define | AT86RF2XX_AES_CTRL_MIRROR_MASK__AES_DIR (0x08) |
|
#define | AT86RF2XX_AES_CTRL_MIRROR_AES_REQUEST__IDLE (0x00) |
|
#define | AT86RF2XX_AES_CTRL_MIRROR_AES_REQUEST__START (0x80) |
|
#define | AT86RF2XX_AES_CTRL_MIRROR_AES_MODE__ECB (0x00) |
|
#define | AT86RF2XX_AES_CTRL_MIRROR_AES_MODE__KEY (0x10) |
|
#define | AT86RF2XX_AES_CTRL_MIRROR_AES_MODE__CBC (0x20) |
|
#define | AT86RF2XX_AES_CTRL_MIRROR_AES_DIR__ENC (0x00) |
|
#define | AT86RF2XX_AES_CTRL_MIRROR_AES_DIR__DEC (0x08) |
|
◆ aes_block_t
An AES block.
AES works on blocks of 16 bytes
Definition at line 119 of file at86rf2xx_aes.h.
◆ at86rf2xx_aes_cbc_decrypt()
void at86rf2xx_aes_cbc_decrypt |
( |
at86rf2xx_t * |
dev, |
|
|
aes_block_t * |
plain, |
|
|
uint8_t |
key[AT86RF2XX_AES_BLOCK_SIZE], |
|
|
uint8_t |
iv[AT86RF2XX_AES_BLOCK_SIZE], |
|
|
const aes_block_t * |
cipher, |
|
|
uint8_t |
nblocks |
|
) |
| |
Perform AES algorithm and decrypt data blocks in cipher
to plain data blocks, using CBC mode.
- Note
- The decryption key must have been written before.
- Parameters
-
[in] | dev | Device |
[out] | plain | If not NUll, plain data blocks |
[out] | key | If not NULL, last round decryption key is stored |
[in,out] | iv | in: initial vector, out: last plain block if plain is NULL |
[in] | cipher | Cipher data blocks |
[in] | nblocks | Number of blocks |
◆ at86rf2xx_aes_cbc_encrypt()
void at86rf2xx_aes_cbc_encrypt |
( |
at86rf2xx_t * |
dev, |
|
|
aes_block_t * |
cipher, |
|
|
uint8_t |
key[AT86RF2XX_AES_BLOCK_SIZE], |
|
|
uint8_t |
iv[AT86RF2XX_AES_BLOCK_SIZE], |
|
|
const aes_block_t * |
plain, |
|
|
uint8_t |
nblocks |
|
) |
| |
Perform AES algorithm and encrypt data blocks in plain
to cipher data blocks, using CBC mode.
- Note
- The encryption key must have been written before.
- Parameters
-
[in] | dev | Device |
[out] | cipher | If not NULL, cipher blocks |
[out] | key | If not NULL, last round encryption key is stored |
[in,out] | iv | in: initial vector, out: last cipher block if cipher is NULL |
[in] | plain | Plain data blocks |
[in] | nblocks | Number of blocks |
◆ at86rf2xx_aes_ecb_decrypt()
Perform AES algorithm and decrypt data blocks in cipher
to plain data blocks, using ECB mode.
- Note
- The decryption key must have been written before.
- Parameters
-
[in] | dev | Device |
[out] | plain | If not NULL, plain data blocks |
[out] | key | If not NULL, last round decryption key is stored |
[in] | cipher | Cipher data blocks |
[in] | nblocks | Number of blocks |
◆ at86rf2xx_aes_ecb_encrypt()
Perform AES algorithm and encrypt data blocks in plain
to cipher data blocks, using ECB mode.
- Note
- The encryption key must have been written before.
- Parameters
-
[in] | dev | Device |
[out] | cipher | If not NULL, cipher data blocks |
[out] | key | If not NULL, last round encryption key is stored |
[in] | plain | Plain data blocks |
[in] | nblocks | Number of blocks |
◆ at86rf2xx_aes_key_read_decrypt()
void at86rf2xx_aes_key_read_decrypt |
( |
at86rf2xx_t * |
dev, |
|
|
uint8_t |
key[AT86RF2XX_AES_KEY_LENGTH] |
|
) |
| |
Read the AES key used for decryption.
- Parameters
-
[in] | dev | Device |
[out] | key | Buffer to store the key |
◆ at86rf2xx_aes_key_read_encrypt()
void at86rf2xx_aes_key_read_encrypt |
( |
at86rf2xx_t * |
dev, |
|
|
uint8_t |
key[AT86RF2XX_AES_KEY_LENGTH] |
|
) |
| |
Read the AES key used for encryption.
- Parameters
-
[in] | dev | Device |
[out] | key | Buffer to store the key |
◆ at86rf2xx_aes_key_write_decrypt()
void at86rf2xx_aes_key_write_decrypt |
( |
at86rf2xx_t * |
dev, |
|
|
const uint8_t |
key[AT86RF2XX_AES_KEY_LENGTH] |
|
) |
| |
Write the AES key used for decryption.
It is important to write the decryption key, before decryption is done
- Parameters
-
[in] | dev | Device |
[in] | key | Buffer which stores the key |
◆ at86rf2xx_aes_key_write_encrypt()
void at86rf2xx_aes_key_write_encrypt |
( |
at86rf2xx_t * |
dev, |
|
|
const uint8_t |
key[AT86RF2XX_AES_KEY_LENGTH] |
|
) |
| |
Write the AES key used for encryption.
It is important to write the encryption key, before encryption is done
- Parameters
-
[in] | dev | Device |
[in] | key | Buffer which stores the key |