blob: e51cbe536c4838e970a208e1a6eb30cd7d25b9f6 [file] [log] [blame]
/* ----------------------------------------------------------------------------
* SAM Software Package License
* ----------------------------------------------------------------------------
* Copyright (c) 2015, Atmel Corporation
*
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* - Redistributions of source code must retain the above copyright notice,
* this list of conditions and the disclaimer below.
*
* Atmel's name may not be used to endorse or promote products derived from
* this software without specific prior written permission.
*
* DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
* DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
* ----------------------------------------------------------------------------
*/
#ifndef _AES_
#define _AES_
/*------------------------------------------------------------------------------
* Headers
*------------------------------------------------------------------------------*/
#include "chip.h"
/*------------------------------------------------------------------------------*/
/* Definition */
/*------------------------------------------------------------------------------*/
#define AES_MR_CIPHER_ENCRYPT 1
#define AES_MR_CIPHER_DECRYPT 0
/*------------------------------------------------------------------------------*/
/* Exported functions */
/*------------------------------------------------------------------------------*/
/**
* \brief Starts Manual encryption/decryption process.
*/
void aes_start(void);
/**
* \brief Resets the AES.
* A software triggered hardware reset of the AES interface is performed.
*/
void aes_soft_reset(void);
/**
* \brief Configures an AES peripheral with the specified parameters.
* \param mode Desired value for the AES mode register (see the datasheet).
*/
void aes_configure(uint32_t mode);
/**
* \brief Enables the selected interrupts sources on a AES peripheral.
* \param sources Bitwise OR of selected interrupt sources.
*/
void aes_enable_it(uint32_t sources);
/**
* \brief Disables the selected interrupts sources on a AES peripheral.
* \param sources Bitwise OR of selected interrupt sources.
*/
void aes_disable_it(uint32_t sources);
/**
* \brief Get the current status register of the given AES peripheral.
* \return AES status register.
*/
extern uint32_t aes_get_status(void);
/**
* \brief Set the 128-bit/192-bit/256-bit cryptographic key used for
* encryption/decryption.
* \param key Pointer to a 16/24/32 bytes cipher key.
* \param len Length of the key, in bytes.
*/
void aes_write_key(const uint32_t * key, uint32_t len);
/**
* \brief Set the for 32-bit input Data allow to set the 128-bit data block used
* for encryption/decryption.
* \param data Pointer to the 16-bytes data to cipher/decipher.
*/
void aes_set_input(uint32_t * data);
/**
* \brief Get the four 32-bit data contain the 128-bit data block which has
* been encrypted/decrypted.
* \param data Pointer to the word that has been encrypted/decrypted..
*/
void aes_get_output(uint32_t * data);
/**
* \brief Set four 64-bit initialization vector data block, which is used by
* some modes of operation as an additional initial input.
* \param vector Pointer to the word of the initialization vector.
*/
void aes_set_vector(const uint32_t * vector);
/**
* \brief Set Length in bytes of the Additional Authenticated Data that are to
* be processed.
* \param len Length.
*/
void aes_set_aad_len(uint32_t len);
/**
* \brief Set Length in bytes of the plaintext/ciphertext data (that is, the C
* portion of the message) that are to be processed.
* \param len Length.
*/
void aes_set_data_len(uint32_t len);
/**
* \brief Set The four 32-bit Hash Word registers expose the intermediate GHASH
* value. May be read to save the current GHASH value so processing can later be
* resumed, presumably on a later message fragment.
* Modes of operation as an additional initial input.
* \param hash Pointer to the word of the hash.
*/
void aes_set_gcm_hash(uint32_t * hash);
/**
* \brief Get The four 32-bit Tag which contain the final 128-bit GCM
* Authentication tag 'T' when GCM processing is complete.
* \param tag Pointer to the word of the tag.
*/
void aes_get_gcm_tag(uint32_t * tag);
/**
* \brief Reports the current value of the 32-bit GCM counter.
* \param counter Pointer to value of GCM counter.
*/
void aes_get_gcm_counter(uint32_t * counter);
/**
* \brief Get the four 32-bit data containing the 128-bit H value computed from
* the KEYW value.
* \param h Pointer to the word that has been encrypted/decrypted.
*/
void aes_get_gcm_hash_subkey(uint32_t * h);
#endif /* #ifndef _AES_ */