Fork of my MQTTGateway

Dependencies:   mbed-http

Committer:
vpcola
Date:
Sat Apr 08 14:45:51 2017 +0000
Revision:
0:f1d3878b8dd9
Initial commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
vpcola 0:f1d3878b8dd9 1 /**
vpcola 0:f1d3878b8dd9 2 ******************************************************************************
vpcola 0:f1d3878b8dd9 3 * @file SPIRIT_Aes.h
vpcola 0:f1d3878b8dd9 4 * @author VMA division - AMS
vpcola 0:f1d3878b8dd9 5 * @version 3.2.2
vpcola 0:f1d3878b8dd9 6 * @date 08-July-2015
vpcola 0:f1d3878b8dd9 7 * @brief Configuration and management of SPIRIT AES Engine.
vpcola 0:f1d3878b8dd9 8 *
vpcola 0:f1d3878b8dd9 9 * @details
vpcola 0:f1d3878b8dd9 10 *
vpcola 0:f1d3878b8dd9 11 * In order to encrypt data, the user must manage the AES_END IRQ.
vpcola 0:f1d3878b8dd9 12 * The data have to be splitted in blocks of 16 bytes and written
vpcola 0:f1d3878b8dd9 13 * into the <i>AES DATA IN registers</i>. Then, after the key is written
vpcola 0:f1d3878b8dd9 14 * into the <i>AES KEY registers</i>, a command of <i>Execute encryption</i>
vpcola 0:f1d3878b8dd9 15 * has to be sent.
vpcola 0:f1d3878b8dd9 16 *
vpcola 0:f1d3878b8dd9 17 * <b>Example:</b>
vpcola 0:f1d3878b8dd9 18 * @code
vpcola 0:f1d3878b8dd9 19 *
vpcola 0:f1d3878b8dd9 20 * SpiritAesWriteDataIn(data_buff , N_BYTES);
vpcola 0:f1d3878b8dd9 21 * SpiritAesExecuteEncryption();
vpcola 0:f1d3878b8dd9 22 *
vpcola 0:f1d3878b8dd9 23 * while(!aes_end_flag); // the flag is set by the ISR routine which manages the AES_END irq
vpcola 0:f1d3878b8dd9 24 * aes_end_flag=RESET;
vpcola 0:f1d3878b8dd9 25 *
vpcola 0:f1d3878b8dd9 26 * SpiritAesReadDataOut(enc_data_buff , N_BYTES);
vpcola 0:f1d3878b8dd9 27 *
vpcola 0:f1d3878b8dd9 28 * @endcode
vpcola 0:f1d3878b8dd9 29 *
vpcola 0:f1d3878b8dd9 30 * In order to decrypt data, the user must manage the AES_END IRQ and have a decryption key.
vpcola 0:f1d3878b8dd9 31 * There are two operative modes to make the data decryption:
vpcola 0:f1d3878b8dd9 32 * <ul>
vpcola 0:f1d3878b8dd9 33 * <li> Derive the decryption key from the encryption key and decrypt data directly
vpcola 0:f1d3878b8dd9 34 * using the <i>SpiritAesDeriveDecKeyExecuteDec()</i> function
vpcola 0:f1d3878b8dd9 35 *
vpcola 0:f1d3878b8dd9 36 * <b>Example:</b>
vpcola 0:f1d3878b8dd9 37 * @code
vpcola 0:f1d3878b8dd9 38 *
vpcola 0:f1d3878b8dd9 39 * SpiritAesWriteDataIn(enc_data_buff , N_BYTES);
vpcola 0:f1d3878b8dd9 40 * SpiritAesDeriveDecKeyExecuteDec();
vpcola 0:f1d3878b8dd9 41 *
vpcola 0:f1d3878b8dd9 42 * while(!aes_end_flag); // the flag is set by the ISR routine which manages the AES_END irq
vpcola 0:f1d3878b8dd9 43 * aes_end_flag=RESET;
vpcola 0:f1d3878b8dd9 44 *
vpcola 0:f1d3878b8dd9 45 * SpiritAesReadDataOut(data_buff , N_BYTES);
vpcola 0:f1d3878b8dd9 46 *
vpcola 0:f1d3878b8dd9 47 * @endcode
vpcola 0:f1d3878b8dd9 48 * </li>
vpcola 0:f1d3878b8dd9 49 *
vpcola 0:f1d3878b8dd9 50 * <li> Derive the decryption key from the encryption key using the <i>SpiritAesDeriveDecKeyFromEnc()</i>
vpcola 0:f1d3878b8dd9 51 * function, store it into the <i>AES KEY registers</i> and then decrypt data using the
vpcola 0:f1d3878b8dd9 52 * <i>SpiritAesExecuteDecryption()</i> function
vpcola 0:f1d3878b8dd9 53 *
vpcola 0:f1d3878b8dd9 54 * <b>Example:</b>
vpcola 0:f1d3878b8dd9 55 * @code
vpcola 0:f1d3878b8dd9 56 *
vpcola 0:f1d3878b8dd9 57 * SpiritAesWriteDataIn(key_enc , 16);
vpcola 0:f1d3878b8dd9 58 * SpiritAesDeriveDecKeyFromEnc();
vpcola 0:f1d3878b8dd9 59 *
vpcola 0:f1d3878b8dd9 60 * while(!aes_end_flag); // the flag is set by the ISR routine which manages the AES_END irq
vpcola 0:f1d3878b8dd9 61 * aes_end_flag=RESET;
vpcola 0:f1d3878b8dd9 62 *
vpcola 0:f1d3878b8dd9 63 * SpiritAesReadDataOut(key_dec , 16);
vpcola 0:f1d3878b8dd9 64 *
vpcola 0:f1d3878b8dd9 65 * SpiritAesWriteKey(key_dec);
vpcola 0:f1d3878b8dd9 66 * SpiritAesWriteDataIn(enc_data_buff , 16);
vpcola 0:f1d3878b8dd9 67 * SpiritAesExecuteDecryption();
vpcola 0:f1d3878b8dd9 68 *
vpcola 0:f1d3878b8dd9 69 * while(!aes_end_flag); // the flag is set by the ISR routine which manages the AES_END irq
vpcola 0:f1d3878b8dd9 70 * aes_end_flag=RESET;
vpcola 0:f1d3878b8dd9 71 *
vpcola 0:f1d3878b8dd9 72 * SpiritAesReadDataOut(data_buff , N_BYTES);
vpcola 0:f1d3878b8dd9 73 *
vpcola 0:f1d3878b8dd9 74 * @endcode
vpcola 0:f1d3878b8dd9 75 * </li>
vpcola 0:f1d3878b8dd9 76 * </ul>
vpcola 0:f1d3878b8dd9 77 *
vpcola 0:f1d3878b8dd9 78 * @attention
vpcola 0:f1d3878b8dd9 79 *
vpcola 0:f1d3878b8dd9 80 * <h2><center>&copy; COPYRIGHT(c) 2015 STMicroelectronics</center></h2>
vpcola 0:f1d3878b8dd9 81 *
vpcola 0:f1d3878b8dd9 82 * Redistribution and use in source and binary forms, with or without modification,
vpcola 0:f1d3878b8dd9 83 * are permitted provided that the following conditions are met:
vpcola 0:f1d3878b8dd9 84 * 1. Redistributions of source code must retain the above copyright notice,
vpcola 0:f1d3878b8dd9 85 * this list of conditions and the following disclaimer.
vpcola 0:f1d3878b8dd9 86 * 2. Redistributions in binary form must reproduce the above copyright notice,
vpcola 0:f1d3878b8dd9 87 * this list of conditions and the following disclaimer in the documentation
vpcola 0:f1d3878b8dd9 88 * and/or other materials provided with the distribution.
vpcola 0:f1d3878b8dd9 89 * 3. Neither the name of STMicroelectronics nor the names of its contributors
vpcola 0:f1d3878b8dd9 90 * may be used to endorse or promote products derived from this software
vpcola 0:f1d3878b8dd9 91 * without specific prior written permission.
vpcola 0:f1d3878b8dd9 92 *
vpcola 0:f1d3878b8dd9 93 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
vpcola 0:f1d3878b8dd9 94 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
vpcola 0:f1d3878b8dd9 95 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
vpcola 0:f1d3878b8dd9 96 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
vpcola 0:f1d3878b8dd9 97 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
vpcola 0:f1d3878b8dd9 98 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
vpcola 0:f1d3878b8dd9 99 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
vpcola 0:f1d3878b8dd9 100 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
vpcola 0:f1d3878b8dd9 101 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
vpcola 0:f1d3878b8dd9 102 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
vpcola 0:f1d3878b8dd9 103 *
vpcola 0:f1d3878b8dd9 104 ******************************************************************************
vpcola 0:f1d3878b8dd9 105 */
vpcola 0:f1d3878b8dd9 106
vpcola 0:f1d3878b8dd9 107 /* Define to prevent recursive inclusion -------------------------------------*/
vpcola 0:f1d3878b8dd9 108 #ifndef __SPIRIT_AES_H
vpcola 0:f1d3878b8dd9 109 #define __SPIRIT_AES_H
vpcola 0:f1d3878b8dd9 110
vpcola 0:f1d3878b8dd9 111
vpcola 0:f1d3878b8dd9 112 /* Includes ------------------------------------------------------------------*/
vpcola 0:f1d3878b8dd9 113
vpcola 0:f1d3878b8dd9 114 #include "SPIRIT_Regs.h"
vpcola 0:f1d3878b8dd9 115 #include "SPIRIT_Types.h"
vpcola 0:f1d3878b8dd9 116
vpcola 0:f1d3878b8dd9 117
vpcola 0:f1d3878b8dd9 118 #ifdef __cplusplus
vpcola 0:f1d3878b8dd9 119 extern "C" {
vpcola 0:f1d3878b8dd9 120 #endif
vpcola 0:f1d3878b8dd9 121
vpcola 0:f1d3878b8dd9 122
vpcola 0:f1d3878b8dd9 123 /**
vpcola 0:f1d3878b8dd9 124 * @addtogroup SPIRIT_Libraries
vpcola 0:f1d3878b8dd9 125 * @{
vpcola 0:f1d3878b8dd9 126 */
vpcola 0:f1d3878b8dd9 127
vpcola 0:f1d3878b8dd9 128
vpcola 0:f1d3878b8dd9 129 /**
vpcola 0:f1d3878b8dd9 130 * @defgroup SPIRIT_Aes AES
vpcola 0:f1d3878b8dd9 131 * @brief Configuration and management of SPIRIT AES Engine.
vpcola 0:f1d3878b8dd9 132 * @details See the file <i>@ref SPIRIT_Aes.h</i> for more details.
vpcola 0:f1d3878b8dd9 133 * @{
vpcola 0:f1d3878b8dd9 134 */
vpcola 0:f1d3878b8dd9 135
vpcola 0:f1d3878b8dd9 136 /**
vpcola 0:f1d3878b8dd9 137 * @defgroup Aes_Exported_Types AES Exported Types
vpcola 0:f1d3878b8dd9 138 * @{
vpcola 0:f1d3878b8dd9 139 */
vpcola 0:f1d3878b8dd9 140
vpcola 0:f1d3878b8dd9 141 /**
vpcola 0:f1d3878b8dd9 142 * @}
vpcola 0:f1d3878b8dd9 143 */
vpcola 0:f1d3878b8dd9 144
vpcola 0:f1d3878b8dd9 145
vpcola 0:f1d3878b8dd9 146 /**
vpcola 0:f1d3878b8dd9 147 * @defgroup Aes_Exported_Constants AES Exported Constants
vpcola 0:f1d3878b8dd9 148 * @{
vpcola 0:f1d3878b8dd9 149 */
vpcola 0:f1d3878b8dd9 150
vpcola 0:f1d3878b8dd9 151
vpcola 0:f1d3878b8dd9 152 /**
vpcola 0:f1d3878b8dd9 153 * @}
vpcola 0:f1d3878b8dd9 154 */
vpcola 0:f1d3878b8dd9 155
vpcola 0:f1d3878b8dd9 156
vpcola 0:f1d3878b8dd9 157 /**
vpcola 0:f1d3878b8dd9 158 * @defgroup Aes_Exported_Macros AES Exported Macros
vpcola 0:f1d3878b8dd9 159 * @{
vpcola 0:f1d3878b8dd9 160 */
vpcola 0:f1d3878b8dd9 161
vpcola 0:f1d3878b8dd9 162
vpcola 0:f1d3878b8dd9 163 /**
vpcola 0:f1d3878b8dd9 164 * @}
vpcola 0:f1d3878b8dd9 165 */
vpcola 0:f1d3878b8dd9 166
vpcola 0:f1d3878b8dd9 167
vpcola 0:f1d3878b8dd9 168 /**
vpcola 0:f1d3878b8dd9 169 * @defgroup Aes_Exported_Functions AES Exported Functions
vpcola 0:f1d3878b8dd9 170 * @{
vpcola 0:f1d3878b8dd9 171 */
vpcola 0:f1d3878b8dd9 172
vpcola 0:f1d3878b8dd9 173 void SpiritAesMode(SpiritFunctionalState xNewState);
vpcola 0:f1d3878b8dd9 174 void SpiritAesWriteDataIn(uint8_t* pcBufferDataIn, uint8_t cDataLength);
vpcola 0:f1d3878b8dd9 175 void SpiritAesReadDataOut(uint8_t* pcBufferDataOut, uint8_t cDataLength);
vpcola 0:f1d3878b8dd9 176 void SpiritAesWriteKey(uint8_t* pcKey);
vpcola 0:f1d3878b8dd9 177 void SpiritAesReadKey(uint8_t* pcKey);
vpcola 0:f1d3878b8dd9 178 void SpiritAesDeriveDecKeyFromEnc(void);
vpcola 0:f1d3878b8dd9 179 void SpiritAesExecuteEncryption(void);
vpcola 0:f1d3878b8dd9 180 void SpiritAesExecuteDecryption(void);
vpcola 0:f1d3878b8dd9 181 void SpiritAesDeriveDecKeyExecuteDec(void);
vpcola 0:f1d3878b8dd9 182
vpcola 0:f1d3878b8dd9 183 /**
vpcola 0:f1d3878b8dd9 184 * @}
vpcola 0:f1d3878b8dd9 185 */
vpcola 0:f1d3878b8dd9 186
vpcola 0:f1d3878b8dd9 187 /**
vpcola 0:f1d3878b8dd9 188 * @}
vpcola 0:f1d3878b8dd9 189 */
vpcola 0:f1d3878b8dd9 190
vpcola 0:f1d3878b8dd9 191
vpcola 0:f1d3878b8dd9 192 /**
vpcola 0:f1d3878b8dd9 193 * @}
vpcola 0:f1d3878b8dd9 194 */
vpcola 0:f1d3878b8dd9 195
vpcola 0:f1d3878b8dd9 196
vpcola 0:f1d3878b8dd9 197
vpcola 0:f1d3878b8dd9 198
vpcola 0:f1d3878b8dd9 199 #ifdef __cplusplus
vpcola 0:f1d3878b8dd9 200 }
vpcola 0:f1d3878b8dd9 201 #endif
vpcola 0:f1d3878b8dd9 202
vpcola 0:f1d3878b8dd9 203 #endif
vpcola 0:f1d3878b8dd9 204
vpcola 0:f1d3878b8dd9 205 /******************* (C) COPYRIGHT 2015 STMicroelectronics *****END OF FILE****/