The official Mbed 2 C/C++ SDK provides the software platform and libraries to build your applications.

Dependents:   hello SerialTestv11 SerialTestv12 Sierpinski ... more

mbed 2

This is the mbed 2 library. If you'd like to learn about Mbed OS please see the mbed-os docs.

Committer:
AnnaBridge
Date:
Thu Nov 08 11:45:42 2018 +0000
Revision:
171:3a7713b1edbc
Parent:
TARGET_UBRIDGE/TARGET_Freescale/TARGET_MCUXpresso_MCUS/TARGET_K82F/drivers/fsl_ltc.h@145:64910690c574
mbed library. Release version 164

Who changed what in which revision?

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