mbed library sources. Supersedes mbed-src.

Dependents:   Nucleo_Hello_Encoder BLE_iBeaconScan AM1805_DEMO DISCO-F429ZI_ExportTemplate1 ... more

Committer:
AnnaBridge
Date:
Wed Feb 20 22:31:08 2019 +0000
Revision:
189:f392fc9709a3
mbed library release version 165

Who changed what in which revision?

UserRevisionLine numberNew contents of line
AnnaBridge 189:f392fc9709a3 1 /*
AnnaBridge 189:f392fc9709a3 2 * Copyright (c) 2015-2016, Freescale Semiconductor, Inc.
AnnaBridge 189:f392fc9709a3 3 * All rights reserved.
AnnaBridge 189:f392fc9709a3 4 *
AnnaBridge 189:f392fc9709a3 5 * Redistribution and use in source and binary forms, with or without modification,
AnnaBridge 189:f392fc9709a3 6 * are permitted provided that the following conditions are met:
AnnaBridge 189:f392fc9709a3 7 *
AnnaBridge 189:f392fc9709a3 8 * o Redistributions of source code must retain the above copyright notice, this list
AnnaBridge 189:f392fc9709a3 9 * of conditions and the following disclaimer.
AnnaBridge 189:f392fc9709a3 10 *
AnnaBridge 189:f392fc9709a3 11 * o Redistributions in binary form must reproduce the above copyright notice, this
AnnaBridge 189:f392fc9709a3 12 * list of conditions and the following disclaimer in the documentation and/or
AnnaBridge 189:f392fc9709a3 13 * other materials provided with the distribution.
AnnaBridge 189:f392fc9709a3 14 *
AnnaBridge 189:f392fc9709a3 15 * o Neither the name of Freescale Semiconductor, Inc. nor the names of its
AnnaBridge 189:f392fc9709a3 16 * contributors may be used to endorse or promote products derived from this
AnnaBridge 189:f392fc9709a3 17 * software without specific prior written permission.
AnnaBridge 189:f392fc9709a3 18 *
AnnaBridge 189:f392fc9709a3 19 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
AnnaBridge 189:f392fc9709a3 20 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
AnnaBridge 189:f392fc9709a3 21 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
AnnaBridge 189:f392fc9709a3 22 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
AnnaBridge 189:f392fc9709a3 23 * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
AnnaBridge 189:f392fc9709a3 24 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
AnnaBridge 189:f392fc9709a3 25 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
AnnaBridge 189:f392fc9709a3 26 * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
AnnaBridge 189:f392fc9709a3 27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
AnnaBridge 189:f392fc9709a3 28 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
AnnaBridge 189:f392fc9709a3 29 */
AnnaBridge 189:f392fc9709a3 30 #ifndef _FSL_LTC_H_
AnnaBridge 189:f392fc9709a3 31 #define _FSL_LTC_H_
AnnaBridge 189:f392fc9709a3 32
AnnaBridge 189:f392fc9709a3 33 #include "fsl_common.h"
AnnaBridge 189:f392fc9709a3 34
AnnaBridge 189:f392fc9709a3 35 /*******************************************************************************
AnnaBridge 189:f392fc9709a3 36 * Definitions
AnnaBridge 189:f392fc9709a3 37 *******************************************************************************/
AnnaBridge 189:f392fc9709a3 38
AnnaBridge 189:f392fc9709a3 39 /*!
AnnaBridge 189:f392fc9709a3 40 * @addtogroup ltc
AnnaBridge 189:f392fc9709a3 41 * @{
AnnaBridge 189:f392fc9709a3 42 */
AnnaBridge 189:f392fc9709a3 43 /*! @name Driver version */
AnnaBridge 189:f392fc9709a3 44 /*@{*/
AnnaBridge 189:f392fc9709a3 45 /*! @brief LTC driver version. Version 2.0.2.
AnnaBridge 189:f392fc9709a3 46 *
AnnaBridge 189:f392fc9709a3 47 * Current version: 2.0.2
AnnaBridge 189:f392fc9709a3 48 *
AnnaBridge 189:f392fc9709a3 49 * Change log:
AnnaBridge 189:f392fc9709a3 50 * - Version 2.0.1
AnnaBridge 189:f392fc9709a3 51 * - fixed warning during g++ compilation
AnnaBridge 189:f392fc9709a3 52 *
AnnaBridge 189:f392fc9709a3 53 * - Version 2.0.2
AnnaBridge 189:f392fc9709a3 54 * - fixed [KPSDK-10932][LTC][SHA] LTC_HASH() blocks indefinitely when message size exceeds 4080 bytes
AnnaBridge 189:f392fc9709a3 55 */
AnnaBridge 189:f392fc9709a3 56 #define FSL_LTC_DRIVER_VERSION (MAKE_VERSION(2, 0, 2))
AnnaBridge 189:f392fc9709a3 57 /*@}*/
AnnaBridge 189:f392fc9709a3 58 /*! @} */
AnnaBridge 189:f392fc9709a3 59
AnnaBridge 189:f392fc9709a3 60 /*******************************************************************************
AnnaBridge 189:f392fc9709a3 61 * AES Definitions
AnnaBridge 189:f392fc9709a3 62 *******************************************************************************/
AnnaBridge 189:f392fc9709a3 63 /*!
AnnaBridge 189:f392fc9709a3 64 * @addtogroup ltc_driver_aes
AnnaBridge 189:f392fc9709a3 65 * @{
AnnaBridge 189:f392fc9709a3 66 */
AnnaBridge 189:f392fc9709a3 67 /*! AES block size in bytes */
AnnaBridge 189:f392fc9709a3 68 #define LTC_AES_BLOCK_SIZE 16
AnnaBridge 189:f392fc9709a3 69 /*! AES Input Vector size in bytes */
AnnaBridge 189:f392fc9709a3 70 #define LTC_AES_IV_SIZE 16
AnnaBridge 189:f392fc9709a3 71
AnnaBridge 189:f392fc9709a3 72 /*! @brief Type of AES key for ECB and CBC decrypt operations. */
AnnaBridge 189:f392fc9709a3 73 typedef enum _ltc_aes_key_t
AnnaBridge 189:f392fc9709a3 74 {
AnnaBridge 189:f392fc9709a3 75 kLTC_EncryptKey = 0U, /*!< Input key is an encrypt key */
AnnaBridge 189:f392fc9709a3 76 kLTC_DecryptKey = 1U, /*!< Input key is a decrypt key */
AnnaBridge 189:f392fc9709a3 77 } ltc_aes_key_t;
AnnaBridge 189:f392fc9709a3 78
AnnaBridge 189:f392fc9709a3 79 /*!
AnnaBridge 189:f392fc9709a3 80 *@}
AnnaBridge 189:f392fc9709a3 81 */
AnnaBridge 189:f392fc9709a3 82
AnnaBridge 189:f392fc9709a3 83 /*******************************************************************************
AnnaBridge 189:f392fc9709a3 84 * DES Definitions
AnnaBridge 189:f392fc9709a3 85 *******************************************************************************/
AnnaBridge 189:f392fc9709a3 86 /*!
AnnaBridge 189:f392fc9709a3 87 * @addtogroup ltc_driver_des
AnnaBridge 189:f392fc9709a3 88 * @{
AnnaBridge 189:f392fc9709a3 89 */
AnnaBridge 189:f392fc9709a3 90
AnnaBridge 189:f392fc9709a3 91 /*! @brief LTC DES key size - 64 bits. */
AnnaBridge 189:f392fc9709a3 92 #define LTC_DES_KEY_SIZE 8
AnnaBridge 189:f392fc9709a3 93
AnnaBridge 189:f392fc9709a3 94 /*! @brief LTC DES IV size - 8 bytes */
AnnaBridge 189:f392fc9709a3 95 #define LTC_DES_IV_SIZE 8
AnnaBridge 189:f392fc9709a3 96
AnnaBridge 189:f392fc9709a3 97 /*!
AnnaBridge 189:f392fc9709a3 98 *@}
AnnaBridge 189:f392fc9709a3 99 */
AnnaBridge 189:f392fc9709a3 100
AnnaBridge 189:f392fc9709a3 101 /*******************************************************************************
AnnaBridge 189:f392fc9709a3 102 * HASH Definitions
AnnaBridge 189:f392fc9709a3 103 ******************************************************************************/
AnnaBridge 189:f392fc9709a3 104 /*!
AnnaBridge 189:f392fc9709a3 105 * @addtogroup ltc_driver_hash
AnnaBridge 189:f392fc9709a3 106 * @{
AnnaBridge 189:f392fc9709a3 107 */
AnnaBridge 189:f392fc9709a3 108 /*! Supported cryptographic block cipher functions for HASH creation */
AnnaBridge 189:f392fc9709a3 109 typedef enum _ltc_hash_algo_t
AnnaBridge 189:f392fc9709a3 110 {
AnnaBridge 189:f392fc9709a3 111 kLTC_XcbcMac = 0, /*!< XCBC-MAC (AES engine) */
AnnaBridge 189:f392fc9709a3 112 kLTC_Cmac, /*!< CMAC (AES engine) */
AnnaBridge 189:f392fc9709a3 113 #if defined(FSL_FEATURE_LTC_HAS_SHA) && FSL_FEATURE_LTC_HAS_SHA
AnnaBridge 189:f392fc9709a3 114 kLTC_Sha1, /*!< SHA_1 (MDHA engine) */
AnnaBridge 189:f392fc9709a3 115 kLTC_Sha224, /*!< SHA_224 (MDHA engine) */
AnnaBridge 189:f392fc9709a3 116 kLTC_Sha256, /*!< SHA_256 (MDHA engine) */
AnnaBridge 189:f392fc9709a3 117 #endif /* FSL_FEATURE_LTC_HAS_SHA */
AnnaBridge 189:f392fc9709a3 118 } ltc_hash_algo_t;
AnnaBridge 189:f392fc9709a3 119
AnnaBridge 189:f392fc9709a3 120 /*! @brief LTC HASH Context size. */
AnnaBridge 189:f392fc9709a3 121 #if defined(FSL_FEATURE_LTC_HAS_SHA) && FSL_FEATURE_LTC_HAS_SHA
AnnaBridge 189:f392fc9709a3 122 #define LTC_HASH_CTX_SIZE 41
AnnaBridge 189:f392fc9709a3 123 #else
AnnaBridge 189:f392fc9709a3 124 #define LTC_HASH_CTX_SIZE 29
AnnaBridge 189:f392fc9709a3 125 #endif /* FSL_FEATURE_LTC_HAS_SHA */
AnnaBridge 189:f392fc9709a3 126
AnnaBridge 189:f392fc9709a3 127 /*! @brief Storage type used to save hash context. */
AnnaBridge 189:f392fc9709a3 128 typedef uint32_t ltc_hash_ctx_t[LTC_HASH_CTX_SIZE];
AnnaBridge 189:f392fc9709a3 129
AnnaBridge 189:f392fc9709a3 130 /*!
AnnaBridge 189:f392fc9709a3 131 *@}
AnnaBridge 189:f392fc9709a3 132 */
AnnaBridge 189:f392fc9709a3 133 /*******************************************************************************
AnnaBridge 189:f392fc9709a3 134 * PKHA Definitions
AnnaBridge 189:f392fc9709a3 135 ******************************************************************************/
AnnaBridge 189:f392fc9709a3 136 /*!
AnnaBridge 189:f392fc9709a3 137 * @addtogroup ltc_driver_pkha
AnnaBridge 189:f392fc9709a3 138 * @{
AnnaBridge 189:f392fc9709a3 139 */
AnnaBridge 189:f392fc9709a3 140 /*! PKHA ECC point structure */
AnnaBridge 189:f392fc9709a3 141 typedef struct _ltc_pkha_ecc_point_t
AnnaBridge 189:f392fc9709a3 142 {
AnnaBridge 189:f392fc9709a3 143 uint8_t *X; /*!< X coordinate (affine) */
AnnaBridge 189:f392fc9709a3 144 uint8_t *Y; /*!< Y coordinate (affine) */
AnnaBridge 189:f392fc9709a3 145 } ltc_pkha_ecc_point_t;
AnnaBridge 189:f392fc9709a3 146
AnnaBridge 189:f392fc9709a3 147 /*! @brief Use of timing equalized version of a PKHA function. */
AnnaBridge 189:f392fc9709a3 148 typedef enum _ltc_pkha_timing_t
AnnaBridge 189:f392fc9709a3 149 {
AnnaBridge 189:f392fc9709a3 150 kLTC_PKHA_NoTimingEqualized = 0U, /*!< Normal version of a PKHA operation */
AnnaBridge 189:f392fc9709a3 151 kLTC_PKHA_TimingEqualized = 1U /*!< Timing-equalized version of a PKHA operation */
AnnaBridge 189:f392fc9709a3 152 } ltc_pkha_timing_t;
AnnaBridge 189:f392fc9709a3 153
AnnaBridge 189:f392fc9709a3 154 /*! @brief Integer vs binary polynomial arithmetic selection. */
AnnaBridge 189:f392fc9709a3 155 typedef enum _ltc_pkha_f2m_t
AnnaBridge 189:f392fc9709a3 156 {
AnnaBridge 189:f392fc9709a3 157 kLTC_PKHA_IntegerArith = 0U, /*!< Use integer arithmetic */
AnnaBridge 189:f392fc9709a3 158 kLTC_PKHA_F2mArith = 1U /*!< Use binary polynomial arithmetic */
AnnaBridge 189:f392fc9709a3 159 } ltc_pkha_f2m_t;
AnnaBridge 189:f392fc9709a3 160
AnnaBridge 189:f392fc9709a3 161 /*! @brief Montgomery or normal PKHA input format. */
AnnaBridge 189:f392fc9709a3 162 typedef enum _ltc_pkha_montgomery_form_t
AnnaBridge 189:f392fc9709a3 163 {
AnnaBridge 189:f392fc9709a3 164 kLTC_PKHA_NormalValue = 0U, /*!< PKHA number is normal integer */
AnnaBridge 189:f392fc9709a3 165 kLTC_PKHA_MontgomeryFormat = 1U /*!< PKHA number is in montgomery format */
AnnaBridge 189:f392fc9709a3 166 } ltc_pkha_montgomery_form_t;
AnnaBridge 189:f392fc9709a3 167
AnnaBridge 189:f392fc9709a3 168 /*!
AnnaBridge 189:f392fc9709a3 169 *@}
AnnaBridge 189:f392fc9709a3 170 */
AnnaBridge 189:f392fc9709a3 171
AnnaBridge 189:f392fc9709a3 172 /*******************************************************************************
AnnaBridge 189:f392fc9709a3 173 * API
AnnaBridge 189:f392fc9709a3 174 ******************************************************************************/
AnnaBridge 189:f392fc9709a3 175
AnnaBridge 189:f392fc9709a3 176 #if defined(__cplusplus)
AnnaBridge 189:f392fc9709a3 177 extern "C" {
AnnaBridge 189:f392fc9709a3 178 #endif
AnnaBridge 189:f392fc9709a3 179
AnnaBridge 189:f392fc9709a3 180 /*!
AnnaBridge 189:f392fc9709a3 181 * @addtogroup ltc
AnnaBridge 189:f392fc9709a3 182 * @{
AnnaBridge 189:f392fc9709a3 183 */
AnnaBridge 189:f392fc9709a3 184
AnnaBridge 189:f392fc9709a3 185 /*!
AnnaBridge 189:f392fc9709a3 186 * @brief Initializes the LTC driver.
AnnaBridge 189:f392fc9709a3 187 * This function initializes the LTC driver.
AnnaBridge 189:f392fc9709a3 188 * @param base LTC peripheral base address
AnnaBridge 189:f392fc9709a3 189 */
AnnaBridge 189:f392fc9709a3 190 void LTC_Init(LTC_Type *base);
AnnaBridge 189:f392fc9709a3 191
AnnaBridge 189:f392fc9709a3 192 /*!
AnnaBridge 189:f392fc9709a3 193 * @brief Deinitializes the LTC driver.
AnnaBridge 189:f392fc9709a3 194 * This function deinitializes the LTC driver.
AnnaBridge 189:f392fc9709a3 195 * @param base LTC peripheral base address
AnnaBridge 189:f392fc9709a3 196 */
AnnaBridge 189:f392fc9709a3 197 void LTC_Deinit(LTC_Type *base);
AnnaBridge 189:f392fc9709a3 198
AnnaBridge 189:f392fc9709a3 199 #if defined(FSL_FEATURE_LTC_HAS_DPAMS) && FSL_FEATURE_LTC_HAS_DPAMS
AnnaBridge 189:f392fc9709a3 200 /*!
AnnaBridge 189:f392fc9709a3 201 * @brief Sets the DPA Mask Seed register.
AnnaBridge 189:f392fc9709a3 202 *
AnnaBridge 189:f392fc9709a3 203 * The DPA Mask Seed register reseeds the mask that provides resistance against DPA (differential power analysis)
AnnaBridge 189:f392fc9709a3 204 * attacks on AES or DES keys.
AnnaBridge 189:f392fc9709a3 205 *
AnnaBridge 189:f392fc9709a3 206 * Differential Power Analysis Mask (DPA) resistance uses a randomly changing mask that introduces
AnnaBridge 189:f392fc9709a3 207 * "noise" into the power consumed by the AES or DES. This reduces the signal-to-noise ratio that differential
AnnaBridge 189:f392fc9709a3 208 * power analysis attacks use to "guess" bits of the key. This randomly changing mask should be
AnnaBridge 189:f392fc9709a3 209 * seeded at POR, and continues to provide DPA resistance from that point on. However, to provide even more
AnnaBridge 189:f392fc9709a3 210 * DPA protection it is recommended that the DPA mask be reseeded after every 50,000 blocks have
AnnaBridge 189:f392fc9709a3 211 * been processed. At that time, software can opt to write a new seed (preferably obtained from an RNG)
AnnaBridge 189:f392fc9709a3 212 * into the DPA Mask Seed register (DPAMS), or software can opt to provide the new seed earlier or
AnnaBridge 189:f392fc9709a3 213 * later, or not at all. DPA resistance continues even if the DPA mask is never reseeded.
AnnaBridge 189:f392fc9709a3 214 *
AnnaBridge 189:f392fc9709a3 215 * @param base LTC peripheral base address
AnnaBridge 189:f392fc9709a3 216 * @param mask The DPA mask seed.
AnnaBridge 189:f392fc9709a3 217 */
AnnaBridge 189:f392fc9709a3 218 void LTC_SetDpaMaskSeed(LTC_Type *base, uint32_t mask);
AnnaBridge 189:f392fc9709a3 219 #endif /* FSL_FEATURE_LTC_HAS_DPAMS */
AnnaBridge 189:f392fc9709a3 220
AnnaBridge 189:f392fc9709a3 221 /*!
AnnaBridge 189:f392fc9709a3 222 *@}
AnnaBridge 189:f392fc9709a3 223 */
AnnaBridge 189:f392fc9709a3 224
AnnaBridge 189:f392fc9709a3 225 /*******************************************************************************
AnnaBridge 189:f392fc9709a3 226 * AES API
AnnaBridge 189:f392fc9709a3 227 ******************************************************************************/
AnnaBridge 189:f392fc9709a3 228
AnnaBridge 189:f392fc9709a3 229 /*!
AnnaBridge 189:f392fc9709a3 230 * @addtogroup ltc_driver_aes
AnnaBridge 189:f392fc9709a3 231 * @{
AnnaBridge 189:f392fc9709a3 232 */
AnnaBridge 189:f392fc9709a3 233
AnnaBridge 189:f392fc9709a3 234 /*!
AnnaBridge 189:f392fc9709a3 235 * @brief Transforms an AES encrypt key (forward AES) into the decrypt key (inverse AES).
AnnaBridge 189:f392fc9709a3 236 *
AnnaBridge 189:f392fc9709a3 237 * Transforms the AES encrypt key (forward AES) into the decrypt key (inverse AES).
AnnaBridge 189:f392fc9709a3 238 * The key derived by this function can be used as a direct load decrypt key
AnnaBridge 189:f392fc9709a3 239 * for AES ECB and CBC decryption operations (keyType argument).
AnnaBridge 189:f392fc9709a3 240 *
AnnaBridge 189:f392fc9709a3 241 * @param base LTC peripheral base address
AnnaBridge 189:f392fc9709a3 242 * @param encryptKey Input key for decrypt key transformation
AnnaBridge 189:f392fc9709a3 243 * @param[out] decryptKey Output key, the decrypt form of the AES key.
AnnaBridge 189:f392fc9709a3 244 * @param keySize Size of the input key and output key in bytes. Must be 16, 24, or 32.
AnnaBridge 189:f392fc9709a3 245 * @return Status from key generation operation
AnnaBridge 189:f392fc9709a3 246 */
AnnaBridge 189:f392fc9709a3 247 status_t LTC_AES_GenerateDecryptKey(LTC_Type *base, const uint8_t *encryptKey, uint8_t *decryptKey, uint32_t keySize);
AnnaBridge 189:f392fc9709a3 248
AnnaBridge 189:f392fc9709a3 249 /*!
AnnaBridge 189:f392fc9709a3 250 * @brief Encrypts AES using the ECB block mode.
AnnaBridge 189:f392fc9709a3 251 *
AnnaBridge 189:f392fc9709a3 252 * Encrypts AES using the ECB block mode.
AnnaBridge 189:f392fc9709a3 253 *
AnnaBridge 189:f392fc9709a3 254 * @param base LTC peripheral base address
AnnaBridge 189:f392fc9709a3 255 * @param plaintext Input plain text to encrypt
AnnaBridge 189:f392fc9709a3 256 * @param[out] ciphertext Output cipher text
AnnaBridge 189:f392fc9709a3 257 * @param size Size of input and output data in bytes. Must be multiple of 16 bytes.
AnnaBridge 189:f392fc9709a3 258 * @param key Input key to use for encryption
AnnaBridge 189:f392fc9709a3 259 * @param keySize Size of the input key, in bytes. Must be 16, 24, or 32.
AnnaBridge 189:f392fc9709a3 260 * @return Status from encrypt operation
AnnaBridge 189:f392fc9709a3 261 */
AnnaBridge 189:f392fc9709a3 262 status_t LTC_AES_EncryptEcb(
AnnaBridge 189:f392fc9709a3 263 LTC_Type *base, const uint8_t *plaintext, uint8_t *ciphertext, uint32_t size, const uint8_t *key, uint32_t keySize);
AnnaBridge 189:f392fc9709a3 264
AnnaBridge 189:f392fc9709a3 265 /*!
AnnaBridge 189:f392fc9709a3 266 * @brief Decrypts AES using ECB block mode.
AnnaBridge 189:f392fc9709a3 267 *
AnnaBridge 189:f392fc9709a3 268 * Decrypts AES using ECB block mode.
AnnaBridge 189:f392fc9709a3 269 *
AnnaBridge 189:f392fc9709a3 270 * @param base LTC peripheral base address
AnnaBridge 189:f392fc9709a3 271 * @param ciphertext Input cipher text to decrypt
AnnaBridge 189:f392fc9709a3 272 * @param[out] plaintext Output plain text
AnnaBridge 189:f392fc9709a3 273 * @param size Size of input and output data in bytes. Must be multiple of 16 bytes.
AnnaBridge 189:f392fc9709a3 274 * @param key Input key.
AnnaBridge 189:f392fc9709a3 275 * @param keySize Size of the input key, in bytes. Must be 16, 24, or 32.
AnnaBridge 189:f392fc9709a3 276 * @param keyType Input type of the key (allows to directly load decrypt key for AES ECB decrypt operation.)
AnnaBridge 189:f392fc9709a3 277 * @return Status from decrypt operation
AnnaBridge 189:f392fc9709a3 278 */
AnnaBridge 189:f392fc9709a3 279 status_t LTC_AES_DecryptEcb(LTC_Type *base,
AnnaBridge 189:f392fc9709a3 280 const uint8_t *ciphertext,
AnnaBridge 189:f392fc9709a3 281 uint8_t *plaintext,
AnnaBridge 189:f392fc9709a3 282 uint32_t size,
AnnaBridge 189:f392fc9709a3 283 const uint8_t *key,
AnnaBridge 189:f392fc9709a3 284 uint32_t keySize,
AnnaBridge 189:f392fc9709a3 285 ltc_aes_key_t keyType);
AnnaBridge 189:f392fc9709a3 286
AnnaBridge 189:f392fc9709a3 287 /*!
AnnaBridge 189:f392fc9709a3 288 * @brief Encrypts AES using CBC block mode.
AnnaBridge 189:f392fc9709a3 289 *
AnnaBridge 189:f392fc9709a3 290 * @param base LTC peripheral base address
AnnaBridge 189:f392fc9709a3 291 * @param plaintext Input plain text to encrypt
AnnaBridge 189:f392fc9709a3 292 * @param[out] ciphertext Output cipher text
AnnaBridge 189:f392fc9709a3 293 * @param size Size of input and output data in bytes. Must be multiple of 16 bytes.
AnnaBridge 189:f392fc9709a3 294 * @param iv Input initial vector to combine with the first input block.
AnnaBridge 189:f392fc9709a3 295 * @param key Input key to use for encryption
AnnaBridge 189:f392fc9709a3 296 * @param keySize Size of the input key, in bytes. Must be 16, 24, or 32.
AnnaBridge 189:f392fc9709a3 297 * @return Status from encrypt operation
AnnaBridge 189:f392fc9709a3 298 */
AnnaBridge 189:f392fc9709a3 299 status_t LTC_AES_EncryptCbc(LTC_Type *base,
AnnaBridge 189:f392fc9709a3 300 const uint8_t *plaintext,
AnnaBridge 189:f392fc9709a3 301 uint8_t *ciphertext,
AnnaBridge 189:f392fc9709a3 302 uint32_t size,
AnnaBridge 189:f392fc9709a3 303 const uint8_t iv[LTC_AES_IV_SIZE],
AnnaBridge 189:f392fc9709a3 304 const uint8_t *key,
AnnaBridge 189:f392fc9709a3 305 uint32_t keySize);
AnnaBridge 189:f392fc9709a3 306
AnnaBridge 189:f392fc9709a3 307 /*!
AnnaBridge 189:f392fc9709a3 308 * @brief Decrypts AES using CBC block mode.
AnnaBridge 189:f392fc9709a3 309 *
AnnaBridge 189:f392fc9709a3 310 * @param base LTC peripheral base address
AnnaBridge 189:f392fc9709a3 311 * @param ciphertext Input cipher text to decrypt
AnnaBridge 189:f392fc9709a3 312 * @param[out] plaintext Output plain text
AnnaBridge 189:f392fc9709a3 313 * @param size Size of input and output data in bytes. Must be multiple of 16 bytes.
AnnaBridge 189:f392fc9709a3 314 * @param iv Input initial vector to combine with the first input block.
AnnaBridge 189:f392fc9709a3 315 * @param key Input key to use for decryption
AnnaBridge 189:f392fc9709a3 316 * @param keySize Size of the input key, in bytes. Must be 16, 24, or 32.
AnnaBridge 189:f392fc9709a3 317 * @param keyType Input type of the key (allows to directly load decrypt key for AES CBC decrypt operation.)
AnnaBridge 189:f392fc9709a3 318 * @return Status from decrypt operation
AnnaBridge 189:f392fc9709a3 319 */
AnnaBridge 189:f392fc9709a3 320 status_t LTC_AES_DecryptCbc(LTC_Type *base,
AnnaBridge 189:f392fc9709a3 321 const uint8_t *ciphertext,
AnnaBridge 189:f392fc9709a3 322 uint8_t *plaintext,
AnnaBridge 189:f392fc9709a3 323 uint32_t size,
AnnaBridge 189:f392fc9709a3 324 const uint8_t iv[LTC_AES_IV_SIZE],
AnnaBridge 189:f392fc9709a3 325 const uint8_t *key,
AnnaBridge 189:f392fc9709a3 326 uint32_t keySize,
AnnaBridge 189:f392fc9709a3 327 ltc_aes_key_t keyType);
AnnaBridge 189:f392fc9709a3 328
AnnaBridge 189:f392fc9709a3 329 /*!
AnnaBridge 189:f392fc9709a3 330 * @brief Encrypts or decrypts AES using CTR block mode.
AnnaBridge 189:f392fc9709a3 331 *
AnnaBridge 189:f392fc9709a3 332 * Encrypts or decrypts AES using CTR block mode.
AnnaBridge 189:f392fc9709a3 333 * AES CTR mode uses only forward AES cipher and same algorithm for encryption and decryption.
AnnaBridge 189:f392fc9709a3 334 * The only difference between encryption and decryption is that, for encryption, the input argument
AnnaBridge 189:f392fc9709a3 335 * is plain text and the output argument is cipher text. For decryption, the input argument is cipher text
AnnaBridge 189:f392fc9709a3 336 * and the output argument is plain text.
AnnaBridge 189:f392fc9709a3 337 *
AnnaBridge 189:f392fc9709a3 338 * @param base LTC peripheral base address
AnnaBridge 189:f392fc9709a3 339 * @param input Input data for CTR block mode
AnnaBridge 189:f392fc9709a3 340 * @param[out] output Output data for CTR block mode
AnnaBridge 189:f392fc9709a3 341 * @param size Size of input and output data in bytes
AnnaBridge 189:f392fc9709a3 342 * @param[in,out] counter Input counter (updates on return)
AnnaBridge 189:f392fc9709a3 343 * @param key Input key to use for forward AES cipher
AnnaBridge 189:f392fc9709a3 344 * @param keySize Size of the input key, in bytes. Must be 16, 24, or 32.
AnnaBridge 189:f392fc9709a3 345 * @param[out] counterlast Output cipher of last counter, for chained CTR calls. NULL can be passed if chained calls are
AnnaBridge 189:f392fc9709a3 346 * not used.
AnnaBridge 189:f392fc9709a3 347 * @param[out] szLeft Output number of bytes in left unused in counterlast block. NULL can be passed if chained calls
AnnaBridge 189:f392fc9709a3 348 * are not used.
AnnaBridge 189:f392fc9709a3 349 * @return Status from encrypt operation
AnnaBridge 189:f392fc9709a3 350 */
AnnaBridge 189:f392fc9709a3 351 status_t LTC_AES_CryptCtr(LTC_Type *base,
AnnaBridge 189:f392fc9709a3 352 const uint8_t *input,
AnnaBridge 189:f392fc9709a3 353 uint8_t *output,
AnnaBridge 189:f392fc9709a3 354 uint32_t size,
AnnaBridge 189:f392fc9709a3 355 uint8_t counter[LTC_AES_BLOCK_SIZE],
AnnaBridge 189:f392fc9709a3 356 const uint8_t *key,
AnnaBridge 189:f392fc9709a3 357 uint32_t keySize,
AnnaBridge 189:f392fc9709a3 358 uint8_t counterlast[LTC_AES_BLOCK_SIZE],
AnnaBridge 189:f392fc9709a3 359 uint32_t *szLeft);
AnnaBridge 189:f392fc9709a3 360
AnnaBridge 189:f392fc9709a3 361 /*! AES CTR decrypt is mapped to the AES CTR generic operation */
AnnaBridge 189:f392fc9709a3 362 #define LTC_AES_DecryptCtr(base, input, output, size, counter, key, keySize, counterlast, szLeft) \
AnnaBridge 189:f392fc9709a3 363 LTC_AES_CryptCtr(base, input, output, size, counter, key, keySize, counterlast, szLeft)
AnnaBridge 189:f392fc9709a3 364
AnnaBridge 189:f392fc9709a3 365 /*! AES CTR encrypt is mapped to the AES CTR generic operation */
AnnaBridge 189:f392fc9709a3 366 #define LTC_AES_EncryptCtr(base, input, output, size, counter, key, keySize, counterlast, szLeft) \
AnnaBridge 189:f392fc9709a3 367 LTC_AES_CryptCtr(base, input, output, size, counter, key, keySize, counterlast, szLeft)
AnnaBridge 189:f392fc9709a3 368
AnnaBridge 189:f392fc9709a3 369 #if defined(FSL_FEATURE_LTC_HAS_GCM) && FSL_FEATURE_LTC_HAS_GCM
AnnaBridge 189:f392fc9709a3 370 /*!
AnnaBridge 189:f392fc9709a3 371 * @brief Encrypts AES and tags using GCM block mode.
AnnaBridge 189:f392fc9709a3 372 *
AnnaBridge 189:f392fc9709a3 373 * Encrypts AES and optionally tags using GCM block mode. If plaintext is NULL, only the GHASH is calculated and output
AnnaBridge 189:f392fc9709a3 374 * in the 'tag' field.
AnnaBridge 189:f392fc9709a3 375 *
AnnaBridge 189:f392fc9709a3 376 * @param base LTC peripheral base address
AnnaBridge 189:f392fc9709a3 377 * @param plaintext Input plain text to encrypt
AnnaBridge 189:f392fc9709a3 378 * @param[out] ciphertext Output cipher text.
AnnaBridge 189:f392fc9709a3 379 * @param size Size of input and output data in bytes
AnnaBridge 189:f392fc9709a3 380 * @param iv Input initial vector
AnnaBridge 189:f392fc9709a3 381 * @param ivSize Size of the IV
AnnaBridge 189:f392fc9709a3 382 * @param aad Input additional authentication data
AnnaBridge 189:f392fc9709a3 383 * @param aadSize Input size in bytes of AAD
AnnaBridge 189:f392fc9709a3 384 * @param key Input key to use for encryption
AnnaBridge 189:f392fc9709a3 385 * @param keySize Size of the input key, in bytes. Must be 16, 24, or 32.
AnnaBridge 189:f392fc9709a3 386 * @param[out] tag Output hash tag. Set to NULL to skip tag processing.
AnnaBridge 189:f392fc9709a3 387 * @param tagSize Input size of the tag to generate, in bytes. Must be 4,8,12,13,14,15 or 16.
AnnaBridge 189:f392fc9709a3 388 * @return Status from encrypt operation
AnnaBridge 189:f392fc9709a3 389 */
AnnaBridge 189:f392fc9709a3 390 status_t LTC_AES_EncryptTagGcm(LTC_Type *base,
AnnaBridge 189:f392fc9709a3 391 const uint8_t *plaintext,
AnnaBridge 189:f392fc9709a3 392 uint8_t *ciphertext,
AnnaBridge 189:f392fc9709a3 393 uint32_t size,
AnnaBridge 189:f392fc9709a3 394 const uint8_t *iv,
AnnaBridge 189:f392fc9709a3 395 uint32_t ivSize,
AnnaBridge 189:f392fc9709a3 396 const uint8_t *aad,
AnnaBridge 189:f392fc9709a3 397 uint32_t aadSize,
AnnaBridge 189:f392fc9709a3 398 const uint8_t *key,
AnnaBridge 189:f392fc9709a3 399 uint32_t keySize,
AnnaBridge 189:f392fc9709a3 400 uint8_t *tag,
AnnaBridge 189:f392fc9709a3 401 uint32_t tagSize);
AnnaBridge 189:f392fc9709a3 402
AnnaBridge 189:f392fc9709a3 403 /*!
AnnaBridge 189:f392fc9709a3 404 * @brief Decrypts AES and authenticates using GCM block mode.
AnnaBridge 189:f392fc9709a3 405 *
AnnaBridge 189:f392fc9709a3 406 * Decrypts AES and optionally authenticates using GCM block mode. If ciphertext is NULL, only the GHASH is calculated
AnnaBridge 189:f392fc9709a3 407 * and compared with the received GHASH in 'tag' field.
AnnaBridge 189:f392fc9709a3 408 *
AnnaBridge 189:f392fc9709a3 409 * @param base LTC peripheral base address
AnnaBridge 189:f392fc9709a3 410 * @param ciphertext Input cipher text to decrypt
AnnaBridge 189:f392fc9709a3 411 * @param[out] plaintext Output plain text.
AnnaBridge 189:f392fc9709a3 412 * @param size Size of input and output data in bytes
AnnaBridge 189:f392fc9709a3 413 * @param iv Input initial vector
AnnaBridge 189:f392fc9709a3 414 * @param ivSize Size of the IV
AnnaBridge 189:f392fc9709a3 415 * @param aad Input additional authentication data
AnnaBridge 189:f392fc9709a3 416 * @param aadSize Input size in bytes of AAD
AnnaBridge 189:f392fc9709a3 417 * @param key Input key to use for encryption
AnnaBridge 189:f392fc9709a3 418 * @param keySize Size of the input key, in bytes. Must be 16, 24, or 32.
AnnaBridge 189:f392fc9709a3 419 * @param tag Input hash tag to compare. Set to NULL to skip tag processing.
AnnaBridge 189:f392fc9709a3 420 * @param tagSize Input size of the tag, in bytes. Must be 4, 8, 12, 13, 14, 15, or 16.
AnnaBridge 189:f392fc9709a3 421 * @return Status from decrypt operation
AnnaBridge 189:f392fc9709a3 422 */
AnnaBridge 189:f392fc9709a3 423 status_t LTC_AES_DecryptTagGcm(LTC_Type *base,
AnnaBridge 189:f392fc9709a3 424 const uint8_t *ciphertext,
AnnaBridge 189:f392fc9709a3 425 uint8_t *plaintext,
AnnaBridge 189:f392fc9709a3 426 uint32_t size,
AnnaBridge 189:f392fc9709a3 427 const uint8_t *iv,
AnnaBridge 189:f392fc9709a3 428 uint32_t ivSize,
AnnaBridge 189:f392fc9709a3 429 const uint8_t *aad,
AnnaBridge 189:f392fc9709a3 430 uint32_t aadSize,
AnnaBridge 189:f392fc9709a3 431 const uint8_t *key,
AnnaBridge 189:f392fc9709a3 432 uint32_t keySize,
AnnaBridge 189:f392fc9709a3 433 const uint8_t *tag,
AnnaBridge 189:f392fc9709a3 434 uint32_t tagSize);
AnnaBridge 189:f392fc9709a3 435 #endif /* FSL_FEATURE_LTC_HAS_GCM */
AnnaBridge 189:f392fc9709a3 436
AnnaBridge 189:f392fc9709a3 437 /*!
AnnaBridge 189:f392fc9709a3 438 * @brief Encrypts AES and tags using CCM block mode.
AnnaBridge 189:f392fc9709a3 439 *
AnnaBridge 189:f392fc9709a3 440 * Encrypts AES and optionally tags using CCM block mode.
AnnaBridge 189:f392fc9709a3 441 *
AnnaBridge 189:f392fc9709a3 442 * @param base LTC peripheral base address
AnnaBridge 189:f392fc9709a3 443 * @param plaintext Input plain text to encrypt
AnnaBridge 189:f392fc9709a3 444 * @param[out] ciphertext Output cipher text.
AnnaBridge 189:f392fc9709a3 445 * @param size Size of input and output data in bytes. Zero means authentication only.
AnnaBridge 189:f392fc9709a3 446 * @param iv Nonce
AnnaBridge 189:f392fc9709a3 447 * @param ivSize Length of the Nonce in bytes. Must be 7, 8, 9, 10, 11, 12, or 13.
AnnaBridge 189:f392fc9709a3 448 * @param aad Input additional authentication data. Can be NULL if aadSize is zero.
AnnaBridge 189:f392fc9709a3 449 * @param aadSize Input size in bytes of AAD. Zero means data mode only (authentication skipped).
AnnaBridge 189:f392fc9709a3 450 * @param key Input key to use for encryption
AnnaBridge 189:f392fc9709a3 451 * @param keySize Size of the input key, in bytes. Must be 16, 24, or 32.
AnnaBridge 189:f392fc9709a3 452 * @param[out] tag Generated output tag. Set to NULL to skip tag processing.
AnnaBridge 189:f392fc9709a3 453 * @param tagSize Input size of the tag to generate, in bytes. Must be 4, 6, 8, 10, 12, 14, or 16.
AnnaBridge 189:f392fc9709a3 454 * @return Status from encrypt operation
AnnaBridge 189:f392fc9709a3 455 */
AnnaBridge 189:f392fc9709a3 456 status_t LTC_AES_EncryptTagCcm(LTC_Type *base,
AnnaBridge 189:f392fc9709a3 457 const uint8_t *plaintext,
AnnaBridge 189:f392fc9709a3 458 uint8_t *ciphertext,
AnnaBridge 189:f392fc9709a3 459 uint32_t size,
AnnaBridge 189:f392fc9709a3 460 const uint8_t *iv,
AnnaBridge 189:f392fc9709a3 461 uint32_t ivSize,
AnnaBridge 189:f392fc9709a3 462 const uint8_t *aad,
AnnaBridge 189:f392fc9709a3 463 uint32_t aadSize,
AnnaBridge 189:f392fc9709a3 464 const uint8_t *key,
AnnaBridge 189:f392fc9709a3 465 uint32_t keySize,
AnnaBridge 189:f392fc9709a3 466 uint8_t *tag,
AnnaBridge 189:f392fc9709a3 467 uint32_t tagSize);
AnnaBridge 189:f392fc9709a3 468
AnnaBridge 189:f392fc9709a3 469 /*!
AnnaBridge 189:f392fc9709a3 470 * @brief Decrypts AES and authenticates using CCM block mode.
AnnaBridge 189:f392fc9709a3 471 *
AnnaBridge 189:f392fc9709a3 472 * Decrypts AES and optionally authenticates using CCM block mode.
AnnaBridge 189:f392fc9709a3 473 *
AnnaBridge 189:f392fc9709a3 474 * @param base LTC peripheral base address
AnnaBridge 189:f392fc9709a3 475 * @param ciphertext Input cipher text to decrypt
AnnaBridge 189:f392fc9709a3 476 * @param[out] plaintext Output plain text.
AnnaBridge 189:f392fc9709a3 477 * @param size Size of input and output data in bytes. Zero means authentication only.
AnnaBridge 189:f392fc9709a3 478 * @param iv Nonce
AnnaBridge 189:f392fc9709a3 479 * @param ivSize Length of the Nonce in bytes. Must be 7, 8, 9, 10, 11, 12, or 13.
AnnaBridge 189:f392fc9709a3 480 * @param aad Input additional authentication data. Can be NULL if aadSize is zero.
AnnaBridge 189:f392fc9709a3 481 * @param aadSize Input size in bytes of AAD. Zero means data mode only (authentication skipped).
AnnaBridge 189:f392fc9709a3 482 * @param key Input key to use for decryption
AnnaBridge 189:f392fc9709a3 483 * @param keySize Size of the input key, in bytes. Must be 16, 24, or 32.
AnnaBridge 189:f392fc9709a3 484 * @param tag Received tag. Set to NULL to skip tag processing.
AnnaBridge 189:f392fc9709a3 485 * @param tagSize Input size of the received tag to compare with the computed tag, in bytes. Must be 4, 6, 8, 10, 12,
AnnaBridge 189:f392fc9709a3 486 * 14, or 16.
AnnaBridge 189:f392fc9709a3 487 * @return Status from decrypt operation
AnnaBridge 189:f392fc9709a3 488 */
AnnaBridge 189:f392fc9709a3 489 status_t LTC_AES_DecryptTagCcm(LTC_Type *base,
AnnaBridge 189:f392fc9709a3 490 const uint8_t *ciphertext,
AnnaBridge 189:f392fc9709a3 491 uint8_t *plaintext,
AnnaBridge 189:f392fc9709a3 492 uint32_t size,
AnnaBridge 189:f392fc9709a3 493 const uint8_t *iv,
AnnaBridge 189:f392fc9709a3 494 uint32_t ivSize,
AnnaBridge 189:f392fc9709a3 495 const uint8_t *aad,
AnnaBridge 189:f392fc9709a3 496 uint32_t aadSize,
AnnaBridge 189:f392fc9709a3 497 const uint8_t *key,
AnnaBridge 189:f392fc9709a3 498 uint32_t keySize,
AnnaBridge 189:f392fc9709a3 499 const uint8_t *tag,
AnnaBridge 189:f392fc9709a3 500 uint32_t tagSize);
AnnaBridge 189:f392fc9709a3 501
AnnaBridge 189:f392fc9709a3 502 /*!
AnnaBridge 189:f392fc9709a3 503 *@}
AnnaBridge 189:f392fc9709a3 504 */
AnnaBridge 189:f392fc9709a3 505
AnnaBridge 189:f392fc9709a3 506 /*******************************************************************************
AnnaBridge 189:f392fc9709a3 507 * DES API
AnnaBridge 189:f392fc9709a3 508 ******************************************************************************/
AnnaBridge 189:f392fc9709a3 509 /*!
AnnaBridge 189:f392fc9709a3 510 * @addtogroup ltc_driver_des
AnnaBridge 189:f392fc9709a3 511 * @{
AnnaBridge 189:f392fc9709a3 512 */
AnnaBridge 189:f392fc9709a3 513 /*!
AnnaBridge 189:f392fc9709a3 514 * @brief Encrypts DES using ECB block mode.
AnnaBridge 189:f392fc9709a3 515 *
AnnaBridge 189:f392fc9709a3 516 * Encrypts DES using ECB block mode.
AnnaBridge 189:f392fc9709a3 517 *
AnnaBridge 189:f392fc9709a3 518 * @param base LTC peripheral base address
AnnaBridge 189:f392fc9709a3 519 * @param plaintext Input plaintext to encrypt
AnnaBridge 189:f392fc9709a3 520 * @param[out] ciphertext Output ciphertext
AnnaBridge 189:f392fc9709a3 521 * @param size Size of input and output data in bytes. Must be multiple of 8 bytes.
AnnaBridge 189:f392fc9709a3 522 * @param key Input key to use for encryption
AnnaBridge 189:f392fc9709a3 523 * @return Status from encrypt/decrypt operation
AnnaBridge 189:f392fc9709a3 524 */
AnnaBridge 189:f392fc9709a3 525 status_t LTC_DES_EncryptEcb(
AnnaBridge 189:f392fc9709a3 526 LTC_Type *base, const uint8_t *plaintext, uint8_t *ciphertext, uint32_t size, const uint8_t key[LTC_DES_KEY_SIZE]);
AnnaBridge 189:f392fc9709a3 527
AnnaBridge 189:f392fc9709a3 528 /*!
AnnaBridge 189:f392fc9709a3 529 * @brief Decrypts DES using ECB block mode.
AnnaBridge 189:f392fc9709a3 530 *
AnnaBridge 189:f392fc9709a3 531 * Decrypts DES using ECB block mode.
AnnaBridge 189:f392fc9709a3 532 *
AnnaBridge 189:f392fc9709a3 533 * @param base LTC peripheral base address
AnnaBridge 189:f392fc9709a3 534 * @param ciphertext Input ciphertext to decrypt
AnnaBridge 189:f392fc9709a3 535 * @param[out] plaintext Output plaintext
AnnaBridge 189:f392fc9709a3 536 * @param size Size of input and output data in bytes. Must be multiple of 8 bytes.
AnnaBridge 189:f392fc9709a3 537 * @param key Input key to use for decryption
AnnaBridge 189:f392fc9709a3 538 * @return Status from encrypt/decrypt operation
AnnaBridge 189:f392fc9709a3 539 */
AnnaBridge 189:f392fc9709a3 540 status_t LTC_DES_DecryptEcb(
AnnaBridge 189:f392fc9709a3 541 LTC_Type *base, const uint8_t *ciphertext, uint8_t *plaintext, uint32_t size, const uint8_t key[LTC_DES_KEY_SIZE]);
AnnaBridge 189:f392fc9709a3 542
AnnaBridge 189:f392fc9709a3 543 /*!
AnnaBridge 189:f392fc9709a3 544 * @brief Encrypts DES using CBC block mode.
AnnaBridge 189:f392fc9709a3 545 *
AnnaBridge 189:f392fc9709a3 546 * Encrypts DES using CBC block mode.
AnnaBridge 189:f392fc9709a3 547 *
AnnaBridge 189:f392fc9709a3 548 * @param base LTC peripheral base address
AnnaBridge 189:f392fc9709a3 549 * @param plaintext Input plaintext to encrypt
AnnaBridge 189:f392fc9709a3 550 * @param[out] ciphertext Ouput ciphertext
AnnaBridge 189:f392fc9709a3 551 * @param size Size of input and output data in bytes
AnnaBridge 189:f392fc9709a3 552 * @param iv Input initial vector to combine with the first plaintext block.
AnnaBridge 189:f392fc9709a3 553 * The iv does not need to be secret, but it must be unpredictable.
AnnaBridge 189:f392fc9709a3 554 * @param key Input key to use for encryption
AnnaBridge 189:f392fc9709a3 555 * @return Status from encrypt/decrypt operation
AnnaBridge 189:f392fc9709a3 556 */
AnnaBridge 189:f392fc9709a3 557 status_t LTC_DES_EncryptCbc(LTC_Type *base,
AnnaBridge 189:f392fc9709a3 558 const uint8_t *plaintext,
AnnaBridge 189:f392fc9709a3 559 uint8_t *ciphertext,
AnnaBridge 189:f392fc9709a3 560 uint32_t size,
AnnaBridge 189:f392fc9709a3 561 const uint8_t iv[LTC_DES_IV_SIZE],
AnnaBridge 189:f392fc9709a3 562 const uint8_t key[LTC_DES_KEY_SIZE]);
AnnaBridge 189:f392fc9709a3 563
AnnaBridge 189:f392fc9709a3 564 /*!
AnnaBridge 189:f392fc9709a3 565 * @brief Decrypts DES using CBC block mode.
AnnaBridge 189:f392fc9709a3 566 *
AnnaBridge 189:f392fc9709a3 567 * Decrypts DES using CBC block mode.
AnnaBridge 189:f392fc9709a3 568 *
AnnaBridge 189:f392fc9709a3 569 * @param base LTC peripheral base address
AnnaBridge 189:f392fc9709a3 570 * @param ciphertext Input ciphertext to decrypt
AnnaBridge 189:f392fc9709a3 571 * @param[out] plaintext Output plaintext
AnnaBridge 189:f392fc9709a3 572 * @param size Size of input data in bytes
AnnaBridge 189:f392fc9709a3 573 * @param iv Input initial vector to combine with the first plaintext block.
AnnaBridge 189:f392fc9709a3 574 * The iv does not need to be secret, but it must be unpredictable.
AnnaBridge 189:f392fc9709a3 575 * @param key Input key to use for decryption
AnnaBridge 189:f392fc9709a3 576 * @return Status from encrypt/decrypt operation
AnnaBridge 189:f392fc9709a3 577 */
AnnaBridge 189:f392fc9709a3 578 status_t LTC_DES_DecryptCbc(LTC_Type *base,
AnnaBridge 189:f392fc9709a3 579 const uint8_t *ciphertext,
AnnaBridge 189:f392fc9709a3 580 uint8_t *plaintext,
AnnaBridge 189:f392fc9709a3 581 uint32_t size,
AnnaBridge 189:f392fc9709a3 582 const uint8_t iv[LTC_DES_IV_SIZE],
AnnaBridge 189:f392fc9709a3 583 const uint8_t key[LTC_DES_KEY_SIZE]);
AnnaBridge 189:f392fc9709a3 584
AnnaBridge 189:f392fc9709a3 585 /*!
AnnaBridge 189:f392fc9709a3 586 * @brief Encrypts DES using CFB block mode.
AnnaBridge 189:f392fc9709a3 587 *
AnnaBridge 189:f392fc9709a3 588 * Encrypts DES using CFB block mode.
AnnaBridge 189:f392fc9709a3 589 *
AnnaBridge 189:f392fc9709a3 590 * @param base LTC peripheral base address
AnnaBridge 189:f392fc9709a3 591 * @param plaintext Input plaintext to encrypt
AnnaBridge 189:f392fc9709a3 592 * @param size Size of input data in bytes
AnnaBridge 189:f392fc9709a3 593 * @param iv Input initial block.
AnnaBridge 189:f392fc9709a3 594 * @param key Input key to use for encryption
AnnaBridge 189:f392fc9709a3 595 * @param[out] ciphertext Output ciphertext
AnnaBridge 189:f392fc9709a3 596 * @return Status from encrypt/decrypt operation
AnnaBridge 189:f392fc9709a3 597 */
AnnaBridge 189:f392fc9709a3 598 status_t LTC_DES_EncryptCfb(LTC_Type *base,
AnnaBridge 189:f392fc9709a3 599 const uint8_t *plaintext,
AnnaBridge 189:f392fc9709a3 600 uint8_t *ciphertext,
AnnaBridge 189:f392fc9709a3 601 uint32_t size,
AnnaBridge 189:f392fc9709a3 602 const uint8_t iv[LTC_DES_IV_SIZE],
AnnaBridge 189:f392fc9709a3 603 const uint8_t key[LTC_DES_KEY_SIZE]);
AnnaBridge 189:f392fc9709a3 604
AnnaBridge 189:f392fc9709a3 605 /*!
AnnaBridge 189:f392fc9709a3 606 * @brief Decrypts DES using CFB block mode.
AnnaBridge 189:f392fc9709a3 607 *
AnnaBridge 189:f392fc9709a3 608 * Decrypts DES using CFB block mode.
AnnaBridge 189:f392fc9709a3 609 *
AnnaBridge 189:f392fc9709a3 610 * @param base LTC peripheral base address
AnnaBridge 189:f392fc9709a3 611 * @param ciphertext Input ciphertext to decrypt
AnnaBridge 189:f392fc9709a3 612 * @param[out] plaintext Output plaintext
AnnaBridge 189:f392fc9709a3 613 * @param size Size of input and output data in bytes
AnnaBridge 189:f392fc9709a3 614 * @param iv Input initial block.
AnnaBridge 189:f392fc9709a3 615 * @param key Input key to use for decryption
AnnaBridge 189:f392fc9709a3 616 * @return Status from encrypt/decrypt operation
AnnaBridge 189:f392fc9709a3 617 */
AnnaBridge 189:f392fc9709a3 618 status_t LTC_DES_DecryptCfb(LTC_Type *base,
AnnaBridge 189:f392fc9709a3 619 const uint8_t *ciphertext,
AnnaBridge 189:f392fc9709a3 620 uint8_t *plaintext,
AnnaBridge 189:f392fc9709a3 621 uint32_t size,
AnnaBridge 189:f392fc9709a3 622 const uint8_t iv[LTC_DES_IV_SIZE],
AnnaBridge 189:f392fc9709a3 623 const uint8_t key[LTC_DES_KEY_SIZE]);
AnnaBridge 189:f392fc9709a3 624
AnnaBridge 189:f392fc9709a3 625 /*!
AnnaBridge 189:f392fc9709a3 626 * @brief Encrypts DES using OFB block mode.
AnnaBridge 189:f392fc9709a3 627 *
AnnaBridge 189:f392fc9709a3 628 * Encrypts DES using OFB block mode.
AnnaBridge 189:f392fc9709a3 629 *
AnnaBridge 189:f392fc9709a3 630 * @param base LTC peripheral base address
AnnaBridge 189:f392fc9709a3 631 * @param plaintext Input plaintext to encrypt
AnnaBridge 189:f392fc9709a3 632 * @param[out] ciphertext Output ciphertext
AnnaBridge 189:f392fc9709a3 633 * @param size Size of input and output data in bytes
AnnaBridge 189:f392fc9709a3 634 * @param iv Input unique input vector. The OFB mode requires that the IV be unique
AnnaBridge 189:f392fc9709a3 635 * for each execution of the mode under the given key.
AnnaBridge 189:f392fc9709a3 636 * @param key Input key to use for encryption
AnnaBridge 189:f392fc9709a3 637 * @return Status from encrypt/decrypt operation
AnnaBridge 189:f392fc9709a3 638 */
AnnaBridge 189:f392fc9709a3 639 status_t LTC_DES_EncryptOfb(LTC_Type *base,
AnnaBridge 189:f392fc9709a3 640 const uint8_t *plaintext,
AnnaBridge 189:f392fc9709a3 641 uint8_t *ciphertext,
AnnaBridge 189:f392fc9709a3 642 uint32_t size,
AnnaBridge 189:f392fc9709a3 643 const uint8_t iv[LTC_DES_IV_SIZE],
AnnaBridge 189:f392fc9709a3 644 const uint8_t key[LTC_DES_KEY_SIZE]);
AnnaBridge 189:f392fc9709a3 645
AnnaBridge 189:f392fc9709a3 646 /*!
AnnaBridge 189:f392fc9709a3 647 * @brief Decrypts DES using OFB block mode.
AnnaBridge 189:f392fc9709a3 648 *
AnnaBridge 189:f392fc9709a3 649 * Decrypts DES using OFB block mode.
AnnaBridge 189:f392fc9709a3 650 *
AnnaBridge 189:f392fc9709a3 651 * @param base LTC peripheral base address
AnnaBridge 189:f392fc9709a3 652 * @param ciphertext Input ciphertext to decrypt
AnnaBridge 189:f392fc9709a3 653 * @param[out] plaintext Output plaintext
AnnaBridge 189:f392fc9709a3 654 * @param size Size of input and output data in bytes. Must be multiple of 8 bytes.
AnnaBridge 189:f392fc9709a3 655 * @param iv Input unique input vector. The OFB mode requires that the IV be unique
AnnaBridge 189:f392fc9709a3 656 * for each execution of the mode under the given key.
AnnaBridge 189:f392fc9709a3 657 * @param key Input key to use for decryption
AnnaBridge 189:f392fc9709a3 658 * @return Status from encrypt/decrypt operation
AnnaBridge 189:f392fc9709a3 659 */
AnnaBridge 189:f392fc9709a3 660 status_t LTC_DES_DecryptOfb(LTC_Type *base,
AnnaBridge 189:f392fc9709a3 661 const uint8_t *ciphertext,
AnnaBridge 189:f392fc9709a3 662 uint8_t *plaintext,
AnnaBridge 189:f392fc9709a3 663 uint32_t size,
AnnaBridge 189:f392fc9709a3 664 const uint8_t iv[LTC_DES_IV_SIZE],
AnnaBridge 189:f392fc9709a3 665 const uint8_t key[LTC_DES_KEY_SIZE]);
AnnaBridge 189:f392fc9709a3 666
AnnaBridge 189:f392fc9709a3 667 /*!
AnnaBridge 189:f392fc9709a3 668 * @brief Encrypts triple DES using ECB block mode with two keys.
AnnaBridge 189:f392fc9709a3 669 *
AnnaBridge 189:f392fc9709a3 670 * Encrypts triple DES using ECB block mode with two keys.
AnnaBridge 189:f392fc9709a3 671 *
AnnaBridge 189:f392fc9709a3 672 * @param base LTC peripheral base address
AnnaBridge 189:f392fc9709a3 673 * @param plaintext Input plaintext to encrypt
AnnaBridge 189:f392fc9709a3 674 * @param[out] ciphertext Output ciphertext
AnnaBridge 189:f392fc9709a3 675 * @param size Size of input and output data in bytes. Must be multiple of 8 bytes.
AnnaBridge 189:f392fc9709a3 676 * @param key1 First input key for key bundle
AnnaBridge 189:f392fc9709a3 677 * @param key2 Second input key for key bundle
AnnaBridge 189:f392fc9709a3 678 * @return Status from encrypt/decrypt operation
AnnaBridge 189:f392fc9709a3 679 */
AnnaBridge 189:f392fc9709a3 680 status_t LTC_DES2_EncryptEcb(LTC_Type *base,
AnnaBridge 189:f392fc9709a3 681 const uint8_t *plaintext,
AnnaBridge 189:f392fc9709a3 682 uint8_t *ciphertext,
AnnaBridge 189:f392fc9709a3 683 uint32_t size,
AnnaBridge 189:f392fc9709a3 684 const uint8_t key1[LTC_DES_KEY_SIZE],
AnnaBridge 189:f392fc9709a3 685 const uint8_t key2[LTC_DES_KEY_SIZE]);
AnnaBridge 189:f392fc9709a3 686
AnnaBridge 189:f392fc9709a3 687 /*!
AnnaBridge 189:f392fc9709a3 688 * @brief Decrypts triple DES using ECB block mode with two keys.
AnnaBridge 189:f392fc9709a3 689 *
AnnaBridge 189:f392fc9709a3 690 * Decrypts triple DES using ECB block mode with two keys.
AnnaBridge 189:f392fc9709a3 691 *
AnnaBridge 189:f392fc9709a3 692 * @param base LTC peripheral base address
AnnaBridge 189:f392fc9709a3 693 * @param ciphertext Input ciphertext to decrypt
AnnaBridge 189:f392fc9709a3 694 * @param[out] plaintext Output plaintext
AnnaBridge 189:f392fc9709a3 695 * @param size Size of input and output data in bytes. Must be multiple of 8 bytes.
AnnaBridge 189:f392fc9709a3 696 * @param key1 First input key for key bundle
AnnaBridge 189:f392fc9709a3 697 * @param key2 Second input key for key bundle
AnnaBridge 189:f392fc9709a3 698 * @return Status from encrypt/decrypt operation
AnnaBridge 189:f392fc9709a3 699 */
AnnaBridge 189:f392fc9709a3 700 status_t LTC_DES2_DecryptEcb(LTC_Type *base,
AnnaBridge 189:f392fc9709a3 701 const uint8_t *ciphertext,
AnnaBridge 189:f392fc9709a3 702 uint8_t *plaintext,
AnnaBridge 189:f392fc9709a3 703 uint32_t size,
AnnaBridge 189:f392fc9709a3 704 const uint8_t key1[LTC_DES_KEY_SIZE],
AnnaBridge 189:f392fc9709a3 705 const uint8_t key2[LTC_DES_KEY_SIZE]);
AnnaBridge 189:f392fc9709a3 706
AnnaBridge 189:f392fc9709a3 707 /*!
AnnaBridge 189:f392fc9709a3 708 * @brief Encrypts triple DES using CBC block mode with two keys.
AnnaBridge 189:f392fc9709a3 709 *
AnnaBridge 189:f392fc9709a3 710 * Encrypts triple DES using CBC block mode with two keys.
AnnaBridge 189:f392fc9709a3 711 *
AnnaBridge 189:f392fc9709a3 712 * @param base LTC peripheral base address
AnnaBridge 189:f392fc9709a3 713 * @param plaintext Input plaintext to encrypt
AnnaBridge 189:f392fc9709a3 714 * @param[out] ciphertext Output ciphertext
AnnaBridge 189:f392fc9709a3 715 * @param size Size of input and output data in bytes
AnnaBridge 189:f392fc9709a3 716 * @param iv Input initial vector to combine with the first plaintext block.
AnnaBridge 189:f392fc9709a3 717 * The iv does not need to be secret, but it must be unpredictable.
AnnaBridge 189:f392fc9709a3 718 * @param key1 First input key for key bundle
AnnaBridge 189:f392fc9709a3 719 * @param key2 Second input key for key bundle
AnnaBridge 189:f392fc9709a3 720 * @return Status from encrypt/decrypt operation
AnnaBridge 189:f392fc9709a3 721 */
AnnaBridge 189:f392fc9709a3 722 status_t LTC_DES2_EncryptCbc(LTC_Type *base,
AnnaBridge 189:f392fc9709a3 723 const uint8_t *plaintext,
AnnaBridge 189:f392fc9709a3 724 uint8_t *ciphertext,
AnnaBridge 189:f392fc9709a3 725 uint32_t size,
AnnaBridge 189:f392fc9709a3 726 const uint8_t iv[LTC_DES_IV_SIZE],
AnnaBridge 189:f392fc9709a3 727 const uint8_t key1[LTC_DES_KEY_SIZE],
AnnaBridge 189:f392fc9709a3 728 const uint8_t key2[LTC_DES_KEY_SIZE]);
AnnaBridge 189:f392fc9709a3 729
AnnaBridge 189:f392fc9709a3 730 /*!
AnnaBridge 189:f392fc9709a3 731 * @brief Decrypts triple DES using CBC block mode with two keys.
AnnaBridge 189:f392fc9709a3 732 *
AnnaBridge 189:f392fc9709a3 733 * Decrypts triple DES using CBC block mode with two keys.
AnnaBridge 189:f392fc9709a3 734 *
AnnaBridge 189:f392fc9709a3 735 * @param base LTC peripheral base address
AnnaBridge 189:f392fc9709a3 736 * @param ciphertext Input ciphertext to decrypt
AnnaBridge 189:f392fc9709a3 737 * @param[out] plaintext Output plaintext
AnnaBridge 189:f392fc9709a3 738 * @param size Size of input and output data in bytes
AnnaBridge 189:f392fc9709a3 739 * @param iv Input initial vector to combine with the first plaintext block.
AnnaBridge 189:f392fc9709a3 740 * The iv does not need to be secret, but it must be unpredictable.
AnnaBridge 189:f392fc9709a3 741 * @param key1 First input key for key bundle
AnnaBridge 189:f392fc9709a3 742 * @param key2 Second input key for key bundle
AnnaBridge 189:f392fc9709a3 743 * @return Status from encrypt/decrypt operation
AnnaBridge 189:f392fc9709a3 744 */
AnnaBridge 189:f392fc9709a3 745 status_t LTC_DES2_DecryptCbc(LTC_Type *base,
AnnaBridge 189:f392fc9709a3 746 const uint8_t *ciphertext,
AnnaBridge 189:f392fc9709a3 747 uint8_t *plaintext,
AnnaBridge 189:f392fc9709a3 748 uint32_t size,
AnnaBridge 189:f392fc9709a3 749 const uint8_t iv[LTC_DES_IV_SIZE],
AnnaBridge 189:f392fc9709a3 750 const uint8_t key1[LTC_DES_KEY_SIZE],
AnnaBridge 189:f392fc9709a3 751 const uint8_t key2[LTC_DES_KEY_SIZE]);
AnnaBridge 189:f392fc9709a3 752
AnnaBridge 189:f392fc9709a3 753 /*!
AnnaBridge 189:f392fc9709a3 754 * @brief Encrypts triple DES using CFB block mode with two keys.
AnnaBridge 189:f392fc9709a3 755 *
AnnaBridge 189:f392fc9709a3 756 * Encrypts triple DES using CFB block mode with two keys.
AnnaBridge 189:f392fc9709a3 757 *
AnnaBridge 189:f392fc9709a3 758 * @param base LTC peripheral base address
AnnaBridge 189:f392fc9709a3 759 * @param plaintext Input plaintext to encrypt
AnnaBridge 189:f392fc9709a3 760 * @param[out] ciphertext Output ciphertext
AnnaBridge 189:f392fc9709a3 761 * @param size Size of input and output data in bytes
AnnaBridge 189:f392fc9709a3 762 * @param iv Input initial block.
AnnaBridge 189:f392fc9709a3 763 * @param key1 First input key for key bundle
AnnaBridge 189:f392fc9709a3 764 * @param key2 Second input key for key bundle
AnnaBridge 189:f392fc9709a3 765 * @return Status from encrypt/decrypt operation
AnnaBridge 189:f392fc9709a3 766 */
AnnaBridge 189:f392fc9709a3 767 status_t LTC_DES2_EncryptCfb(LTC_Type *base,
AnnaBridge 189:f392fc9709a3 768 const uint8_t *plaintext,
AnnaBridge 189:f392fc9709a3 769 uint8_t *ciphertext,
AnnaBridge 189:f392fc9709a3 770 uint32_t size,
AnnaBridge 189:f392fc9709a3 771 const uint8_t iv[LTC_DES_IV_SIZE],
AnnaBridge 189:f392fc9709a3 772 const uint8_t key1[LTC_DES_KEY_SIZE],
AnnaBridge 189:f392fc9709a3 773 const uint8_t key2[LTC_DES_KEY_SIZE]);
AnnaBridge 189:f392fc9709a3 774
AnnaBridge 189:f392fc9709a3 775 /*!
AnnaBridge 189:f392fc9709a3 776 * @brief Decrypts triple DES using CFB block mode with two keys.
AnnaBridge 189:f392fc9709a3 777 *
AnnaBridge 189:f392fc9709a3 778 * Decrypts triple DES using CFB block mode with two keys.
AnnaBridge 189:f392fc9709a3 779 *
AnnaBridge 189:f392fc9709a3 780 * @param base LTC peripheral base address
AnnaBridge 189:f392fc9709a3 781 * @param ciphertext Input ciphertext to decrypt
AnnaBridge 189:f392fc9709a3 782 * @param[out] plaintext Output plaintext
AnnaBridge 189:f392fc9709a3 783 * @param size Size of input and output data in bytes
AnnaBridge 189:f392fc9709a3 784 * @param iv Input initial block.
AnnaBridge 189:f392fc9709a3 785 * @param key1 First input key for key bundle
AnnaBridge 189:f392fc9709a3 786 * @param key2 Second input key for key bundle
AnnaBridge 189:f392fc9709a3 787 * @return Status from encrypt/decrypt operation
AnnaBridge 189:f392fc9709a3 788 */
AnnaBridge 189:f392fc9709a3 789 status_t LTC_DES2_DecryptCfb(LTC_Type *base,
AnnaBridge 189:f392fc9709a3 790 const uint8_t *ciphertext,
AnnaBridge 189:f392fc9709a3 791 uint8_t *plaintext,
AnnaBridge 189:f392fc9709a3 792 uint32_t size,
AnnaBridge 189:f392fc9709a3 793 const uint8_t iv[LTC_DES_IV_SIZE],
AnnaBridge 189:f392fc9709a3 794 const uint8_t key1[LTC_DES_KEY_SIZE],
AnnaBridge 189:f392fc9709a3 795 const uint8_t key2[LTC_DES_KEY_SIZE]);
AnnaBridge 189:f392fc9709a3 796
AnnaBridge 189:f392fc9709a3 797 /*!
AnnaBridge 189:f392fc9709a3 798 * @brief Encrypts triple DES using OFB block mode with two keys.
AnnaBridge 189:f392fc9709a3 799 *
AnnaBridge 189:f392fc9709a3 800 * Encrypts triple DES using OFB block mode with two keys.
AnnaBridge 189:f392fc9709a3 801 *
AnnaBridge 189:f392fc9709a3 802 * @param base LTC peripheral base address
AnnaBridge 189:f392fc9709a3 803 * @param plaintext Input plaintext to encrypt
AnnaBridge 189:f392fc9709a3 804 * @param[out] ciphertext Output ciphertext
AnnaBridge 189:f392fc9709a3 805 * @param size Size of input and output data in bytes
AnnaBridge 189:f392fc9709a3 806 * @param iv Input unique input vector. The OFB mode requires that the IV be unique
AnnaBridge 189:f392fc9709a3 807 * for each execution of the mode under the given key.
AnnaBridge 189:f392fc9709a3 808 * @param key1 First input key for key bundle
AnnaBridge 189:f392fc9709a3 809 * @param key2 Second input key for key bundle
AnnaBridge 189:f392fc9709a3 810 * @return Status from encrypt/decrypt operation
AnnaBridge 189:f392fc9709a3 811 */
AnnaBridge 189:f392fc9709a3 812 status_t LTC_DES2_EncryptOfb(LTC_Type *base,
AnnaBridge 189:f392fc9709a3 813 const uint8_t *plaintext,
AnnaBridge 189:f392fc9709a3 814 uint8_t *ciphertext,
AnnaBridge 189:f392fc9709a3 815 uint32_t size,
AnnaBridge 189:f392fc9709a3 816 const uint8_t iv[LTC_DES_IV_SIZE],
AnnaBridge 189:f392fc9709a3 817 const uint8_t key1[LTC_DES_KEY_SIZE],
AnnaBridge 189:f392fc9709a3 818 const uint8_t key2[LTC_DES_KEY_SIZE]);
AnnaBridge 189:f392fc9709a3 819
AnnaBridge 189:f392fc9709a3 820 /*!
AnnaBridge 189:f392fc9709a3 821 * @brief Decrypts triple DES using OFB block mode with two keys.
AnnaBridge 189:f392fc9709a3 822 *
AnnaBridge 189:f392fc9709a3 823 * Decrypts triple DES using OFB block mode with two keys.
AnnaBridge 189:f392fc9709a3 824 *
AnnaBridge 189:f392fc9709a3 825 * @param base LTC peripheral base address
AnnaBridge 189:f392fc9709a3 826 * @param ciphertext Input ciphertext to decrypt
AnnaBridge 189:f392fc9709a3 827 * @param[out] plaintext Output plaintext
AnnaBridge 189:f392fc9709a3 828 * @param size Size of input and output data in bytes
AnnaBridge 189:f392fc9709a3 829 * @param iv Input unique input vector. The OFB mode requires that the IV be unique
AnnaBridge 189:f392fc9709a3 830 * for each execution of the mode under the given key.
AnnaBridge 189:f392fc9709a3 831 * @param key1 First input key for key bundle
AnnaBridge 189:f392fc9709a3 832 * @param key2 Second input key for key bundle
AnnaBridge 189:f392fc9709a3 833 * @return Status from encrypt/decrypt operation
AnnaBridge 189:f392fc9709a3 834 */
AnnaBridge 189:f392fc9709a3 835 status_t LTC_DES2_DecryptOfb(LTC_Type *base,
AnnaBridge 189:f392fc9709a3 836 const uint8_t *ciphertext,
AnnaBridge 189:f392fc9709a3 837 uint8_t *plaintext,
AnnaBridge 189:f392fc9709a3 838 uint32_t size,
AnnaBridge 189:f392fc9709a3 839 const uint8_t iv[LTC_DES_IV_SIZE],
AnnaBridge 189:f392fc9709a3 840 const uint8_t key1[LTC_DES_KEY_SIZE],
AnnaBridge 189:f392fc9709a3 841 const uint8_t key2[LTC_DES_KEY_SIZE]);
AnnaBridge 189:f392fc9709a3 842
AnnaBridge 189:f392fc9709a3 843 /*!
AnnaBridge 189:f392fc9709a3 844 * @brief Encrypts triple DES using ECB block mode with three keys.
AnnaBridge 189:f392fc9709a3 845 *
AnnaBridge 189:f392fc9709a3 846 * Encrypts triple DES using ECB block mode with three keys.
AnnaBridge 189:f392fc9709a3 847 *
AnnaBridge 189:f392fc9709a3 848 * @param base LTC peripheral base address
AnnaBridge 189:f392fc9709a3 849 * @param plaintext Input plaintext to encrypt
AnnaBridge 189:f392fc9709a3 850 * @param[out] ciphertext Output ciphertext
AnnaBridge 189:f392fc9709a3 851 * @param size Size of input and output data in bytes. Must be multiple of 8 bytes.
AnnaBridge 189:f392fc9709a3 852 * @param key1 First input key for key bundle
AnnaBridge 189:f392fc9709a3 853 * @param key2 Second input key for key bundle
AnnaBridge 189:f392fc9709a3 854 * @param key3 Third input key for key bundle
AnnaBridge 189:f392fc9709a3 855 * @return Status from encrypt/decrypt operation
AnnaBridge 189:f392fc9709a3 856 */
AnnaBridge 189:f392fc9709a3 857 status_t LTC_DES3_EncryptEcb(LTC_Type *base,
AnnaBridge 189:f392fc9709a3 858 const uint8_t *plaintext,
AnnaBridge 189:f392fc9709a3 859 uint8_t *ciphertext,
AnnaBridge 189:f392fc9709a3 860 uint32_t size,
AnnaBridge 189:f392fc9709a3 861 const uint8_t key1[LTC_DES_KEY_SIZE],
AnnaBridge 189:f392fc9709a3 862 const uint8_t key2[LTC_DES_KEY_SIZE],
AnnaBridge 189:f392fc9709a3 863 const uint8_t key3[LTC_DES_KEY_SIZE]);
AnnaBridge 189:f392fc9709a3 864
AnnaBridge 189:f392fc9709a3 865 /*!
AnnaBridge 189:f392fc9709a3 866 * @brief Decrypts triple DES using ECB block mode with three keys.
AnnaBridge 189:f392fc9709a3 867 *
AnnaBridge 189:f392fc9709a3 868 * Decrypts triple DES using ECB block mode with three keys.
AnnaBridge 189:f392fc9709a3 869 *
AnnaBridge 189:f392fc9709a3 870 * @param base LTC peripheral base address
AnnaBridge 189:f392fc9709a3 871 * @param ciphertext Input ciphertext to decrypt
AnnaBridge 189:f392fc9709a3 872 * @param[out] plaintext Output plaintext
AnnaBridge 189:f392fc9709a3 873 * @param size Size of input and output data in bytes. Must be multiple of 8 bytes.
AnnaBridge 189:f392fc9709a3 874 * @param key1 First input key for key bundle
AnnaBridge 189:f392fc9709a3 875 * @param key2 Second input key for key bundle
AnnaBridge 189:f392fc9709a3 876 * @param key3 Third input key for key bundle
AnnaBridge 189:f392fc9709a3 877 * @return Status from encrypt/decrypt operation
AnnaBridge 189:f392fc9709a3 878 */
AnnaBridge 189:f392fc9709a3 879 status_t LTC_DES3_DecryptEcb(LTC_Type *base,
AnnaBridge 189:f392fc9709a3 880 const uint8_t *ciphertext,
AnnaBridge 189:f392fc9709a3 881 uint8_t *plaintext,
AnnaBridge 189:f392fc9709a3 882 uint32_t size,
AnnaBridge 189:f392fc9709a3 883 const uint8_t key1[LTC_DES_KEY_SIZE],
AnnaBridge 189:f392fc9709a3 884 const uint8_t key2[LTC_DES_KEY_SIZE],
AnnaBridge 189:f392fc9709a3 885 const uint8_t key3[LTC_DES_KEY_SIZE]);
AnnaBridge 189:f392fc9709a3 886
AnnaBridge 189:f392fc9709a3 887 /*!
AnnaBridge 189:f392fc9709a3 888 * @brief Encrypts triple DES using CBC block mode with three keys.
AnnaBridge 189:f392fc9709a3 889 *
AnnaBridge 189:f392fc9709a3 890 * Encrypts triple DES using CBC block mode with three keys.
AnnaBridge 189:f392fc9709a3 891 *
AnnaBridge 189:f392fc9709a3 892 * @param base LTC peripheral base address
AnnaBridge 189:f392fc9709a3 893 * @param plaintext Input plaintext to encrypt
AnnaBridge 189:f392fc9709a3 894 * @param[out] ciphertext Output ciphertext
AnnaBridge 189:f392fc9709a3 895 * @param size Size of input data in bytes
AnnaBridge 189:f392fc9709a3 896 * @param iv Input initial vector to combine with the first plaintext block.
AnnaBridge 189:f392fc9709a3 897 * The iv does not need to be secret, but it must be unpredictable.
AnnaBridge 189:f392fc9709a3 898 * @param key1 First input key for key bundle
AnnaBridge 189:f392fc9709a3 899 * @param key2 Second input key for key bundle
AnnaBridge 189:f392fc9709a3 900 * @param key3 Third input key for key bundle
AnnaBridge 189:f392fc9709a3 901 * @return Status from encrypt/decrypt operation
AnnaBridge 189:f392fc9709a3 902 */
AnnaBridge 189:f392fc9709a3 903 status_t LTC_DES3_EncryptCbc(LTC_Type *base,
AnnaBridge 189:f392fc9709a3 904 const uint8_t *plaintext,
AnnaBridge 189:f392fc9709a3 905 uint8_t *ciphertext,
AnnaBridge 189:f392fc9709a3 906 uint32_t size,
AnnaBridge 189:f392fc9709a3 907 const uint8_t iv[LTC_DES_IV_SIZE],
AnnaBridge 189:f392fc9709a3 908 const uint8_t key1[LTC_DES_KEY_SIZE],
AnnaBridge 189:f392fc9709a3 909 const uint8_t key2[LTC_DES_KEY_SIZE],
AnnaBridge 189:f392fc9709a3 910 const uint8_t key3[LTC_DES_KEY_SIZE]);
AnnaBridge 189:f392fc9709a3 911
AnnaBridge 189:f392fc9709a3 912 /*!
AnnaBridge 189:f392fc9709a3 913 * @brief Decrypts triple DES using CBC block mode with three keys.
AnnaBridge 189:f392fc9709a3 914 *
AnnaBridge 189:f392fc9709a3 915 * Decrypts triple DES using CBC block mode with three keys.
AnnaBridge 189:f392fc9709a3 916 *
AnnaBridge 189:f392fc9709a3 917 * @param base LTC peripheral base address
AnnaBridge 189:f392fc9709a3 918 * @param ciphertext Input ciphertext to decrypt
AnnaBridge 189:f392fc9709a3 919 * @param[out] plaintext Output plaintext
AnnaBridge 189:f392fc9709a3 920 * @param size Size of input and output data in bytes
AnnaBridge 189:f392fc9709a3 921 * @param iv Input initial vector to combine with the first plaintext block.
AnnaBridge 189:f392fc9709a3 922 * The iv does not need to be secret, but it must be unpredictable.
AnnaBridge 189:f392fc9709a3 923 * @param key1 First input key for key bundle
AnnaBridge 189:f392fc9709a3 924 * @param key2 Second input key for key bundle
AnnaBridge 189:f392fc9709a3 925 * @param key3 Third input key for key bundle
AnnaBridge 189:f392fc9709a3 926 * @return Status from encrypt/decrypt operation
AnnaBridge 189:f392fc9709a3 927 */
AnnaBridge 189:f392fc9709a3 928 status_t LTC_DES3_DecryptCbc(LTC_Type *base,
AnnaBridge 189:f392fc9709a3 929 const uint8_t *ciphertext,
AnnaBridge 189:f392fc9709a3 930 uint8_t *plaintext,
AnnaBridge 189:f392fc9709a3 931 uint32_t size,
AnnaBridge 189:f392fc9709a3 932 const uint8_t iv[LTC_DES_IV_SIZE],
AnnaBridge 189:f392fc9709a3 933 const uint8_t key1[LTC_DES_KEY_SIZE],
AnnaBridge 189:f392fc9709a3 934 const uint8_t key2[LTC_DES_KEY_SIZE],
AnnaBridge 189:f392fc9709a3 935 const uint8_t key3[LTC_DES_KEY_SIZE]);
AnnaBridge 189:f392fc9709a3 936
AnnaBridge 189:f392fc9709a3 937 /*!
AnnaBridge 189:f392fc9709a3 938 * @brief Encrypts triple DES using CFB block mode with three keys.
AnnaBridge 189:f392fc9709a3 939 *
AnnaBridge 189:f392fc9709a3 940 * Encrypts triple DES using CFB block mode with three keys.
AnnaBridge 189:f392fc9709a3 941 *
AnnaBridge 189:f392fc9709a3 942 * @param base LTC peripheral base address
AnnaBridge 189:f392fc9709a3 943 * @param plaintext Input plaintext to encrypt
AnnaBridge 189:f392fc9709a3 944 * @param[out] ciphertext Output ciphertext
AnnaBridge 189:f392fc9709a3 945 * @param size Size of input and ouput data in bytes
AnnaBridge 189:f392fc9709a3 946 * @param iv Input initial block.
AnnaBridge 189:f392fc9709a3 947 * @param key1 First input key for key bundle
AnnaBridge 189:f392fc9709a3 948 * @param key2 Second input key for key bundle
AnnaBridge 189:f392fc9709a3 949 * @param key3 Third input key for key bundle
AnnaBridge 189:f392fc9709a3 950 * @return Status from encrypt/decrypt operation
AnnaBridge 189:f392fc9709a3 951 */
AnnaBridge 189:f392fc9709a3 952 status_t LTC_DES3_EncryptCfb(LTC_Type *base,
AnnaBridge 189:f392fc9709a3 953 const uint8_t *plaintext,
AnnaBridge 189:f392fc9709a3 954 uint8_t *ciphertext,
AnnaBridge 189:f392fc9709a3 955 uint32_t size,
AnnaBridge 189:f392fc9709a3 956 const uint8_t iv[LTC_DES_IV_SIZE],
AnnaBridge 189:f392fc9709a3 957 const uint8_t key1[LTC_DES_KEY_SIZE],
AnnaBridge 189:f392fc9709a3 958 const uint8_t key2[LTC_DES_KEY_SIZE],
AnnaBridge 189:f392fc9709a3 959 const uint8_t key3[LTC_DES_KEY_SIZE]);
AnnaBridge 189:f392fc9709a3 960
AnnaBridge 189:f392fc9709a3 961 /*!
AnnaBridge 189:f392fc9709a3 962 * @brief Decrypts triple DES using CFB block mode with three keys.
AnnaBridge 189:f392fc9709a3 963 *
AnnaBridge 189:f392fc9709a3 964 * Decrypts triple DES using CFB block mode with three keys.
AnnaBridge 189:f392fc9709a3 965 *
AnnaBridge 189:f392fc9709a3 966 * @param base LTC peripheral base address
AnnaBridge 189:f392fc9709a3 967 * @param ciphertext Input ciphertext to decrypt
AnnaBridge 189:f392fc9709a3 968 * @param[out] plaintext Output plaintext
AnnaBridge 189:f392fc9709a3 969 * @param size Size of input data in bytes
AnnaBridge 189:f392fc9709a3 970 * @param iv Input initial block.
AnnaBridge 189:f392fc9709a3 971 * @param key1 First input key for key bundle
AnnaBridge 189:f392fc9709a3 972 * @param key2 Second input key for key bundle
AnnaBridge 189:f392fc9709a3 973 * @param key3 Third input key for key bundle
AnnaBridge 189:f392fc9709a3 974 * @return Status from encrypt/decrypt operation
AnnaBridge 189:f392fc9709a3 975 */
AnnaBridge 189:f392fc9709a3 976 status_t LTC_DES3_DecryptCfb(LTC_Type *base,
AnnaBridge 189:f392fc9709a3 977 const uint8_t *ciphertext,
AnnaBridge 189:f392fc9709a3 978 uint8_t *plaintext,
AnnaBridge 189:f392fc9709a3 979 uint32_t size,
AnnaBridge 189:f392fc9709a3 980 const uint8_t iv[LTC_DES_IV_SIZE],
AnnaBridge 189:f392fc9709a3 981 const uint8_t key1[LTC_DES_KEY_SIZE],
AnnaBridge 189:f392fc9709a3 982 const uint8_t key2[LTC_DES_KEY_SIZE],
AnnaBridge 189:f392fc9709a3 983 const uint8_t key3[LTC_DES_KEY_SIZE]);
AnnaBridge 189:f392fc9709a3 984
AnnaBridge 189:f392fc9709a3 985 /*!
AnnaBridge 189:f392fc9709a3 986 * @brief Encrypts triple DES using OFB block mode with three keys.
AnnaBridge 189:f392fc9709a3 987 *
AnnaBridge 189:f392fc9709a3 988 * Encrypts triple DES using OFB block mode with three keys.
AnnaBridge 189:f392fc9709a3 989 *
AnnaBridge 189:f392fc9709a3 990 * @param base LTC peripheral base address
AnnaBridge 189:f392fc9709a3 991 * @param plaintext Input plaintext to encrypt
AnnaBridge 189:f392fc9709a3 992 * @param[out] ciphertext Output ciphertext
AnnaBridge 189:f392fc9709a3 993 * @param size Size of input and output data in bytes
AnnaBridge 189:f392fc9709a3 994 * @param iv Input unique input vector. The OFB mode requires that the IV be unique
AnnaBridge 189:f392fc9709a3 995 * for each execution of the mode under the given key.
AnnaBridge 189:f392fc9709a3 996 * @param key1 First input key for key bundle
AnnaBridge 189:f392fc9709a3 997 * @param key2 Second input key for key bundle
AnnaBridge 189:f392fc9709a3 998 * @param key3 Third input key for key bundle
AnnaBridge 189:f392fc9709a3 999 * @return Status from encrypt/decrypt operation
AnnaBridge 189:f392fc9709a3 1000 */
AnnaBridge 189:f392fc9709a3 1001 status_t LTC_DES3_EncryptOfb(LTC_Type *base,
AnnaBridge 189:f392fc9709a3 1002 const uint8_t *plaintext,
AnnaBridge 189:f392fc9709a3 1003 uint8_t *ciphertext,
AnnaBridge 189:f392fc9709a3 1004 uint32_t size,
AnnaBridge 189:f392fc9709a3 1005 const uint8_t iv[LTC_DES_IV_SIZE],
AnnaBridge 189:f392fc9709a3 1006 const uint8_t key1[LTC_DES_KEY_SIZE],
AnnaBridge 189:f392fc9709a3 1007 const uint8_t key2[LTC_DES_KEY_SIZE],
AnnaBridge 189:f392fc9709a3 1008 const uint8_t key3[LTC_DES_KEY_SIZE]);
AnnaBridge 189:f392fc9709a3 1009
AnnaBridge 189:f392fc9709a3 1010 /*!
AnnaBridge 189:f392fc9709a3 1011 * @brief Decrypts triple DES using OFB block mode with three keys.
AnnaBridge 189:f392fc9709a3 1012 *
AnnaBridge 189:f392fc9709a3 1013 * Decrypts triple DES using OFB block mode with three keys.
AnnaBridge 189:f392fc9709a3 1014 *
AnnaBridge 189:f392fc9709a3 1015 * @param base LTC peripheral base address
AnnaBridge 189:f392fc9709a3 1016 * @param ciphertext Input ciphertext to decrypt
AnnaBridge 189:f392fc9709a3 1017 * @param[out] plaintext Output plaintext
AnnaBridge 189:f392fc9709a3 1018 * @param size Size of input and output data in bytes
AnnaBridge 189:f392fc9709a3 1019 * @param iv Input unique input vector. The OFB mode requires that the IV be unique
AnnaBridge 189:f392fc9709a3 1020 * for each execution of the mode under the given key.
AnnaBridge 189:f392fc9709a3 1021 * @param key1 First input key for key bundle
AnnaBridge 189:f392fc9709a3 1022 * @param key2 Second input key for key bundle
AnnaBridge 189:f392fc9709a3 1023 * @param key3 Third input key for key bundle
AnnaBridge 189:f392fc9709a3 1024 * @return Status from encrypt/decrypt operation
AnnaBridge 189:f392fc9709a3 1025 */
AnnaBridge 189:f392fc9709a3 1026 status_t LTC_DES3_DecryptOfb(LTC_Type *base,
AnnaBridge 189:f392fc9709a3 1027 const uint8_t *ciphertext,
AnnaBridge 189:f392fc9709a3 1028 uint8_t *plaintext,
AnnaBridge 189:f392fc9709a3 1029 uint32_t size,
AnnaBridge 189:f392fc9709a3 1030 const uint8_t iv[LTC_DES_IV_SIZE],
AnnaBridge 189:f392fc9709a3 1031 const uint8_t key1[LTC_DES_KEY_SIZE],
AnnaBridge 189:f392fc9709a3 1032 const uint8_t key2[LTC_DES_KEY_SIZE],
AnnaBridge 189:f392fc9709a3 1033 const uint8_t key3[LTC_DES_KEY_SIZE]);
AnnaBridge 189:f392fc9709a3 1034
AnnaBridge 189:f392fc9709a3 1035 /*!
AnnaBridge 189:f392fc9709a3 1036 *@}
AnnaBridge 189:f392fc9709a3 1037 */
AnnaBridge 189:f392fc9709a3 1038
AnnaBridge 189:f392fc9709a3 1039 /*******************************************************************************
AnnaBridge 189:f392fc9709a3 1040 * HASH API
AnnaBridge 189:f392fc9709a3 1041 ******************************************************************************/
AnnaBridge 189:f392fc9709a3 1042
AnnaBridge 189:f392fc9709a3 1043 /*!
AnnaBridge 189:f392fc9709a3 1044 * @addtogroup ltc_driver_hash
AnnaBridge 189:f392fc9709a3 1045 * @{
AnnaBridge 189:f392fc9709a3 1046 */
AnnaBridge 189:f392fc9709a3 1047 /*!
AnnaBridge 189:f392fc9709a3 1048 * @brief Initialize HASH context
AnnaBridge 189:f392fc9709a3 1049 *
AnnaBridge 189:f392fc9709a3 1050 * This function initialize the HASH.
AnnaBridge 189:f392fc9709a3 1051 * Key shall be supplied if the underlaying algoritm is AES XCBC-MAC or CMAC.
AnnaBridge 189:f392fc9709a3 1052 * Key shall be NULL if the underlaying algoritm is SHA.
AnnaBridge 189:f392fc9709a3 1053 *
AnnaBridge 189:f392fc9709a3 1054 * For XCBC-MAC, the key length must be 16. For CMAC, the key length can be
AnnaBridge 189:f392fc9709a3 1055 * the AES key lengths supported by AES engine. For MDHA the key length argument
AnnaBridge 189:f392fc9709a3 1056 * is ignored.
AnnaBridge 189:f392fc9709a3 1057 *
AnnaBridge 189:f392fc9709a3 1058 * @param base LTC peripheral base address
AnnaBridge 189:f392fc9709a3 1059 * @param[out] ctx Output hash context
AnnaBridge 189:f392fc9709a3 1060 * @param algo Underlaying algorithm to use for hash computation.
AnnaBridge 189:f392fc9709a3 1061 * @param key Input key (NULL if underlaying algorithm is SHA)
AnnaBridge 189:f392fc9709a3 1062 * @param keySize Size of input key in bytes
AnnaBridge 189:f392fc9709a3 1063 * @return Status of initialization
AnnaBridge 189:f392fc9709a3 1064 */
AnnaBridge 189:f392fc9709a3 1065 status_t LTC_HASH_Init(LTC_Type *base, ltc_hash_ctx_t *ctx, ltc_hash_algo_t algo, const uint8_t *key, uint32_t keySize);
AnnaBridge 189:f392fc9709a3 1066
AnnaBridge 189:f392fc9709a3 1067 /*!
AnnaBridge 189:f392fc9709a3 1068 * @brief Add data to current HASH
AnnaBridge 189:f392fc9709a3 1069 *
AnnaBridge 189:f392fc9709a3 1070 * Add data to current HASH. This can be called repeatedly with an arbitrary amount of data to be
AnnaBridge 189:f392fc9709a3 1071 * hashed.
AnnaBridge 189:f392fc9709a3 1072 *
AnnaBridge 189:f392fc9709a3 1073 * @param[in,out] ctx HASH context
AnnaBridge 189:f392fc9709a3 1074 * @param input Input data
AnnaBridge 189:f392fc9709a3 1075 * @param inputSize Size of input data in bytes
AnnaBridge 189:f392fc9709a3 1076 * @return Status of the hash update operation
AnnaBridge 189:f392fc9709a3 1077 */
AnnaBridge 189:f392fc9709a3 1078 status_t LTC_HASH_Update(ltc_hash_ctx_t *ctx, const uint8_t *input, uint32_t inputSize);
AnnaBridge 189:f392fc9709a3 1079
AnnaBridge 189:f392fc9709a3 1080 /*!
AnnaBridge 189:f392fc9709a3 1081 * @brief Finalize hashing
AnnaBridge 189:f392fc9709a3 1082 *
AnnaBridge 189:f392fc9709a3 1083 * Outputs the final hash and erases the context.
AnnaBridge 189:f392fc9709a3 1084 *
AnnaBridge 189:f392fc9709a3 1085 * @param[in,out] ctx Input hash context
AnnaBridge 189:f392fc9709a3 1086 * @param[out] output Output hash data
AnnaBridge 189:f392fc9709a3 1087 * @param[out] outputSize Output parameter storing the size of the output hash in bytes
AnnaBridge 189:f392fc9709a3 1088 * @return Status of the hash finish operation
AnnaBridge 189:f392fc9709a3 1089 */
AnnaBridge 189:f392fc9709a3 1090 status_t LTC_HASH_Finish(ltc_hash_ctx_t *ctx, uint8_t *output, uint32_t *outputSize);
AnnaBridge 189:f392fc9709a3 1091
AnnaBridge 189:f392fc9709a3 1092 /*!
AnnaBridge 189:f392fc9709a3 1093 * @brief Create HASH on given data
AnnaBridge 189:f392fc9709a3 1094 *
AnnaBridge 189:f392fc9709a3 1095 * Perform the full keyed HASH in one function call.
AnnaBridge 189:f392fc9709a3 1096 *
AnnaBridge 189:f392fc9709a3 1097 * @param base LTC peripheral base address
AnnaBridge 189:f392fc9709a3 1098 * @param algo Block cipher algorithm to use for CMAC creation
AnnaBridge 189:f392fc9709a3 1099 * @param input Input data
AnnaBridge 189:f392fc9709a3 1100 * @param inputSize Size of input data in bytes
AnnaBridge 189:f392fc9709a3 1101 * @param key Input key
AnnaBridge 189:f392fc9709a3 1102 * @param keySize Size of input key in bytes
AnnaBridge 189:f392fc9709a3 1103 * @param[out] output Output hash data
AnnaBridge 189:f392fc9709a3 1104 * @param[out] outputSize Output parameter storing the size of the output hash in bytes
AnnaBridge 189:f392fc9709a3 1105 * @return Status of the one call hash operation.
AnnaBridge 189:f392fc9709a3 1106 */
AnnaBridge 189:f392fc9709a3 1107 status_t LTC_HASH(LTC_Type *base,
AnnaBridge 189:f392fc9709a3 1108 ltc_hash_algo_t algo,
AnnaBridge 189:f392fc9709a3 1109 const uint8_t *input,
AnnaBridge 189:f392fc9709a3 1110 uint32_t inputSize,
AnnaBridge 189:f392fc9709a3 1111 const uint8_t *key,
AnnaBridge 189:f392fc9709a3 1112 uint32_t keySize,
AnnaBridge 189:f392fc9709a3 1113 uint8_t *output,
AnnaBridge 189:f392fc9709a3 1114 uint32_t *outputSize);
AnnaBridge 189:f392fc9709a3 1115 /*!
AnnaBridge 189:f392fc9709a3 1116 *@}
AnnaBridge 189:f392fc9709a3 1117 */
AnnaBridge 189:f392fc9709a3 1118
AnnaBridge 189:f392fc9709a3 1119 /*******************************************************************************
AnnaBridge 189:f392fc9709a3 1120 * PKHA API
AnnaBridge 189:f392fc9709a3 1121 ******************************************************************************/
AnnaBridge 189:f392fc9709a3 1122 /*!
AnnaBridge 189:f392fc9709a3 1123 * @addtogroup ltc_driver_pkha
AnnaBridge 189:f392fc9709a3 1124 * @{
AnnaBridge 189:f392fc9709a3 1125 */
AnnaBridge 189:f392fc9709a3 1126
AnnaBridge 189:f392fc9709a3 1127 /*!
AnnaBridge 189:f392fc9709a3 1128 * @brief Compare two PKHA big numbers.
AnnaBridge 189:f392fc9709a3 1129 *
AnnaBridge 189:f392fc9709a3 1130 * Compare two PKHA big numbers. Return 1 for a > b, -1 for a < b and 0 if they are same.
AnnaBridge 189:f392fc9709a3 1131 * PKHA big number is lsbyte first. Thus the comparison starts at msbyte which is the last member of tested arrays.
AnnaBridge 189:f392fc9709a3 1132 *
AnnaBridge 189:f392fc9709a3 1133 * @param a First integer represented as an array of bytes, lsbyte first.
AnnaBridge 189:f392fc9709a3 1134 * @param sizeA Size in bytes of the first integer.
AnnaBridge 189:f392fc9709a3 1135 * @param b Second integer represented as an array of bytes, lsbyte first.
AnnaBridge 189:f392fc9709a3 1136 * @param sizeB Size in bytes of the second integer.
AnnaBridge 189:f392fc9709a3 1137 * @return 1 if a > b.
AnnaBridge 189:f392fc9709a3 1138 * @return -1 if a < b.
AnnaBridge 189:f392fc9709a3 1139 * @return 0 if a = b.
AnnaBridge 189:f392fc9709a3 1140 */
AnnaBridge 189:f392fc9709a3 1141 int LTC_PKHA_CompareBigNum(const uint8_t *a, size_t sizeA, const uint8_t *b, size_t sizeB);
AnnaBridge 189:f392fc9709a3 1142
AnnaBridge 189:f392fc9709a3 1143 /*!
AnnaBridge 189:f392fc9709a3 1144 * @brief Converts from integer to Montgomery format.
AnnaBridge 189:f392fc9709a3 1145 *
AnnaBridge 189:f392fc9709a3 1146 * This function computes R2 mod N and optionally converts A or B into Montgomery format of A or B.
AnnaBridge 189:f392fc9709a3 1147 *
AnnaBridge 189:f392fc9709a3 1148 * @param base LTC peripheral base address
AnnaBridge 189:f392fc9709a3 1149 * @param N modulus
AnnaBridge 189:f392fc9709a3 1150 * @param sizeN size of N in bytes
AnnaBridge 189:f392fc9709a3 1151 * @param[in,out] A The first input in non-Montgomery format. Output Montgomery format of the first input.
AnnaBridge 189:f392fc9709a3 1152 * @param[in,out] sizeA pointer to size variable. On input it holds size of input A in bytes. On output it holds size of
AnnaBridge 189:f392fc9709a3 1153 * Montgomery format of A in bytes.
AnnaBridge 189:f392fc9709a3 1154 * @param[in,out] B Second input in non-Montgomery format. Output Montgomery format of the second input.
AnnaBridge 189:f392fc9709a3 1155 * @param[in,out] sizeB pointer to size variable. On input it holds size of input B in bytes. On output it holds size of
AnnaBridge 189:f392fc9709a3 1156 * Montgomery format of B in bytes.
AnnaBridge 189:f392fc9709a3 1157 * @param[out] R2 Output Montgomery factor R2 mod N.
AnnaBridge 189:f392fc9709a3 1158 * @param[out] sizeR2 pointer to size variable. On output it holds size of Montgomery factor R2 mod N in bytes.
AnnaBridge 189:f392fc9709a3 1159 * @param equalTime Run the function time equalized or no timing equalization.
AnnaBridge 189:f392fc9709a3 1160 * @param arithType Type of arithmetic to perform (integer or F2m)
AnnaBridge 189:f392fc9709a3 1161 * @return Operation status.
AnnaBridge 189:f392fc9709a3 1162 */
AnnaBridge 189:f392fc9709a3 1163 status_t LTC_PKHA_NormalToMontgomery(LTC_Type *base,
AnnaBridge 189:f392fc9709a3 1164 const uint8_t *N,
AnnaBridge 189:f392fc9709a3 1165 uint16_t sizeN,
AnnaBridge 189:f392fc9709a3 1166 uint8_t *A,
AnnaBridge 189:f392fc9709a3 1167 uint16_t *sizeA,
AnnaBridge 189:f392fc9709a3 1168 uint8_t *B,
AnnaBridge 189:f392fc9709a3 1169 uint16_t *sizeB,
AnnaBridge 189:f392fc9709a3 1170 uint8_t *R2,
AnnaBridge 189:f392fc9709a3 1171 uint16_t *sizeR2,
AnnaBridge 189:f392fc9709a3 1172 ltc_pkha_timing_t equalTime,
AnnaBridge 189:f392fc9709a3 1173 ltc_pkha_f2m_t arithType);
AnnaBridge 189:f392fc9709a3 1174
AnnaBridge 189:f392fc9709a3 1175 /*!
AnnaBridge 189:f392fc9709a3 1176 * @brief Converts from Montgomery format to int.
AnnaBridge 189:f392fc9709a3 1177 *
AnnaBridge 189:f392fc9709a3 1178 * This function converts Montgomery format of A or B into int A or B.
AnnaBridge 189:f392fc9709a3 1179 *
AnnaBridge 189:f392fc9709a3 1180 * @param base LTC peripheral base address
AnnaBridge 189:f392fc9709a3 1181 * @param N modulus.
AnnaBridge 189:f392fc9709a3 1182 * @param sizeN size of N modulus in bytes.
AnnaBridge 189:f392fc9709a3 1183 * @param[in,out] A Input first number in Montgomery format. Output is non-Montgomery format.
AnnaBridge 189:f392fc9709a3 1184 * @param[in,out] sizeA pointer to size variable. On input it holds size of the input A in bytes. On output it holds
AnnaBridge 189:f392fc9709a3 1185 * size of non-Montgomery A in bytes.
AnnaBridge 189:f392fc9709a3 1186 * @param[in,out] B Input first number in Montgomery format. Output is non-Montgomery format.
AnnaBridge 189:f392fc9709a3 1187 * @param[in,out] sizeB pointer to size variable. On input it holds size of the input B in bytes. On output it holds
AnnaBridge 189:f392fc9709a3 1188 * size of non-Montgomery B in bytes.
AnnaBridge 189:f392fc9709a3 1189 * @param equalTime Run the function time equalized or no timing equalization.
AnnaBridge 189:f392fc9709a3 1190 * @param arithType Type of arithmetic to perform (integer or F2m)
AnnaBridge 189:f392fc9709a3 1191 * @return Operation status.
AnnaBridge 189:f392fc9709a3 1192 */
AnnaBridge 189:f392fc9709a3 1193 status_t LTC_PKHA_MontgomeryToNormal(LTC_Type *base,
AnnaBridge 189:f392fc9709a3 1194 const uint8_t *N,
AnnaBridge 189:f392fc9709a3 1195 uint16_t sizeN,
AnnaBridge 189:f392fc9709a3 1196 uint8_t *A,
AnnaBridge 189:f392fc9709a3 1197 uint16_t *sizeA,
AnnaBridge 189:f392fc9709a3 1198 uint8_t *B,
AnnaBridge 189:f392fc9709a3 1199 uint16_t *sizeB,
AnnaBridge 189:f392fc9709a3 1200 ltc_pkha_timing_t equalTime,
AnnaBridge 189:f392fc9709a3 1201 ltc_pkha_f2m_t arithType);
AnnaBridge 189:f392fc9709a3 1202
AnnaBridge 189:f392fc9709a3 1203 /*!
AnnaBridge 189:f392fc9709a3 1204 * @brief Performs modular addition - (A + B) mod N.
AnnaBridge 189:f392fc9709a3 1205 *
AnnaBridge 189:f392fc9709a3 1206 * This function performs modular addition of (A + B) mod N, with either
AnnaBridge 189:f392fc9709a3 1207 * integer or binary polynomial (F2m) inputs. In the F2m form, this function is
AnnaBridge 189:f392fc9709a3 1208 * equivalent to a bitwise XOR and it is functionally the same as subtraction.
AnnaBridge 189:f392fc9709a3 1209 *
AnnaBridge 189:f392fc9709a3 1210 * @param base LTC peripheral base address
AnnaBridge 189:f392fc9709a3 1211 * @param A first addend (integer or binary polynomial)
AnnaBridge 189:f392fc9709a3 1212 * @param sizeA Size of A in bytes
AnnaBridge 189:f392fc9709a3 1213 * @param B second addend (integer or binary polynomial)
AnnaBridge 189:f392fc9709a3 1214 * @param sizeB Size of B in bytes
AnnaBridge 189:f392fc9709a3 1215 * @param N modulus. For F2m operation this can be NULL, as N is ignored during F2m polynomial addition.
AnnaBridge 189:f392fc9709a3 1216 * @param sizeN Size of N in bytes. This must be given for both integer and F2m polynomial additions.
AnnaBridge 189:f392fc9709a3 1217 * @param[out] result Output array to store result of operation
AnnaBridge 189:f392fc9709a3 1218 * @param[out] resultSize Output size of operation in bytes
AnnaBridge 189:f392fc9709a3 1219 * @param arithType Type of arithmetic to perform (integer or F2m)
AnnaBridge 189:f392fc9709a3 1220 * @return Operation status.
AnnaBridge 189:f392fc9709a3 1221 */
AnnaBridge 189:f392fc9709a3 1222 status_t LTC_PKHA_ModAdd(LTC_Type *base,
AnnaBridge 189:f392fc9709a3 1223 const uint8_t *A,
AnnaBridge 189:f392fc9709a3 1224 uint16_t sizeA,
AnnaBridge 189:f392fc9709a3 1225 const uint8_t *B,
AnnaBridge 189:f392fc9709a3 1226 uint16_t sizeB,
AnnaBridge 189:f392fc9709a3 1227 const uint8_t *N,
AnnaBridge 189:f392fc9709a3 1228 uint16_t sizeN,
AnnaBridge 189:f392fc9709a3 1229 uint8_t *result,
AnnaBridge 189:f392fc9709a3 1230 uint16_t *resultSize,
AnnaBridge 189:f392fc9709a3 1231 ltc_pkha_f2m_t arithType);
AnnaBridge 189:f392fc9709a3 1232
AnnaBridge 189:f392fc9709a3 1233 /*!
AnnaBridge 189:f392fc9709a3 1234 * @brief Performs modular subtraction - (A - B) mod N.
AnnaBridge 189:f392fc9709a3 1235 *
AnnaBridge 189:f392fc9709a3 1236 * This function performs modular subtraction of (A - B) mod N with
AnnaBridge 189:f392fc9709a3 1237 * integer inputs.
AnnaBridge 189:f392fc9709a3 1238 *
AnnaBridge 189:f392fc9709a3 1239 * @param base LTC peripheral base address
AnnaBridge 189:f392fc9709a3 1240 * @param A first addend (integer or binary polynomial)
AnnaBridge 189:f392fc9709a3 1241 * @param sizeA Size of A in bytes
AnnaBridge 189:f392fc9709a3 1242 * @param B second addend (integer or binary polynomial)
AnnaBridge 189:f392fc9709a3 1243 * @param sizeB Size of B in bytes
AnnaBridge 189:f392fc9709a3 1244 * @param N modulus
AnnaBridge 189:f392fc9709a3 1245 * @param sizeN Size of N in bytes
AnnaBridge 189:f392fc9709a3 1246 * @param[out] result Output array to store result of operation
AnnaBridge 189:f392fc9709a3 1247 * @param[out] resultSize Output size of operation in bytes
AnnaBridge 189:f392fc9709a3 1248 * @return Operation status.
AnnaBridge 189:f392fc9709a3 1249 */
AnnaBridge 189:f392fc9709a3 1250 status_t LTC_PKHA_ModSub1(LTC_Type *base,
AnnaBridge 189:f392fc9709a3 1251 const uint8_t *A,
AnnaBridge 189:f392fc9709a3 1252 uint16_t sizeA,
AnnaBridge 189:f392fc9709a3 1253 const uint8_t *B,
AnnaBridge 189:f392fc9709a3 1254 uint16_t sizeB,
AnnaBridge 189:f392fc9709a3 1255 const uint8_t *N,
AnnaBridge 189:f392fc9709a3 1256 uint16_t sizeN,
AnnaBridge 189:f392fc9709a3 1257 uint8_t *result,
AnnaBridge 189:f392fc9709a3 1258 uint16_t *resultSize);
AnnaBridge 189:f392fc9709a3 1259
AnnaBridge 189:f392fc9709a3 1260 /*!
AnnaBridge 189:f392fc9709a3 1261 * @brief Performs modular subtraction - (B - A) mod N.
AnnaBridge 189:f392fc9709a3 1262 *
AnnaBridge 189:f392fc9709a3 1263 * This function performs modular subtraction of (B - A) mod N,
AnnaBridge 189:f392fc9709a3 1264 * with integer inputs.
AnnaBridge 189:f392fc9709a3 1265 *
AnnaBridge 189:f392fc9709a3 1266 * @param base LTC peripheral base address
AnnaBridge 189:f392fc9709a3 1267 * @param A first addend (integer or binary polynomial)
AnnaBridge 189:f392fc9709a3 1268 * @param sizeA Size of A in bytes
AnnaBridge 189:f392fc9709a3 1269 * @param B second addend (integer or binary polynomial)
AnnaBridge 189:f392fc9709a3 1270 * @param sizeB Size of B in bytes
AnnaBridge 189:f392fc9709a3 1271 * @param N modulus
AnnaBridge 189:f392fc9709a3 1272 * @param sizeN Size of N in bytes
AnnaBridge 189:f392fc9709a3 1273 * @param[out] result Output array to store result of operation
AnnaBridge 189:f392fc9709a3 1274 * @param[out] resultSize Output size of operation in bytes
AnnaBridge 189:f392fc9709a3 1275 * @return Operation status.
AnnaBridge 189:f392fc9709a3 1276 */
AnnaBridge 189:f392fc9709a3 1277 status_t LTC_PKHA_ModSub2(LTC_Type *base,
AnnaBridge 189:f392fc9709a3 1278 const uint8_t *A,
AnnaBridge 189:f392fc9709a3 1279 uint16_t sizeA,
AnnaBridge 189:f392fc9709a3 1280 const uint8_t *B,
AnnaBridge 189:f392fc9709a3 1281 uint16_t sizeB,
AnnaBridge 189:f392fc9709a3 1282 const uint8_t *N,
AnnaBridge 189:f392fc9709a3 1283 uint16_t sizeN,
AnnaBridge 189:f392fc9709a3 1284 uint8_t *result,
AnnaBridge 189:f392fc9709a3 1285 uint16_t *resultSize);
AnnaBridge 189:f392fc9709a3 1286
AnnaBridge 189:f392fc9709a3 1287 /*!
AnnaBridge 189:f392fc9709a3 1288 * @brief Performs modular multiplication - (A x B) mod N.
AnnaBridge 189:f392fc9709a3 1289 *
AnnaBridge 189:f392fc9709a3 1290 * This function performs modular multiplication with either integer or
AnnaBridge 189:f392fc9709a3 1291 * binary polynomial (F2m) inputs. It can optionally specify whether inputs
AnnaBridge 189:f392fc9709a3 1292 * and/or outputs will be in Montgomery form or not.
AnnaBridge 189:f392fc9709a3 1293 *
AnnaBridge 189:f392fc9709a3 1294 * @param base LTC peripheral base address
AnnaBridge 189:f392fc9709a3 1295 * @param A first addend (integer or binary polynomial)
AnnaBridge 189:f392fc9709a3 1296 * @param sizeA Size of A in bytes
AnnaBridge 189:f392fc9709a3 1297 * @param B second addend (integer or binary polynomial)
AnnaBridge 189:f392fc9709a3 1298 * @param sizeB Size of B in bytes
AnnaBridge 189:f392fc9709a3 1299 * @param N modulus.
AnnaBridge 189:f392fc9709a3 1300 * @param sizeN Size of N in bytes
AnnaBridge 189:f392fc9709a3 1301 * @param[out] result Output array to store result of operation
AnnaBridge 189:f392fc9709a3 1302 * @param[out] resultSize Output size of operation in bytes
AnnaBridge 189:f392fc9709a3 1303 * @param arithType Type of arithmetic to perform (integer or F2m)
AnnaBridge 189:f392fc9709a3 1304 * @param montIn Format of inputs
AnnaBridge 189:f392fc9709a3 1305 * @param montOut Format of output
AnnaBridge 189:f392fc9709a3 1306 * @param equalTime Run the function time equalized or no timing equalization. This argument is ignored for F2m modular
AnnaBridge 189:f392fc9709a3 1307 * multiplication.
AnnaBridge 189:f392fc9709a3 1308 * @return Operation status.
AnnaBridge 189:f392fc9709a3 1309 */
AnnaBridge 189:f392fc9709a3 1310 status_t LTC_PKHA_ModMul(LTC_Type *base,
AnnaBridge 189:f392fc9709a3 1311 const uint8_t *A,
AnnaBridge 189:f392fc9709a3 1312 uint16_t sizeA,
AnnaBridge 189:f392fc9709a3 1313 const uint8_t *B,
AnnaBridge 189:f392fc9709a3 1314 uint16_t sizeB,
AnnaBridge 189:f392fc9709a3 1315 const uint8_t *N,
AnnaBridge 189:f392fc9709a3 1316 uint16_t sizeN,
AnnaBridge 189:f392fc9709a3 1317 uint8_t *result,
AnnaBridge 189:f392fc9709a3 1318 uint16_t *resultSize,
AnnaBridge 189:f392fc9709a3 1319 ltc_pkha_f2m_t arithType,
AnnaBridge 189:f392fc9709a3 1320 ltc_pkha_montgomery_form_t montIn,
AnnaBridge 189:f392fc9709a3 1321 ltc_pkha_montgomery_form_t montOut,
AnnaBridge 189:f392fc9709a3 1322 ltc_pkha_timing_t equalTime);
AnnaBridge 189:f392fc9709a3 1323
AnnaBridge 189:f392fc9709a3 1324 /*!
AnnaBridge 189:f392fc9709a3 1325 * @brief Performs modular exponentiation - (A^E) mod N.
AnnaBridge 189:f392fc9709a3 1326 *
AnnaBridge 189:f392fc9709a3 1327 * This function performs modular exponentiation with either integer or
AnnaBridge 189:f392fc9709a3 1328 * binary polynomial (F2m) inputs.
AnnaBridge 189:f392fc9709a3 1329 *
AnnaBridge 189:f392fc9709a3 1330 * @param base LTC peripheral base address
AnnaBridge 189:f392fc9709a3 1331 * @param A first addend (integer or binary polynomial)
AnnaBridge 189:f392fc9709a3 1332 * @param sizeA Size of A in bytes
AnnaBridge 189:f392fc9709a3 1333 * @param N modulus
AnnaBridge 189:f392fc9709a3 1334 * @param sizeN Size of N in bytes
AnnaBridge 189:f392fc9709a3 1335 * @param E exponent
AnnaBridge 189:f392fc9709a3 1336 * @param sizeE Size of E in bytes
AnnaBridge 189:f392fc9709a3 1337 * @param[out] result Output array to store result of operation
AnnaBridge 189:f392fc9709a3 1338 * @param[out] resultSize Output size of operation in bytes
AnnaBridge 189:f392fc9709a3 1339 * @param montIn Format of A input (normal or Montgomery)
AnnaBridge 189:f392fc9709a3 1340 * @param arithType Type of arithmetic to perform (integer or F2m)
AnnaBridge 189:f392fc9709a3 1341 * @param equalTime Run the function time equalized or no timing equalization.
AnnaBridge 189:f392fc9709a3 1342 * @return Operation status.
AnnaBridge 189:f392fc9709a3 1343 */
AnnaBridge 189:f392fc9709a3 1344 status_t LTC_PKHA_ModExp(LTC_Type *base,
AnnaBridge 189:f392fc9709a3 1345 const uint8_t *A,
AnnaBridge 189:f392fc9709a3 1346 uint16_t sizeA,
AnnaBridge 189:f392fc9709a3 1347 const uint8_t *N,
AnnaBridge 189:f392fc9709a3 1348 uint16_t sizeN,
AnnaBridge 189:f392fc9709a3 1349 const uint8_t *E,
AnnaBridge 189:f392fc9709a3 1350 uint16_t sizeE,
AnnaBridge 189:f392fc9709a3 1351 uint8_t *result,
AnnaBridge 189:f392fc9709a3 1352 uint16_t *resultSize,
AnnaBridge 189:f392fc9709a3 1353 ltc_pkha_f2m_t arithType,
AnnaBridge 189:f392fc9709a3 1354 ltc_pkha_montgomery_form_t montIn,
AnnaBridge 189:f392fc9709a3 1355 ltc_pkha_timing_t equalTime);
AnnaBridge 189:f392fc9709a3 1356
AnnaBridge 189:f392fc9709a3 1357 /*!
AnnaBridge 189:f392fc9709a3 1358 * @brief Performs modular reduction - (A) mod N.
AnnaBridge 189:f392fc9709a3 1359 *
AnnaBridge 189:f392fc9709a3 1360 * This function performs modular reduction with either integer or
AnnaBridge 189:f392fc9709a3 1361 * binary polynomial (F2m) inputs.
AnnaBridge 189:f392fc9709a3 1362 *
AnnaBridge 189:f392fc9709a3 1363 * @param base LTC peripheral base address
AnnaBridge 189:f392fc9709a3 1364 * @param A first addend (integer or binary polynomial)
AnnaBridge 189:f392fc9709a3 1365 * @param sizeA Size of A in bytes
AnnaBridge 189:f392fc9709a3 1366 * @param N modulus
AnnaBridge 189:f392fc9709a3 1367 * @param sizeN Size of N in bytes
AnnaBridge 189:f392fc9709a3 1368 * @param[out] result Output array to store result of operation
AnnaBridge 189:f392fc9709a3 1369 * @param[out] resultSize Output size of operation in bytes
AnnaBridge 189:f392fc9709a3 1370 * @param arithType Type of arithmetic to perform (integer or F2m)
AnnaBridge 189:f392fc9709a3 1371 * @return Operation status.
AnnaBridge 189:f392fc9709a3 1372 */
AnnaBridge 189:f392fc9709a3 1373 status_t LTC_PKHA_ModRed(LTC_Type *base,
AnnaBridge 189:f392fc9709a3 1374 const uint8_t *A,
AnnaBridge 189:f392fc9709a3 1375 uint16_t sizeA,
AnnaBridge 189:f392fc9709a3 1376 const uint8_t *N,
AnnaBridge 189:f392fc9709a3 1377 uint16_t sizeN,
AnnaBridge 189:f392fc9709a3 1378 uint8_t *result,
AnnaBridge 189:f392fc9709a3 1379 uint16_t *resultSize,
AnnaBridge 189:f392fc9709a3 1380 ltc_pkha_f2m_t arithType);
AnnaBridge 189:f392fc9709a3 1381
AnnaBridge 189:f392fc9709a3 1382 /*!
AnnaBridge 189:f392fc9709a3 1383 * @brief Performs modular inversion - (A^-1) mod N.
AnnaBridge 189:f392fc9709a3 1384 *
AnnaBridge 189:f392fc9709a3 1385 * This function performs modular inversion with either integer or
AnnaBridge 189:f392fc9709a3 1386 * binary polynomial (F2m) inputs.
AnnaBridge 189:f392fc9709a3 1387 *
AnnaBridge 189:f392fc9709a3 1388 * @param base LTC peripheral base address
AnnaBridge 189:f392fc9709a3 1389 * @param A first addend (integer or binary polynomial)
AnnaBridge 189:f392fc9709a3 1390 * @param sizeA Size of A in bytes
AnnaBridge 189:f392fc9709a3 1391 * @param N modulus
AnnaBridge 189:f392fc9709a3 1392 * @param sizeN Size of N in bytes
AnnaBridge 189:f392fc9709a3 1393 * @param[out] result Output array to store result of operation
AnnaBridge 189:f392fc9709a3 1394 * @param[out] resultSize Output size of operation in bytes
AnnaBridge 189:f392fc9709a3 1395 * @param arithType Type of arithmetic to perform (integer or F2m)
AnnaBridge 189:f392fc9709a3 1396 * @return Operation status.
AnnaBridge 189:f392fc9709a3 1397 */
AnnaBridge 189:f392fc9709a3 1398 status_t LTC_PKHA_ModInv(LTC_Type *base,
AnnaBridge 189:f392fc9709a3 1399 const uint8_t *A,
AnnaBridge 189:f392fc9709a3 1400 uint16_t sizeA,
AnnaBridge 189:f392fc9709a3 1401 const uint8_t *N,
AnnaBridge 189:f392fc9709a3 1402 uint16_t sizeN,
AnnaBridge 189:f392fc9709a3 1403 uint8_t *result,
AnnaBridge 189:f392fc9709a3 1404 uint16_t *resultSize,
AnnaBridge 189:f392fc9709a3 1405 ltc_pkha_f2m_t arithType);
AnnaBridge 189:f392fc9709a3 1406
AnnaBridge 189:f392fc9709a3 1407 /*!
AnnaBridge 189:f392fc9709a3 1408 * @brief Computes integer Montgomery factor R^2 mod N.
AnnaBridge 189:f392fc9709a3 1409 *
AnnaBridge 189:f392fc9709a3 1410 * This function computes a constant to assist in converting operands
AnnaBridge 189:f392fc9709a3 1411 * into the Montgomery residue system representation.
AnnaBridge 189:f392fc9709a3 1412 *
AnnaBridge 189:f392fc9709a3 1413 * @param base LTC peripheral base address
AnnaBridge 189:f392fc9709a3 1414 * @param N modulus
AnnaBridge 189:f392fc9709a3 1415 * @param sizeN Size of N in bytes
AnnaBridge 189:f392fc9709a3 1416 * @param[out] result Output array to store result of operation
AnnaBridge 189:f392fc9709a3 1417 * @param[out] resultSize Output size of operation in bytes
AnnaBridge 189:f392fc9709a3 1418 * @param arithType Type of arithmetic to perform (integer or F2m)
AnnaBridge 189:f392fc9709a3 1419 * @return Operation status.
AnnaBridge 189:f392fc9709a3 1420 */
AnnaBridge 189:f392fc9709a3 1421 status_t LTC_PKHA_ModR2(
AnnaBridge 189:f392fc9709a3 1422 LTC_Type *base, const uint8_t *N, uint16_t sizeN, uint8_t *result, uint16_t *resultSize, ltc_pkha_f2m_t arithType);
AnnaBridge 189:f392fc9709a3 1423
AnnaBridge 189:f392fc9709a3 1424 /*!
AnnaBridge 189:f392fc9709a3 1425 * @brief Calculates the greatest common divisor - GCD (A, N).
AnnaBridge 189:f392fc9709a3 1426 *
AnnaBridge 189:f392fc9709a3 1427 * This function calculates the greatest common divisor of two inputs with
AnnaBridge 189:f392fc9709a3 1428 * either integer or binary polynomial (F2m) inputs.
AnnaBridge 189:f392fc9709a3 1429 *
AnnaBridge 189:f392fc9709a3 1430 * @param base LTC peripheral base address
AnnaBridge 189:f392fc9709a3 1431 * @param A first value (must be smaller than or equal to N)
AnnaBridge 189:f392fc9709a3 1432 * @param sizeA Size of A in bytes
AnnaBridge 189:f392fc9709a3 1433 * @param N second value (must be non-zero)
AnnaBridge 189:f392fc9709a3 1434 * @param sizeN Size of N in bytes
AnnaBridge 189:f392fc9709a3 1435 * @param[out] result Output array to store result of operation
AnnaBridge 189:f392fc9709a3 1436 * @param[out] resultSize Output size of operation in bytes
AnnaBridge 189:f392fc9709a3 1437 * @param arithType Type of arithmetic to perform (integer or F2m)
AnnaBridge 189:f392fc9709a3 1438 * @return Operation status.
AnnaBridge 189:f392fc9709a3 1439 */
AnnaBridge 189:f392fc9709a3 1440 status_t LTC_PKHA_GCD(LTC_Type *base,
AnnaBridge 189:f392fc9709a3 1441 const uint8_t *A,
AnnaBridge 189:f392fc9709a3 1442 uint16_t sizeA,
AnnaBridge 189:f392fc9709a3 1443 const uint8_t *N,
AnnaBridge 189:f392fc9709a3 1444 uint16_t sizeN,
AnnaBridge 189:f392fc9709a3 1445 uint8_t *result,
AnnaBridge 189:f392fc9709a3 1446 uint16_t *resultSize,
AnnaBridge 189:f392fc9709a3 1447 ltc_pkha_f2m_t arithType);
AnnaBridge 189:f392fc9709a3 1448
AnnaBridge 189:f392fc9709a3 1449 /*!
AnnaBridge 189:f392fc9709a3 1450 * @brief Executes Miller-Rabin primality test.
AnnaBridge 189:f392fc9709a3 1451 *
AnnaBridge 189:f392fc9709a3 1452 * This function calculates whether or not a candidate prime number is likely
AnnaBridge 189:f392fc9709a3 1453 * to be a prime.
AnnaBridge 189:f392fc9709a3 1454 *
AnnaBridge 189:f392fc9709a3 1455 * @param base LTC peripheral base address
AnnaBridge 189:f392fc9709a3 1456 * @param A initial random seed
AnnaBridge 189:f392fc9709a3 1457 * @param sizeA Size of A in bytes
AnnaBridge 189:f392fc9709a3 1458 * @param B number of trial runs
AnnaBridge 189:f392fc9709a3 1459 * @param sizeB Size of B in bytes
AnnaBridge 189:f392fc9709a3 1460 * @param N candidate prime integer
AnnaBridge 189:f392fc9709a3 1461 * @param sizeN Size of N in bytes
AnnaBridge 189:f392fc9709a3 1462 * @param[out] res True if the value is likely prime or false otherwise
AnnaBridge 189:f392fc9709a3 1463 * @return Operation status.
AnnaBridge 189:f392fc9709a3 1464 */
AnnaBridge 189:f392fc9709a3 1465 status_t LTC_PKHA_PrimalityTest(LTC_Type *base,
AnnaBridge 189:f392fc9709a3 1466 const uint8_t *A,
AnnaBridge 189:f392fc9709a3 1467 uint16_t sizeA,
AnnaBridge 189:f392fc9709a3 1468 const uint8_t *B,
AnnaBridge 189:f392fc9709a3 1469 uint16_t sizeB,
AnnaBridge 189:f392fc9709a3 1470 const uint8_t *N,
AnnaBridge 189:f392fc9709a3 1471 uint16_t sizeN,
AnnaBridge 189:f392fc9709a3 1472 bool *res);
AnnaBridge 189:f392fc9709a3 1473
AnnaBridge 189:f392fc9709a3 1474 /*!
AnnaBridge 189:f392fc9709a3 1475 * @brief Adds elliptic curve points - A + B.
AnnaBridge 189:f392fc9709a3 1476 *
AnnaBridge 189:f392fc9709a3 1477 * This function performs ECC point addition over a prime field (Fp) or binary field (F2m) using
AnnaBridge 189:f392fc9709a3 1478 * affine coordinates.
AnnaBridge 189:f392fc9709a3 1479 *
AnnaBridge 189:f392fc9709a3 1480 * @param base LTC peripheral base address
AnnaBridge 189:f392fc9709a3 1481 * @param A Left-hand point
AnnaBridge 189:f392fc9709a3 1482 * @param B Right-hand point
AnnaBridge 189:f392fc9709a3 1483 * @param N Prime modulus of the field
AnnaBridge 189:f392fc9709a3 1484 * @param R2modN NULL (the function computes R2modN internally) or pointer to pre-computed R2modN (obtained from
AnnaBridge 189:f392fc9709a3 1485 * LTC_PKHA_ModR2() function).
AnnaBridge 189:f392fc9709a3 1486 * @param aCurveParam A parameter from curve equation
AnnaBridge 189:f392fc9709a3 1487 * @param bCurveParam B parameter from curve equation (constant)
AnnaBridge 189:f392fc9709a3 1488 * @param size Size in bytes of curve points and parameters
AnnaBridge 189:f392fc9709a3 1489 * @param arithType Type of arithmetic to perform (integer or F2m)
AnnaBridge 189:f392fc9709a3 1490 * @param[out] result Result point
AnnaBridge 189:f392fc9709a3 1491 * @return Operation status.
AnnaBridge 189:f392fc9709a3 1492 */
AnnaBridge 189:f392fc9709a3 1493 status_t LTC_PKHA_ECC_PointAdd(LTC_Type *base,
AnnaBridge 189:f392fc9709a3 1494 const ltc_pkha_ecc_point_t *A,
AnnaBridge 189:f392fc9709a3 1495 const ltc_pkha_ecc_point_t *B,
AnnaBridge 189:f392fc9709a3 1496 const uint8_t *N,
AnnaBridge 189:f392fc9709a3 1497 const uint8_t *R2modN,
AnnaBridge 189:f392fc9709a3 1498 const uint8_t *aCurveParam,
AnnaBridge 189:f392fc9709a3 1499 const uint8_t *bCurveParam,
AnnaBridge 189:f392fc9709a3 1500 uint8_t size,
AnnaBridge 189:f392fc9709a3 1501 ltc_pkha_f2m_t arithType,
AnnaBridge 189:f392fc9709a3 1502 ltc_pkha_ecc_point_t *result);
AnnaBridge 189:f392fc9709a3 1503
AnnaBridge 189:f392fc9709a3 1504 /*!
AnnaBridge 189:f392fc9709a3 1505 * @brief Doubles elliptic curve points - B + B.
AnnaBridge 189:f392fc9709a3 1506 *
AnnaBridge 189:f392fc9709a3 1507 * This function performs ECC point doubling over a prime field (Fp) or binary field (F2m) using
AnnaBridge 189:f392fc9709a3 1508 * affine coordinates.
AnnaBridge 189:f392fc9709a3 1509 *
AnnaBridge 189:f392fc9709a3 1510 * @param base LTC peripheral base address
AnnaBridge 189:f392fc9709a3 1511 * @param B Point to double
AnnaBridge 189:f392fc9709a3 1512 * @param N Prime modulus of the field
AnnaBridge 189:f392fc9709a3 1513 * @param aCurveParam A parameter from curve equation
AnnaBridge 189:f392fc9709a3 1514 * @param bCurveParam B parameter from curve equation (constant)
AnnaBridge 189:f392fc9709a3 1515 * @param size Size in bytes of curve points and parameters
AnnaBridge 189:f392fc9709a3 1516 * @param arithType Type of arithmetic to perform (integer or F2m)
AnnaBridge 189:f392fc9709a3 1517 * @param[out] result Result point
AnnaBridge 189:f392fc9709a3 1518 * @return Operation status.
AnnaBridge 189:f392fc9709a3 1519 */
AnnaBridge 189:f392fc9709a3 1520 status_t LTC_PKHA_ECC_PointDouble(LTC_Type *base,
AnnaBridge 189:f392fc9709a3 1521 const ltc_pkha_ecc_point_t *B,
AnnaBridge 189:f392fc9709a3 1522 const uint8_t *N,
AnnaBridge 189:f392fc9709a3 1523 const uint8_t *aCurveParam,
AnnaBridge 189:f392fc9709a3 1524 const uint8_t *bCurveParam,
AnnaBridge 189:f392fc9709a3 1525 uint8_t size,
AnnaBridge 189:f392fc9709a3 1526 ltc_pkha_f2m_t arithType,
AnnaBridge 189:f392fc9709a3 1527 ltc_pkha_ecc_point_t *result);
AnnaBridge 189:f392fc9709a3 1528
AnnaBridge 189:f392fc9709a3 1529 /*!
AnnaBridge 189:f392fc9709a3 1530 * @brief Multiplies an elliptic curve point by a scalar - E x (A0, A1).
AnnaBridge 189:f392fc9709a3 1531 *
AnnaBridge 189:f392fc9709a3 1532 * This function performs ECC point multiplication to multiply an ECC point by
AnnaBridge 189:f392fc9709a3 1533 * a scalar integer multiplier over a prime field (Fp) or a binary field (F2m).
AnnaBridge 189:f392fc9709a3 1534 *
AnnaBridge 189:f392fc9709a3 1535 * @param base LTC peripheral base address
AnnaBridge 189:f392fc9709a3 1536 * @param A Point as multiplicand
AnnaBridge 189:f392fc9709a3 1537 * @param E Scalar multiple
AnnaBridge 189:f392fc9709a3 1538 * @param sizeE The size of E, in bytes
AnnaBridge 189:f392fc9709a3 1539 * @param N Modulus, a prime number for the Fp field or Irreducible polynomial for F2m field.
AnnaBridge 189:f392fc9709a3 1540 * @param R2modN NULL (the function computes R2modN internally) or pointer to pre-computed R2modN (obtained from
AnnaBridge 189:f392fc9709a3 1541 * LTC_PKHA_ModR2() function).
AnnaBridge 189:f392fc9709a3 1542 * @param aCurveParam A parameter from curve equation
AnnaBridge 189:f392fc9709a3 1543 * @param bCurveParam B parameter from curve equation (C parameter for operation over F2m).
AnnaBridge 189:f392fc9709a3 1544 * @param size Size in bytes of curve points and parameters
AnnaBridge 189:f392fc9709a3 1545 * @param equalTime Run the function time equalized or no timing equalization.
AnnaBridge 189:f392fc9709a3 1546 * @param arithType Type of arithmetic to perform (integer or F2m)
AnnaBridge 189:f392fc9709a3 1547 * @param[out] result Result point
AnnaBridge 189:f392fc9709a3 1548 * @param[out] infinity Output true if the result is point of infinity, and false otherwise. Writing of this output will
AnnaBridge 189:f392fc9709a3 1549 * be ignored if the argument is NULL.
AnnaBridge 189:f392fc9709a3 1550 * @return Operation status.
AnnaBridge 189:f392fc9709a3 1551 */
AnnaBridge 189:f392fc9709a3 1552 status_t LTC_PKHA_ECC_PointMul(LTC_Type *base,
AnnaBridge 189:f392fc9709a3 1553 const ltc_pkha_ecc_point_t *A,
AnnaBridge 189:f392fc9709a3 1554 const uint8_t *E,
AnnaBridge 189:f392fc9709a3 1555 uint8_t sizeE,
AnnaBridge 189:f392fc9709a3 1556 const uint8_t *N,
AnnaBridge 189:f392fc9709a3 1557 const uint8_t *R2modN,
AnnaBridge 189:f392fc9709a3 1558 const uint8_t *aCurveParam,
AnnaBridge 189:f392fc9709a3 1559 const uint8_t *bCurveParam,
AnnaBridge 189:f392fc9709a3 1560 uint8_t size,
AnnaBridge 189:f392fc9709a3 1561 ltc_pkha_timing_t equalTime,
AnnaBridge 189:f392fc9709a3 1562 ltc_pkha_f2m_t arithType,
AnnaBridge 189:f392fc9709a3 1563 ltc_pkha_ecc_point_t *result,
AnnaBridge 189:f392fc9709a3 1564 bool *infinity);
AnnaBridge 189:f392fc9709a3 1565
AnnaBridge 189:f392fc9709a3 1566 /*!
AnnaBridge 189:f392fc9709a3 1567 *@}
AnnaBridge 189:f392fc9709a3 1568 */
AnnaBridge 189:f392fc9709a3 1569
AnnaBridge 189:f392fc9709a3 1570 #if defined(__cplusplus)
AnnaBridge 189:f392fc9709a3 1571 }
AnnaBridge 189:f392fc9709a3 1572 #endif
AnnaBridge 189:f392fc9709a3 1573
AnnaBridge 189:f392fc9709a3 1574 /*!
AnnaBridge 189:f392fc9709a3 1575 *@}
AnnaBridge 189:f392fc9709a3 1576 */
AnnaBridge 189:f392fc9709a3 1577
AnnaBridge 189:f392fc9709a3 1578 #endif /* _FSL_LTC_H_ */