Mistake on this page?
Report an issue in GitHub or email us
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

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.

Definition at line 64 of file crys_ec_mont_api.h.

#define CRYS_ECMONT_MOD_SIZE_IN_BITS   255U

EC Montgomery curve25519 modulus size in bits, words and bytes

EC Montgomery modulus size in bits.

Definition at line 62 of file crys_ec_mont_api.h.

#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.

Definition at line 66 of file crys_ec_mont_api.h.

#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.

Definition at line 70 of file crys_ec_mont_api.h.

#define CRYS_ECMONT_SCALARMULTBYTES   (CRYS_ECMONT_MOD_SIZE_IN_32BIT_WORDS * SASI_32BIT_WORD_SIZE)

EC Montgomery scalar multiplication size in bytes.

Definition at line 72 of file crys_ec_mont_api.h.

#define CRYS_ECMONT_SEEDBYTES   (CRYS_ECMONT_MOD_SIZE_IN_32BIT_WORDS * SASI_32BIT_WORD_SIZE)

EC Montgomery scalar seed size in bytes.

Definition at line 74 of file crys_ec_mont_api.h.

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.

Definition at line 77 of file crys_ec_mont_api.h.

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.
Important Information for this Arm website

This site uses cookies to store information on your computer. By continuing to use our site, you consent to our cookies. If you are not happy with the use of these cookies, please review our Cookie Policy to learn how they can be disabled. By disabling cookies, some features of the site will not work.