The extended feature set of at86rf2xx transceivers comprises a hardware implementation of AES.  
More...
The extended feature set of at86rf2xx transceivers comprises a hardware implementation of AES. 
There are two supported block cipher modes, ECB and CBC.
Interface of the at86rf2xx security module (AES)
- 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  |