nRF5 SDK v17.1.0
Data Structures | Macros | Enumerations | Functions
CryptoCell EC Montgomery APIs

Data Structures

struct  CRYS_ECMONT_ScalrMultTempBuff_t
 
struct  CRYS_ECMONT_TempBuff_t
 

Macros

#define CRYS_ECMONT_MOD_SIZE_IN_BITS   255U
 
#define CRYS_ECMONT_MOD_SIZE_IN_32BIT_WORDS   ((CRYS_ECMONT_MOD_SIZE_IN_BITS + SASI_BITS_IN_32BIT_WORD - 1) / SASI_BITS_IN_32BIT_WORD)
 
#define CRYS_ECMONT_MOD_SIZE_IN_BYTES   ((CRYS_ECMONT_MOD_SIZE_IN_BITS + SASI_BITS_IN_32BIT_WORD - 1) / sizeof(uint32_t))
 
#define CRYS_ECMONT_SCALARBYTES   (CRYS_ECMONT_MOD_SIZE_IN_32BIT_WORDS * SASI_32BIT_WORD_SIZE)
 
#define CRYS_ECMONT_SCALARMULTBYTES   (CRYS_ECMONT_MOD_SIZE_IN_32BIT_WORDS * SASI_32BIT_WORD_SIZE)
 
#define CRYS_ECMONT_SEEDBYTES   (CRYS_ECMONT_MOD_SIZE_IN_32BIT_WORDS * SASI_32BIT_WORD_SIZE)
 

Enumerations

enum  CRYS_ECMONT_DomainId_t {
  CRYS_ECMONT_DOMAIN_CURVE_25519,
  CRYS_ECMONT_DOMAIN_OFF_MODE,
  CRYS_ECMONT_DOMAIN_LAST = 0x7FFFFFFF
}
 

Functions

CRYSError_t CRYS_ECMONT_Scalarmult (uint8_t *pResPoint, size_t *pResPointSize, const uint8_t *pScalar, size_t scalarSize, const uint8_t *pInPoint, size_t inPointSize, CRYS_ECMONT_TempBuff_t *pEcMontTempBuff)
 The function performs EC Montgomery (Curve25519) scalar multiplication: resPoint = scalar * point. More...
 
CRYSError_t CRYS_ECMONT_ScalarmultBase (uint8_t *pResPoint, size_t *pResPointSize, const uint8_t *pScalar, size_t scalarSize, CRYS_ECMONT_TempBuff_t *pEcMontTempBuff)
 The function performs EC Montgomery (Curve25519) scalar multiplication of base point: res = scalar * base_point. More...
 
CRYSError_t CRYS_ECMONT_KeyPair (uint8_t *pPublKey, size_t *pPublKeySize, uint8_t *pSecrKey, size_t *pSecrKeySize, void *pRndState, SaSiRndGenerateVectWorkFunc_t rndGenerateVectFunc, CRYS_ECMONT_TempBuff_t *pEcMontTempBuff)
 The function randomly generates private and public keys for Montgomery Curve25519. More...
 
CRYSError_t CRYS_ECMONT_SeedKeyPair (uint8_t *pPublKey, size_t *pPublKeySize, uint8_t *pSecrKey, size_t *pSecrKeySize, const uint8_t *pSeed, size_t seedSize, CRYS_ECMONT_TempBuff_t *pEcMontTempBuff)
 The function generates private and public keys for Montgomery algorithms. More...
 

Detailed Description

Note
Implemented algorithms according to Montgomery elliptic curves cryptography, developed by Daniel J.Bernstein etc.

Macro Definition Documentation

#define CRYS_ECMONT_MOD_SIZE_IN_32BIT_WORDS   ((CRYS_ECMONT_MOD_SIZE_IN_BITS + SASI_BITS_IN_32BIT_WORD - 1) / SASI_BITS_IN_32BIT_WORD)

EC Montgomery modulus size in words.

#define CRYS_ECMONT_MOD_SIZE_IN_BITS   255U

EC Montgomery curve25519 modulus size in bits, words and bytes

EC Montgomery modulus size in bits.

#define CRYS_ECMONT_MOD_SIZE_IN_BYTES   ((CRYS_ECMONT_MOD_SIZE_IN_BITS + SASI_BITS_IN_32BIT_WORD - 1) / sizeof(uint32_t))

EC Montgomery modulus size in bytes.

#define CRYS_ECMONT_SCALARBYTES   (CRYS_ECMONT_MOD_SIZE_IN_32BIT_WORDS * SASI_32BIT_WORD_SIZE)

Constant sizes of special EC_MONT buffers and arrays

EC Montgomery scalar size in bytes.

#define CRYS_ECMONT_SCALARMULTBYTES   (CRYS_ECMONT_MOD_SIZE_IN_32BIT_WORDS * SASI_32BIT_WORD_SIZE)

EC Montgomery scalar multiplication size in bytes.

#define CRYS_ECMONT_SEEDBYTES   (CRYS_ECMONT_MOD_SIZE_IN_32BIT_WORDS * SASI_32BIT_WORD_SIZE)

EC Montgomery scalar seed size in bytes.

Enumeration Type Documentation

EC Montgomery domains ID-s enumerator.

Enumerator
CRYS_ECMONT_DOMAIN_CURVE_25519 

EC Curve25519.

CRYS_ECMONT_DOMAIN_OFF_MODE 

EC Montgomery last domain.

CRYS_ECMONT_DOMAIN_LAST 

Reserved.

Function Documentation

CRYSError_t CRYS_ECMONT_KeyPair ( uint8_t *  pPublKey,
size_t *  pPublKeySize,
uint8_t *  pSecrKey,
size_t *  pSecrKeySize,
void *  pRndState,
SaSiRndGenerateVectWorkFunc_t  rndGenerateVectFunc,
CRYS_ECMONT_TempBuff_t pEcMontTempBuff 
)

The function randomly generates private and public keys for Montgomery Curve25519.

Note
  • All byte arrays are in LE order of bytes, i.e. LS byte is on the left most place.
  • LS and MS bits of the Secret key are set according to EC Montgomery scalar mult. algorithm: secrKey[0] &= 248; secrKey[31] &= 127; secrKey[31] |= 64;
Returns
CRYS_OK on success,
A non-zero value on failure as defined crys_ec_mont_edw_error.h or crys_rnd_error.h.
Parameters
[out]pPublKeyPointer to the public key.
[in,out]pPublKeySizePointer to the size of the public key in bytes. In - the size of the buffer must be at least EC order size (for curve25519 - 32 bytes); Out - the actual size.
[out]pSecrKeyPointer to the secret key, including.
[in,out]pSecrKeySizePointer to the size of buffer for the secret key in bytes - must be at least EC order size (for curve25519 - 32 bytes).
[in,out]pRndStatePointer to the RND state structure.
[in]rndGenerateVectFuncPointer to the random vector generation function.
[in]pEcMontTempBuffPointer to the temp buffer, for internal use.
CRYSError_t CRYS_ECMONT_Scalarmult ( uint8_t *  pResPoint,
size_t *  pResPointSize,
const uint8_t *  pScalar,
size_t  scalarSize,
const uint8_t *  pInPoint,
size_t  inPointSize,
CRYS_ECMONT_TempBuff_t pEcMontTempBuff 
)

The function performs EC Montgomery (Curve25519) scalar multiplication: resPoint = scalar * point.

Returns
CRYS_OK on success,
A non-zero value on failure as defined crys_ec_mont_edw_error.h.
Parameters
[out]pResPointPointer to the public (secret) key.
[in,out]pResPointSizePointer to the size of the public key in bytes. In - the size of the buffer. must be at least EC modulus size (for curve25519 - 32 bytes). Out - the actual size.
[in]pScalarPointer to the secret (private) key.
[in]scalarSizePointer to the size of the secret key in bytes; must be equal to EC order size (for curve25519 - 32 bytes).
[in]pInPointPointer to the input point (compressed).
[in]inPointSizeSize of the point - must be equal to CRYS_ECMONT_MOD_SIZE_IN_BYTES.
[in]pEcMontTempBuffPointer to temp buffer, for internal use.
CRYSError_t CRYS_ECMONT_ScalarmultBase ( uint8_t *  pResPoint,
size_t *  pResPointSize,
const uint8_t *  pScalar,
size_t  scalarSize,
CRYS_ECMONT_TempBuff_t pEcMontTempBuff 
)

The function performs EC Montgomery (Curve25519) scalar multiplication of base point: res = scalar * base_point.

   Note: all byte arrays have LE order of bytes, i.e. LS byte is on left most place.
Returns
CRYS_OK on success,
A non-zero value on failure as defined crys_ec_mont_edw_error.h.
Parameters
[out]pResPointPointer to the public (secret) key.
[in,out]pResPointSizePointer to the size of the public key in bytes. In - the size of buffer must be at least EC modulus size (for curve25519 - 32 bytes); Out - the actual size.
[in]pScalarPointer to the secret (private) key.
[in]scalarSizePointer to the size of the scalar in bytes - must be equal to EC order size (for curve25519 - 32 bytes).
[in]pEcMontTempBuffPointer to temp buffer, for internal use.
CRYSError_t CRYS_ECMONT_SeedKeyPair ( uint8_t *  pPublKey,
size_t *  pPublKeySize,
uint8_t *  pSecrKey,
size_t *  pSecrKeySize,
const uint8_t *  pSeed,
size_t  seedSize,
CRYS_ECMONT_TempBuff_t pEcMontTempBuff 
)

The function generates private and public keys for Montgomery algorithms.

   The generation performed using given seed.
Returns
CRYS_OK on success,
A non-zero value on failure as defined crys_ec_mont_edw_error.h or crys_hash_error.h.
Parameters
[out]pPublKeyPointer to the public (secret) key.
[in,out]pPublKeySizePointer to the size of the public key in bytes. In - the size of buffer must be at least EC order size (for curve25519 - 32 bytes); Out - the actual size.
[out]pSecrKeyPointer to the secret (private) key.
[in,out]pSecrKeySizePointer to the size of the secret key in bytes In - the size of buffer must be at least EC order size (for curve25519 - 32 bytes); Out - the actual size.
[in]pSeedPointer to the given seed - 32 bytes.
[in]seedSizeSize of the seed in bytes (must be equal to CRYS_ECMONT_SEEDBYTES).
[in]pEcMontTempBuffPointer to a temp buffer, for internal use.

Documentation feedback | Developer Zone | Subscribe | Updated