26#ifndef MCUXCLELS_ECC_H_
27#define MCUXCLELS_ECC_H_
29#include <mcuxClConfig.h>
60#define MCUXCLELS_ECC_VALUE_HASHED ((uint32_t) 0u<< 0u)
61#define MCUXCLELS_ECC_VALUE_NOT_HASHED ((uint32_t) 1u<< 0u)
62#define MCUXCLELS_ECC_VALUE_RTF ((uint32_t) 1u<< 1u)
63#define MCUXCLELS_ECC_VALUE_NO_RTF ((uint32_t) 0u<< 1u)
74#define MCUXCLELS_KEYGEN_VALUE_SIGN_PUBLICKEY ((uint32_t) 1u<< 0u)
75#define MCUXCLELS_KEYGEN_VALUE_TYPE_SIGN ((uint32_t) 0u<< 1u)
76#define MCUXCLELS_KEYGEN_VALUE_TYPE_KEYEXCHANGE ((uint32_t) 1u<< 1u)
77#define MCUXCLELS_KEYGEN_VALUE_DETERMINISTIC ((uint32_t) 0u<< 2u)
78#define MCUXCLELS_KEYGEN_VALUE_RANDOM ((uint32_t) 1u<< 2u)
79#define MCUXCLELS_KEYGEN_VALUE_GEN_PUB_KEY ((uint32_t) 0u<< 3u)
80#define MCUXCLELS_KEYGEN_VALUE_NO_PUB_KEY ((uint32_t) 1u<< 3u)
81#define MCUXCLELS_KEYGEN_VALUE_NO_RANDOM_DATA ((uint32_t) 0u<< 5u)
82#define MCUXCLELS_KEYGEN_VALUE_USE_RANDOM_DATA ((uint32_t) 1u<< 5u)
93#define MCUXCLELS_ECC_HASHED ((uint32_t) 0U)
94#define MCUXCLELS_ECC_NOT_HASHED ((uint32_t) 1U)
96#define MCUXCLELS_ECC_RTF ((uint32_t) 1U)
97#define MCUXCLELS_ECC_NO_RTF ((uint32_t) 0U)
108#define MCUXCLELS_ECC_PUBLICKEY_SIGN_ENABLE (1U)
109#define MCUXCLELS_ECC_PUBLICKEY_SIGN_DISABLE (0U)
111#define MCUXCLELS_ECC_OUTPUTKEY_SIGN (0U)
112#define MCUXCLELS_ECC_OUTPUTKEY_KEYEXCHANGE (1U)
114#define MCUXCLELS_ECC_OUTPUTKEY_DETERMINISTIC (0U)
115#define MCUXCLELS_ECC_OUTPUTKEY_RANDOM (1U)
117#define MCUXCLELS_ECC_GEN_PUBLIC_KEY (0U)
118#define MCUXCLELS_ECC_SKIP_PUBLIC_KEY (1U)
121#define MCUXCLELS_ECC_NO_RANDOM_DATA (0U)
122#define MCUXCLELS_ECC_INCLUDE_RANDOM_DATA (1U)
134#define MCUXCLELS_ECC_REVERSEFETCH_ENABLE (0x01U)
135#define MCUXCLELS_ECC_REVERSEFETCH_DISABLE (0x00U)
137#ifdef MCUXCL_FEATURE_ELS_PUK_INTERNAL_BIT
138#define MCUXCLELS_ECC_EXTKEY_EXTERNAL (0x01U)
139#define MCUXCLELS_ECC_EXTKEY_INTERNAL (0x00U)
151#define MCUXCLELS_ECC_PUBLICKEY_SIZE ((size_t) 64U)
152#define MCUXCLELS_ECC_SIGNATURE_SIZE ((size_t) 64U)
153#define MCUXCLELS_ECC_SIGNATURE_R_SIZE ((size_t) 32U)
214#ifdef MCUXCL_FEATURE_ELS_PUK_INTERNAL_BIT
325 uint8_t const * pRandomData,
363 uint8_t const * pPublicKey,
368#ifdef MCUXCL_FEATURE_ELS_PUK_INTERNAL
447 uint8_t const * pInputHash,
448 uint8_t const * pInputMessage,
449 size_t inputMessageLength,
508 uint8_t const * pInputHash,
509 uint8_t const * pInputMessage,
510 size_t inputMessageLength,
511 uint8_t const * pSignatureAndPubKey,
515#ifdef MCUXCL_FEATURE_ELS_PUK_INTERNAL
572 uint8_t
const * pInputHash,
573 uint8_t
const * pInputMessage,
574 size_t inputMessageLength,
575 uint8_t
const * pSignature,
ELS header for common functionality.
#define MCUXCLELS_API
Marks a function as a public API function of the mcuxClEls component.
Definition mcuxClEls_Common.h:46
uint8_t mcuxClEls_EccByte_t
Data type for ECC parameters in ELS format.
Definition mcuxClEls_Ecc.h:177
MCUXCLELS_API mcuxClEls_Status_t mcuxClEls_EccVerify_Async(mcuxClEls_EccVerifyOption_t options, uint8_t const *pInputHash, uint8_t const *pInputMessage, size_t inputMessageLength, uint8_t const *pSignatureAndPubKey, uint8_t *pOutput)
Verifies an ECDSA signature of a given message.
MCUXCLELS_API mcuxClEls_Status_t mcuxClEls_EccKeyGen_Async(mcuxClEls_EccKeyGenOption_t options, mcuxClEls_KeyIndex_t signingKeyIdx, mcuxClEls_KeyIndex_t privateKeyIdx, mcuxClEls_KeyProp_t generatedKeyProperties, uint8_t const *pRandomData, uint8_t *pPublicKey)
Generates an ECC key pair on the NIST P-256 curve.
MCUXCLELS_API mcuxClEls_Status_t mcuxClEls_EccKeyExchange_Async(mcuxClEls_KeyIndex_t privateKeyIdx, uint8_t const *pPublicKey, mcuxClEls_KeyIndex_t sharedSecretIdx, mcuxClEls_KeyProp_t sharedSecretProperties)
Performs a Diffie-Hellman key exchange with an internal ECC private key and an external ECC public ke...
MCUXCLELS_API mcuxClEls_Status_t mcuxClEls_EccSign_Async(mcuxClEls_EccSignOption_t options, mcuxClEls_KeyIndex_t keyIdx, uint8_t const *pInputHash, uint8_t const *pInputMessage, size_t inputMessageLength, uint8_t *pOutput)
Generates an ECDSA signature of a given message.
uint32_t mcuxClEls_Status_t
Type for ELS driver status codes.
Definition mcuxClEls_Types.h:212
uint32_t mcuxClEls_KeyIndex_t
Type for ELS keystore indices.
Definition mcuxClEls_Types.h:222
#define MCUX_CSSL_FP_FUNCTION_DECL(...)
Declaration of a flow protected function.
Definition mcuxCsslFlowProtection.h:125
#define MCUX_CSSL_FP_PROTECTED_TYPE(resultType)
Based on a given base type, builds a return type with flow protection.
Definition mcuxCsslFlowProtection.h:81
Command option bit field for mcuxClEls_EccSign_Async Bit field to configure mcuxClEls_EccSign_Async.
Definition mcuxClEls_Ecc.h:184
uint32_t value
Access the bit field as a full word; initialize with a combination of constants from MCUXCLELS_ECC (S...
Definition mcuxClEls_Ecc.h:187
uint32_t signrtf
Define if signing the Run-Time Fingerprint.
Definition mcuxClEls_Ecc.h:192
uint32_t revf
This field is managed internally.
Definition mcuxClEls_Ecc.h:194
uint32_t echashchl
Define type of input, plain message or hash of message.
Definition mcuxClEls_Ecc.h:191
Command option bit field for mcuxClEls_EccVerify_Async Bit field to configure mcuxClEls_EccVerifyOpti...
Definition mcuxClEls_Ecc.h:204
uint32_t echashchl
Define type of input, plain message or hash of message.
Definition mcuxClEls_Ecc.h:211
uint32_t value
Access the bit field as a full word; initialize with a combination of constants from MCUXCLELS_ECC (S...
Definition mcuxClEls_Ecc.h:207
uint32_t revf
This field is managed internally.
Definition mcuxClEls_Ecc.h:213
Command option bit field for mcuxClEls_EccKeyGen_Async Bit field to configure mcuxClEls_EccKeyGenOpti...
Definition mcuxClEls_Ecc.h:229
uint32_t value
Accesses the bit field as a full word; initialize with a combination of constants from MCUXCLELS_KEYG...
Definition mcuxClEls_Ecc.h:232
uint32_t revf
This field is managed internally.
Definition mcuxClEls_Ecc.h:240
uint32_t kgsign
Define if signing the output public key.
Definition mcuxClEls_Ecc.h:236
uint32_t kgsrc
Define if the output key is deterministic or random.
Definition mcuxClEls_Ecc.h:238
uint32_t kgsign_rnd
Define if using user provided random data for the signature.
Definition mcuxClEls_Ecc.h:241
uint32_t kgtypedh
Define the usage of the output key.
Definition mcuxClEls_Ecc.h:237
uint32_t skip_pbk
Define if generating a public key.
Definition mcuxClEls_Ecc.h:239
Command option bit field for mcuxClEls_EccKeyExchange_Async, for internal use only.
Definition mcuxClEls_Ecc.h:251
uint32_t revf
This field is managed internally.
Definition mcuxClEls_Ecc.h:259
uint32_t value
Accesses the bit field as a full word.
Definition mcuxClEls_Ecc.h:254
uint32_t extkey
This field is managed internally.
Definition mcuxClEls_Ecc.h:261
Type for ELS key store key properties.
Definition mcuxClEls_Types.h:226