Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Prototype RF Driver for STM Sub-1 GHz RF Expansion Boards based on the SPSGRF-868 and SPSGRF-915 Modules for STM32 Nucleo
Currently supported boards:
Note, in order to use expansion board X-NUCLEO-IDS01A4 in mbed you need to perform the following HW modifications on the board:
- Unmount resistor
R4 - Mount resistor
R7
Furthermore, on some Nucleo development boards (e.g. the NUCLEO_F429ZI), in order to be able to use Ethernet together with these Sub-1 GHz RF expansion boards, you need to compile this driver with macro SPIRIT1_SPI_MOSI=PB_5 defined, while the development board typically requires some HW modification as e.g. described here!
This driver can be used together with the 6LoWPAN stack (a.k.a. Nanostack).
libs/spirit1/SPIRIT1_Library/Src/SPIRIT_Aes.c@0:4fb29d9ee571, 2016-10-13 (annotated)
- Committer:
- Wolfgang Betz
- Date:
- Thu Oct 13 15:41:39 2016 +0200
- Revision:
- 0:4fb29d9ee571
First compiling version (without warnings)
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| Wolfgang Betz |
0:4fb29d9ee571 | 1 | /** |
| Wolfgang Betz |
0:4fb29d9ee571 | 2 | ****************************************************************************** |
| Wolfgang Betz |
0:4fb29d9ee571 | 3 | * @file SPIRIT_Aes.c |
| Wolfgang Betz |
0:4fb29d9ee571 | 4 | * @author VMA division - AMS |
| Wolfgang Betz |
0:4fb29d9ee571 | 5 | * @version 3.2.2 |
| Wolfgang Betz |
0:4fb29d9ee571 | 6 | * @date 08-July-2015 |
| Wolfgang Betz |
0:4fb29d9ee571 | 7 | * @brief Configuration and management of SPIRIT AES Engine. |
| Wolfgang Betz |
0:4fb29d9ee571 | 8 | * |
| Wolfgang Betz |
0:4fb29d9ee571 | 9 | * @attention |
| Wolfgang Betz |
0:4fb29d9ee571 | 10 | * |
| Wolfgang Betz |
0:4fb29d9ee571 | 11 | * <h2><center>© COPYRIGHT(c) 2015 STMicroelectronics</center></h2> |
| Wolfgang Betz |
0:4fb29d9ee571 | 12 | * |
| Wolfgang Betz |
0:4fb29d9ee571 | 13 | * Redistribution and use in source and binary forms, with or without modification, |
| Wolfgang Betz |
0:4fb29d9ee571 | 14 | * are permitted provided that the following conditions are met: |
| Wolfgang Betz |
0:4fb29d9ee571 | 15 | * 1. Redistributions of source code must retain the above copyright notice, |
| Wolfgang Betz |
0:4fb29d9ee571 | 16 | * this list of conditions and the following disclaimer. |
| Wolfgang Betz |
0:4fb29d9ee571 | 17 | * 2. Redistributions in binary form must reproduce the above copyright notice, |
| Wolfgang Betz |
0:4fb29d9ee571 | 18 | * this list of conditions and the following disclaimer in the documentation |
| Wolfgang Betz |
0:4fb29d9ee571 | 19 | * and/or other materials provided with the distribution. |
| Wolfgang Betz |
0:4fb29d9ee571 | 20 | * 3. Neither the name of STMicroelectronics nor the names of its contributors |
| Wolfgang Betz |
0:4fb29d9ee571 | 21 | * may be used to endorse or promote products derived from this software |
| Wolfgang Betz |
0:4fb29d9ee571 | 22 | * without specific prior written permission. |
| Wolfgang Betz |
0:4fb29d9ee571 | 23 | * |
| Wolfgang Betz |
0:4fb29d9ee571 | 24 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" |
| Wolfgang Betz |
0:4fb29d9ee571 | 25 | * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
| Wolfgang Betz |
0:4fb29d9ee571 | 26 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE |
| Wolfgang Betz |
0:4fb29d9ee571 | 27 | * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE |
| Wolfgang Betz |
0:4fb29d9ee571 | 28 | * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL |
| Wolfgang Betz |
0:4fb29d9ee571 | 29 | * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR |
| Wolfgang Betz |
0:4fb29d9ee571 | 30 | * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER |
| Wolfgang Betz |
0:4fb29d9ee571 | 31 | * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, |
| Wolfgang Betz |
0:4fb29d9ee571 | 32 | * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
| Wolfgang Betz |
0:4fb29d9ee571 | 33 | * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| Wolfgang Betz |
0:4fb29d9ee571 | 34 | * |
| Wolfgang Betz |
0:4fb29d9ee571 | 35 | ****************************************************************************** |
| Wolfgang Betz |
0:4fb29d9ee571 | 36 | */ |
| Wolfgang Betz |
0:4fb29d9ee571 | 37 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 38 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 39 | /* Includes ------------------------------------------------------------------*/ |
| Wolfgang Betz |
0:4fb29d9ee571 | 40 | #include "SPIRIT_Aes.h" |
| Wolfgang Betz |
0:4fb29d9ee571 | 41 | #include "MCU_Interface.h" |
| Wolfgang Betz |
0:4fb29d9ee571 | 42 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 43 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 44 | /** |
| Wolfgang Betz |
0:4fb29d9ee571 | 45 | * @addtogroup SPIRIT_Libraries |
| Wolfgang Betz |
0:4fb29d9ee571 | 46 | * @{ |
| Wolfgang Betz |
0:4fb29d9ee571 | 47 | */ |
| Wolfgang Betz |
0:4fb29d9ee571 | 48 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 49 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 50 | /** |
| Wolfgang Betz |
0:4fb29d9ee571 | 51 | * @addtogroup SPIRIT_Aes |
| Wolfgang Betz |
0:4fb29d9ee571 | 52 | * @{ |
| Wolfgang Betz |
0:4fb29d9ee571 | 53 | */ |
| Wolfgang Betz |
0:4fb29d9ee571 | 54 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 55 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 56 | /** |
| Wolfgang Betz |
0:4fb29d9ee571 | 57 | * @defgroup Aes_Private_TypesDefinitions AES Private Types Definitions |
| Wolfgang Betz |
0:4fb29d9ee571 | 58 | * @{ |
| Wolfgang Betz |
0:4fb29d9ee571 | 59 | */ |
| Wolfgang Betz |
0:4fb29d9ee571 | 60 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 61 | /** |
| Wolfgang Betz |
0:4fb29d9ee571 | 62 | * @} |
| Wolfgang Betz |
0:4fb29d9ee571 | 63 | */ |
| Wolfgang Betz |
0:4fb29d9ee571 | 64 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 65 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 66 | /** |
| Wolfgang Betz |
0:4fb29d9ee571 | 67 | * @defgroup Aes_Private_Defines AES Private Defines |
| Wolfgang Betz |
0:4fb29d9ee571 | 68 | * @{ |
| Wolfgang Betz |
0:4fb29d9ee571 | 69 | */ |
| Wolfgang Betz |
0:4fb29d9ee571 | 70 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 71 | /** |
| Wolfgang Betz |
0:4fb29d9ee571 | 72 | * @} |
| Wolfgang Betz |
0:4fb29d9ee571 | 73 | */ |
| Wolfgang Betz |
0:4fb29d9ee571 | 74 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 75 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 76 | /** |
| Wolfgang Betz |
0:4fb29d9ee571 | 77 | * @defgroup Aes_Private_Macros AES Private Macros |
| Wolfgang Betz |
0:4fb29d9ee571 | 78 | * @{ |
| Wolfgang Betz |
0:4fb29d9ee571 | 79 | */ |
| Wolfgang Betz |
0:4fb29d9ee571 | 80 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 81 | /** |
| Wolfgang Betz |
0:4fb29d9ee571 | 82 | * @} |
| Wolfgang Betz |
0:4fb29d9ee571 | 83 | */ |
| Wolfgang Betz |
0:4fb29d9ee571 | 84 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 85 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 86 | /** |
| Wolfgang Betz |
0:4fb29d9ee571 | 87 | * @defgroup Aes_Private_Variables AES Private Variables |
| Wolfgang Betz |
0:4fb29d9ee571 | 88 | * @{ |
| Wolfgang Betz |
0:4fb29d9ee571 | 89 | */ |
| Wolfgang Betz |
0:4fb29d9ee571 | 90 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 91 | /** |
| Wolfgang Betz |
0:4fb29d9ee571 | 92 | * @} |
| Wolfgang Betz |
0:4fb29d9ee571 | 93 | */ |
| Wolfgang Betz |
0:4fb29d9ee571 | 94 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 95 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 96 | /** |
| Wolfgang Betz |
0:4fb29d9ee571 | 97 | * @defgroup Aes_Private_FunctionPrototypes AES Private Function Prototypes |
| Wolfgang Betz |
0:4fb29d9ee571 | 98 | * @{ |
| Wolfgang Betz |
0:4fb29d9ee571 | 99 | */ |
| Wolfgang Betz |
0:4fb29d9ee571 | 100 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 101 | /** |
| Wolfgang Betz |
0:4fb29d9ee571 | 102 | * @} |
| Wolfgang Betz |
0:4fb29d9ee571 | 103 | */ |
| Wolfgang Betz |
0:4fb29d9ee571 | 104 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 105 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 106 | /** |
| Wolfgang Betz |
0:4fb29d9ee571 | 107 | * @defgroup Aes_Private_Functions AES Private Functions |
| Wolfgang Betz |
0:4fb29d9ee571 | 108 | * @{ |
| Wolfgang Betz |
0:4fb29d9ee571 | 109 | */ |
| Wolfgang Betz |
0:4fb29d9ee571 | 110 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 111 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 112 | /** |
| Wolfgang Betz |
0:4fb29d9ee571 | 113 | * @brief Enables or Disables the AES engine. |
| Wolfgang Betz |
0:4fb29d9ee571 | 114 | * @param xNewState new state for AES engine. |
| Wolfgang Betz |
0:4fb29d9ee571 | 115 | * This parameter can be: S_ENABLE or S_DISABLE. |
| Wolfgang Betz |
0:4fb29d9ee571 | 116 | * @retval None |
| Wolfgang Betz |
0:4fb29d9ee571 | 117 | */ |
| Wolfgang Betz |
0:4fb29d9ee571 | 118 | void SpiritAesMode(SpiritFunctionalState xNewState) |
| Wolfgang Betz |
0:4fb29d9ee571 | 119 | { |
| Wolfgang Betz |
0:4fb29d9ee571 | 120 | uint8_t tempRegValue = 0x00; |
| Wolfgang Betz |
0:4fb29d9ee571 | 121 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 122 | /* Check the parameters */ |
| Wolfgang Betz |
0:4fb29d9ee571 | 123 | s_assert_param(IS_SPIRIT_FUNCTIONAL_STATE(xNewState)); |
| Wolfgang Betz |
0:4fb29d9ee571 | 124 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 125 | /* Modifies the register value */ |
| Wolfgang Betz |
0:4fb29d9ee571 | 126 | g_xStatus = SpiritSpiReadRegisters(ANA_FUNC_CONF0_BASE, 1, &tempRegValue); |
| Wolfgang Betz |
0:4fb29d9ee571 | 127 | if(xNewState == S_ENABLE) |
| Wolfgang Betz |
0:4fb29d9ee571 | 128 | { |
| Wolfgang Betz |
0:4fb29d9ee571 | 129 | tempRegValue |= AES_MASK; |
| Wolfgang Betz |
0:4fb29d9ee571 | 130 | } |
| Wolfgang Betz |
0:4fb29d9ee571 | 131 | else |
| Wolfgang Betz |
0:4fb29d9ee571 | 132 | { |
| Wolfgang Betz |
0:4fb29d9ee571 | 133 | tempRegValue &= ~AES_MASK; |
| Wolfgang Betz |
0:4fb29d9ee571 | 134 | } |
| Wolfgang Betz |
0:4fb29d9ee571 | 135 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 136 | /* Writes the ANA_FUNC_CONF0 register to enable or disable the AES engine */ |
| Wolfgang Betz |
0:4fb29d9ee571 | 137 | g_xStatus = SpiritSpiWriteRegisters(ANA_FUNC_CONF0_BASE, 1, &tempRegValue); |
| Wolfgang Betz |
0:4fb29d9ee571 | 138 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 139 | } |
| Wolfgang Betz |
0:4fb29d9ee571 | 140 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 141 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 142 | /** |
| Wolfgang Betz |
0:4fb29d9ee571 | 143 | * @brief Writes the data to encrypt or decrypt, or the encryption key for the |
| Wolfgang Betz |
0:4fb29d9ee571 | 144 | * derive decryption key operation into the AES_DATA_IN registers. |
| Wolfgang Betz |
0:4fb29d9ee571 | 145 | * @param pcBufferDataIn pointer to the user data buffer. The first byte of the array |
| Wolfgang Betz |
0:4fb29d9ee571 | 146 | * shall be the MSB byte and it will be put in the AES_DATA_IN[0] register, while |
| Wolfgang Betz |
0:4fb29d9ee571 | 147 | * the last one shall be the LSB and it will be put in the AES_DATA_IN[cDataLength-1] |
| Wolfgang Betz |
0:4fb29d9ee571 | 148 | * register. If data to write are less than 16 bytes the remaining AES_DATA_IN registers |
| Wolfgang Betz |
0:4fb29d9ee571 | 149 | * will be filled with bytes equal to 0. This parameter is an uint8_t*. |
| Wolfgang Betz |
0:4fb29d9ee571 | 150 | * @param cDataLength length of data in bytes. |
| Wolfgang Betz |
0:4fb29d9ee571 | 151 | * This parameter is an uint8_t. |
| Wolfgang Betz |
0:4fb29d9ee571 | 152 | * @retval None |
| Wolfgang Betz |
0:4fb29d9ee571 | 153 | */ |
| Wolfgang Betz |
0:4fb29d9ee571 | 154 | void SpiritAesWriteDataIn(uint8_t* pcBufferDataIn, uint8_t cDataLength) |
| Wolfgang Betz |
0:4fb29d9ee571 | 155 | { |
| Wolfgang Betz |
0:4fb29d9ee571 | 156 | uint8_t i, dataInArray[16]; |
| Wolfgang Betz |
0:4fb29d9ee571 | 157 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 158 | /* Verifies that there are no more than 16 bytes */ |
| Wolfgang Betz |
0:4fb29d9ee571 | 159 | (cDataLength>16) ? (cDataLength=16) : cDataLength; |
| Wolfgang Betz |
0:4fb29d9ee571 | 160 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 161 | /* Fill the dataInArray with the data buffer, using padding */ |
| Wolfgang Betz |
0:4fb29d9ee571 | 162 | for(i=0;i<16;i++) |
| Wolfgang Betz |
0:4fb29d9ee571 | 163 | { |
| Wolfgang Betz |
0:4fb29d9ee571 | 164 | (i<(16 - cDataLength)) ? (dataInArray[i]=0):(dataInArray[i]=pcBufferDataIn[15-i]); |
| Wolfgang Betz |
0:4fb29d9ee571 | 165 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 166 | } |
| Wolfgang Betz |
0:4fb29d9ee571 | 167 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 168 | /* Writes the AES_DATA_IN registers */ |
| Wolfgang Betz |
0:4fb29d9ee571 | 169 | g_xStatus = SpiritSpiWriteRegisters(AES_DATA_IN_15_BASE, 16, dataInArray); |
| Wolfgang Betz |
0:4fb29d9ee571 | 170 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 171 | } |
| Wolfgang Betz |
0:4fb29d9ee571 | 172 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 173 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 174 | /** |
| Wolfgang Betz |
0:4fb29d9ee571 | 175 | * @brief Returns the encrypted or decrypted data or the decription key from the AES_DATA_OUT register. |
| Wolfgang Betz |
0:4fb29d9ee571 | 176 | * @param pcBufferDataOut pointer to the user data buffer. The AES_DATA_OUT[0] |
| Wolfgang Betz |
0:4fb29d9ee571 | 177 | * register value will be put as first element of the buffer (MSB), while the |
| Wolfgang Betz |
0:4fb29d9ee571 | 178 | * AES_DAT_OUT[cDataLength-1] register value will be put as last element of the buffer (LSB). |
| Wolfgang Betz |
0:4fb29d9ee571 | 179 | * This parameter is a uint8_t*. |
| Wolfgang Betz |
0:4fb29d9ee571 | 180 | * @param cDataLength length of data to read in bytes. |
| Wolfgang Betz |
0:4fb29d9ee571 | 181 | * This parameter is a uint8_t. |
| Wolfgang Betz |
0:4fb29d9ee571 | 182 | * @retval None |
| Wolfgang Betz |
0:4fb29d9ee571 | 183 | */ |
| Wolfgang Betz |
0:4fb29d9ee571 | 184 | void SpiritAesReadDataOut(uint8_t* pcBufferDataOut, uint8_t cDataLength) |
| Wolfgang Betz |
0:4fb29d9ee571 | 185 | { |
| Wolfgang Betz |
0:4fb29d9ee571 | 186 | uint8_t address, dataOutArray[16]; |
| Wolfgang Betz |
0:4fb29d9ee571 | 187 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 188 | /* Verifies that there are no more than 16 bytes */ |
| Wolfgang Betz |
0:4fb29d9ee571 | 189 | (cDataLength>16) ? (cDataLength=16) : cDataLength; |
| Wolfgang Betz |
0:4fb29d9ee571 | 190 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 191 | /* Evaluates the address of AES_DATA_OUT from which start to read */ |
| Wolfgang Betz |
0:4fb29d9ee571 | 192 | address = AES_DATA_OUT_15_BASE+16-cDataLength; |
| Wolfgang Betz |
0:4fb29d9ee571 | 193 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 194 | /* Reads the exact number of AES_DATA_OUT registers */ |
| Wolfgang Betz |
0:4fb29d9ee571 | 195 | g_xStatus = (SpiritSpiReadRegisters(address, cDataLength, dataOutArray)); |
| Wolfgang Betz |
0:4fb29d9ee571 | 196 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 197 | /* Copy in the user buffer the read values changing the order */ |
| Wolfgang Betz |
0:4fb29d9ee571 | 198 | for(int i = (cDataLength-1); i>=0; i--) |
| Wolfgang Betz |
0:4fb29d9ee571 | 199 | { |
| Wolfgang Betz |
0:4fb29d9ee571 | 200 | *pcBufferDataOut = dataOutArray[i]; |
| Wolfgang Betz |
0:4fb29d9ee571 | 201 | pcBufferDataOut++; |
| Wolfgang Betz |
0:4fb29d9ee571 | 202 | } |
| Wolfgang Betz |
0:4fb29d9ee571 | 203 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 204 | } |
| Wolfgang Betz |
0:4fb29d9ee571 | 205 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 206 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 207 | /** |
| Wolfgang Betz |
0:4fb29d9ee571 | 208 | * @brief Writes the encryption key into the AES_KEY_IN register. |
| Wolfgang Betz |
0:4fb29d9ee571 | 209 | * @param pcKey pointer to the buffer of 4 words containing the AES key. |
| Wolfgang Betz |
0:4fb29d9ee571 | 210 | * The first byte of the buffer shall be the most significant byte AES_KEY_0 of the AES key. |
| Wolfgang Betz |
0:4fb29d9ee571 | 211 | * The last byte of the buffer shall be the less significant byte AES_KEY_15 of the AES key. |
| Wolfgang Betz |
0:4fb29d9ee571 | 212 | * This parameter is an uint8_t*. |
| Wolfgang Betz |
0:4fb29d9ee571 | 213 | * @retval None |
| Wolfgang Betz |
0:4fb29d9ee571 | 214 | */ |
| Wolfgang Betz |
0:4fb29d9ee571 | 215 | void SpiritAesWriteKey(uint8_t* pcKey) |
| Wolfgang Betz |
0:4fb29d9ee571 | 216 | { |
| Wolfgang Betz |
0:4fb29d9ee571 | 217 | uint8_t pcTempKey[16]; |
| Wolfgang Betz |
0:4fb29d9ee571 | 218 | for (uint8_t i = 0; i < 16; i++) |
| Wolfgang Betz |
0:4fb29d9ee571 | 219 | { |
| Wolfgang Betz |
0:4fb29d9ee571 | 220 | pcTempKey[15-i] = pcKey[i]; |
| Wolfgang Betz |
0:4fb29d9ee571 | 221 | } |
| Wolfgang Betz |
0:4fb29d9ee571 | 222 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 223 | /* Writes the AES_DATA_IN registers */ |
| Wolfgang Betz |
0:4fb29d9ee571 | 224 | g_xStatus = SpiritSpiWriteRegisters(AES_KEY_IN_15_BASE, 16, pcTempKey); |
| Wolfgang Betz |
0:4fb29d9ee571 | 225 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 226 | } |
| Wolfgang Betz |
0:4fb29d9ee571 | 227 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 228 | /** |
| Wolfgang Betz |
0:4fb29d9ee571 | 229 | * @brief Returns the encryption/decryption key from the AES_KEY_IN register. |
| Wolfgang Betz |
0:4fb29d9ee571 | 230 | * @param pcKey pointer to the buffer of 4 words (16 bytes) containing the AES key. |
| Wolfgang Betz |
0:4fb29d9ee571 | 231 | * The first byte of the buffer shall be the most significant byte AES_KEY_0 of the AES key. |
| Wolfgang Betz |
0:4fb29d9ee571 | 232 | * The last byte of the buffer shall be the less significant byte AES_KEY_15 of the AES key. |
| Wolfgang Betz |
0:4fb29d9ee571 | 233 | * This parameter is an uint8_t*. |
| Wolfgang Betz |
0:4fb29d9ee571 | 234 | * @retval None |
| Wolfgang Betz |
0:4fb29d9ee571 | 235 | */ |
| Wolfgang Betz |
0:4fb29d9ee571 | 236 | void SpiritAesReadKey(uint8_t* pcKey) |
| Wolfgang Betz |
0:4fb29d9ee571 | 237 | { |
| Wolfgang Betz |
0:4fb29d9ee571 | 238 | uint8_t pcTempKey[16]; |
| Wolfgang Betz |
0:4fb29d9ee571 | 239 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 240 | /* Reads the AES_DATA_IN registers */ |
| Wolfgang Betz |
0:4fb29d9ee571 | 241 | g_xStatus = SpiritSpiReadRegisters(AES_KEY_IN_15_BASE, 16, pcTempKey); |
| Wolfgang Betz |
0:4fb29d9ee571 | 242 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 243 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 244 | for (uint8_t i = 0; i < 16; i++) |
| Wolfgang Betz |
0:4fb29d9ee571 | 245 | pcKey[i] = pcTempKey[15-i]; |
| Wolfgang Betz |
0:4fb29d9ee571 | 246 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 247 | } |
| Wolfgang Betz |
0:4fb29d9ee571 | 248 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 249 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 250 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 251 | /** |
| Wolfgang Betz |
0:4fb29d9ee571 | 252 | * @brief Derives the decryption key from a given encryption key. |
| Wolfgang Betz |
0:4fb29d9ee571 | 253 | * @param None. |
| Wolfgang Betz |
0:4fb29d9ee571 | 254 | * @retval None. |
| Wolfgang Betz |
0:4fb29d9ee571 | 255 | */ |
| Wolfgang Betz |
0:4fb29d9ee571 | 256 | void SpiritAesDeriveDecKeyFromEnc(void) |
| Wolfgang Betz |
0:4fb29d9ee571 | 257 | { |
| Wolfgang Betz |
0:4fb29d9ee571 | 258 | /* Sends the COMMAND_AES_KEY command */ |
| Wolfgang Betz |
0:4fb29d9ee571 | 259 | g_xStatus = SpiritSpiCommandStrobes(COMMAND_AES_KEY); |
| Wolfgang Betz |
0:4fb29d9ee571 | 260 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 261 | } |
| Wolfgang Betz |
0:4fb29d9ee571 | 262 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 263 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 264 | /** |
| Wolfgang Betz |
0:4fb29d9ee571 | 265 | * @brief Executes the encryption operation. |
| Wolfgang Betz |
0:4fb29d9ee571 | 266 | * @param None. |
| Wolfgang Betz |
0:4fb29d9ee571 | 267 | * @retval None. |
| Wolfgang Betz |
0:4fb29d9ee571 | 268 | */ |
| Wolfgang Betz |
0:4fb29d9ee571 | 269 | void SpiritAesExecuteEncryption(void) |
| Wolfgang Betz |
0:4fb29d9ee571 | 270 | { |
| Wolfgang Betz |
0:4fb29d9ee571 | 271 | /* Sends the COMMAND_AES_ENC command */ |
| Wolfgang Betz |
0:4fb29d9ee571 | 272 | g_xStatus = SpiritSpiCommandStrobes(COMMAND_AES_ENC); |
| Wolfgang Betz |
0:4fb29d9ee571 | 273 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 274 | } |
| Wolfgang Betz |
0:4fb29d9ee571 | 275 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 276 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 277 | /** |
| Wolfgang Betz |
0:4fb29d9ee571 | 278 | * @brief Executes the decryption operation. |
| Wolfgang Betz |
0:4fb29d9ee571 | 279 | * @param None. |
| Wolfgang Betz |
0:4fb29d9ee571 | 280 | * @retval None. |
| Wolfgang Betz |
0:4fb29d9ee571 | 281 | */ |
| Wolfgang Betz |
0:4fb29d9ee571 | 282 | void SpiritAesExecuteDecryption(void) |
| Wolfgang Betz |
0:4fb29d9ee571 | 283 | { |
| Wolfgang Betz |
0:4fb29d9ee571 | 284 | /* Sends the COMMAND_AES_DEC command */ |
| Wolfgang Betz |
0:4fb29d9ee571 | 285 | g_xStatus = SpiritSpiCommandStrobes(COMMAND_AES_DEC); |
| Wolfgang Betz |
0:4fb29d9ee571 | 286 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 287 | } |
| Wolfgang Betz |
0:4fb29d9ee571 | 288 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 289 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 290 | /** |
| Wolfgang Betz |
0:4fb29d9ee571 | 291 | * @brief Executes the key derivation and the decryption operation. |
| Wolfgang Betz |
0:4fb29d9ee571 | 292 | * @param None. |
| Wolfgang Betz |
0:4fb29d9ee571 | 293 | * @retval None. |
| Wolfgang Betz |
0:4fb29d9ee571 | 294 | */ |
| Wolfgang Betz |
0:4fb29d9ee571 | 295 | void SpiritAesDeriveDecKeyExecuteDec(void) |
| Wolfgang Betz |
0:4fb29d9ee571 | 296 | { |
| Wolfgang Betz |
0:4fb29d9ee571 | 297 | /* Sends the COMMAND_AES_KEY_DEC command */ |
| Wolfgang Betz |
0:4fb29d9ee571 | 298 | g_xStatus = SpiritSpiCommandStrobes(COMMAND_AES_KEY_DEC); |
| Wolfgang Betz |
0:4fb29d9ee571 | 299 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 300 | } |
| Wolfgang Betz |
0:4fb29d9ee571 | 301 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 302 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 303 | /** |
| Wolfgang Betz |
0:4fb29d9ee571 | 304 | * @} |
| Wolfgang Betz |
0:4fb29d9ee571 | 305 | */ |
| Wolfgang Betz |
0:4fb29d9ee571 | 306 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 307 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 308 | /** |
| Wolfgang Betz |
0:4fb29d9ee571 | 309 | * @} |
| Wolfgang Betz |
0:4fb29d9ee571 | 310 | */ |
| Wolfgang Betz |
0:4fb29d9ee571 | 311 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 312 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 313 | /** |
| Wolfgang Betz |
0:4fb29d9ee571 | 314 | * @} |
| Wolfgang Betz |
0:4fb29d9ee571 | 315 | */ |
| Wolfgang Betz |
0:4fb29d9ee571 | 316 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 317 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 318 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 319 | /******************* (C) COPYRIGHT 2015 STMicroelectronics *****END OF FILE****/ |
X-NUCLEO-IDS01A4 Sub-1GHz RF Expansion Board