crys_ec_mont_api

nRF5 SDK v14.2.0

This file contains the CRYS APIs used for EC MONT (Montgomery Curve25519) algorithms. More...

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, CRYS_RND_Context_t *pRndContext, 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

This file contains the CRYS APIs used for EC MONT (Montgomery Curve25519) algorithms.

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

Macro Definition Documentation

#define CRYS_ECMONT_MOD_SIZE_IN_BITS   255U

EC Montgomery curve25519 modulus size in bits, words and 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

#define CRYS_ECMONT_SEEDBYTES   (CRYS_ECMONT_MOD_SIZE_IN_32BIT_WORDS * SASI_32BIT_WORD_SIZE)

EC Montgomery domains ID-s enumerator

Enumeration Type Documentation

Enumerator
CRYS_ECMONT_DOMAIN_CURVE_25519

EC Curve25519

Function Documentation

CRYSError_t CRYS_ECMONT_KeyPair ( uint8_t * pPublKey ,
size_t * pPublKeySize ,
uint8_t * pSecrKey ,
size_t * pSecrKeySize ,
CRYS_RND_Context_t * pRndContext ,
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.
Parameters
[out] pPublKey Pointer to the public key.
[in,out] pPublKeySize Pointer 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] pSecrKey Pointer to the secret key, including.
[in,out] pSecrKeySize Pointer to the size of buffer for the secret key in bytes - must be at least EC order size (for curve25519 - 32 bytes).
[in,out] pRndContext Pointer to the RND context buffer.
[in] pEcMontTempBuff Pointer 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] pResPoint Pointer to the public (secret) key.
[in,out] pResPointSize Pointer 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] pScalar Pointer to the secret (private) key.
[in] scalarSize Pointer to the size of the secret key in bytes; must be equal to EC order size (for curve25519 - 32 bytes).
[in] pInPoint Pointer to the input point (compressed).
[in] inPointSize Size of the point - must be equal to CRYS_ECMONT_MOD_SIZE_IN_BYTES.
[in] pEcMontTempBuff Pointer 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] pResPoint Pointer to the public (secret) key.
[in,out] pResPointSize Pointer 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] pScalar Pointer to the secret (private) key.
[in] scalarSize Pointer to the size of the scalar in bytes - must be equal to EC order size (for curve25519 - 32 bytes).
[in] pEcMontTempBuff Pointer 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.
Parameters
[out] pPublKey Pointer to the public (secret) key.
[in,out] pPublKeySize Pointer 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] pSecrKey Pointer to the secret (private) key.
[in,out] pSecrKeySize Pointer 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] pSeed Pointer to the given seed - 32 bytes.
[in] seedSize Size of the seed in bytes (must be equal to CRYS_ECMONT_SEEDBYTES).
[in] pEcMontTempBuff Pointer to a temp buffer, for internal use.