MCUXpresso SDK API Reference Manual
Rev. 0
NXP Semiconductors
|
This section describes the programming interface of the LTC PKHA driver.
Data Structures | |
struct | ltc_pkha_ecc_point_t |
PKHA ECC point structure. More... | |
Enumerations | |
enum | ltc_pkha_timing_t { kLTC_PKHA_NoTimingEqualized = 0U, kLTC_PKHA_TimingEqualized = 1U } |
Use of timing equalized version of a PKHA function. More... | |
enum | ltc_pkha_f2m_t { kLTC_PKHA_IntegerArith = 0U, kLTC_PKHA_F2mArith = 1U } |
Integer vs binary polynomial arithmetic selection. More... | |
enum | ltc_pkha_montgomery_form_t { kLTC_PKHA_NormalValue = 0U, kLTC_PKHA_MontgomeryFormat = 1U } |
Montgomery or normal PKHA input format. More... | |
Functions | |
int | LTC_PKHA_CompareBigNum (const uint8_t *a, size_t sizeA, const uint8_t *b, size_t sizeB) |
Compare two PKHA big numbers. More... | |
status_t | LTC_PKHA_NormalToMontgomery (LTC_Type *base, const uint8_t *N, uint16_t sizeN, uint8_t *A, uint16_t *sizeA, uint8_t *B, uint16_t *sizeB, uint8_t *R2, uint16_t *sizeR2, ltc_pkha_timing_t equalTime, ltc_pkha_f2m_t arithType) |
Converts from integer to Montgomery format. More... | |
status_t | LTC_PKHA_MontgomeryToNormal (LTC_Type *base, const uint8_t *N, uint16_t sizeN, uint8_t *A, uint16_t *sizeA, uint8_t *B, uint16_t *sizeB, ltc_pkha_timing_t equalTime, ltc_pkha_f2m_t arithType) |
Converts from Montgomery format to int. More... | |
status_t | LTC_PKHA_ModAdd (LTC_Type *base, const uint8_t *A, uint16_t sizeA, const uint8_t *B, uint16_t sizeB, const uint8_t *N, uint16_t sizeN, uint8_t *result, uint16_t *resultSize, ltc_pkha_f2m_t arithType) |
Performs modular addition - (A + B) mod N. More... | |
status_t | LTC_PKHA_ModSub1 (LTC_Type *base, const uint8_t *A, uint16_t sizeA, const uint8_t *B, uint16_t sizeB, const uint8_t *N, uint16_t sizeN, uint8_t *result, uint16_t *resultSize) |
Performs modular subtraction - (A - B) mod N. More... | |
status_t | LTC_PKHA_ModSub2 (LTC_Type *base, const uint8_t *A, uint16_t sizeA, const uint8_t *B, uint16_t sizeB, const uint8_t *N, uint16_t sizeN, uint8_t *result, uint16_t *resultSize) |
Performs modular subtraction - (B - A) mod N. More... | |
status_t | LTC_PKHA_ModMul (LTC_Type *base, const uint8_t *A, uint16_t sizeA, const uint8_t *B, uint16_t sizeB, const uint8_t *N, uint16_t sizeN, uint8_t *result, uint16_t *resultSize, ltc_pkha_f2m_t arithType, ltc_pkha_montgomery_form_t montIn, ltc_pkha_montgomery_form_t montOut, ltc_pkha_timing_t equalTime) |
Performs modular multiplication - (A x B) mod N. More... | |
status_t | LTC_PKHA_ModExp (LTC_Type *base, const uint8_t *A, uint16_t sizeA, const uint8_t *N, uint16_t sizeN, const uint8_t *E, uint16_t sizeE, uint8_t *result, uint16_t *resultSize, ltc_pkha_f2m_t arithType, ltc_pkha_montgomery_form_t montIn, ltc_pkha_timing_t equalTime) |
Performs modular exponentiation - (A^E) mod N. More... | |
status_t | LTC_PKHA_ModRed (LTC_Type *base, const uint8_t *A, uint16_t sizeA, const uint8_t *N, uint16_t sizeN, uint8_t *result, uint16_t *resultSize, ltc_pkha_f2m_t arithType) |
Performs modular reduction - (A) mod N. More... | |
status_t | LTC_PKHA_ModInv (LTC_Type *base, const uint8_t *A, uint16_t sizeA, const uint8_t *N, uint16_t sizeN, uint8_t *result, uint16_t *resultSize, ltc_pkha_f2m_t arithType) |
Performs modular inversion - (A^-1) mod N. More... | |
status_t | LTC_PKHA_ModR2 (LTC_Type *base, const uint8_t *N, uint16_t sizeN, uint8_t *result, uint16_t *resultSize, ltc_pkha_f2m_t arithType) |
Computes integer Montgomery factor R^2 mod N. More... | |
status_t | LTC_PKHA_GCD (LTC_Type *base, const uint8_t *A, uint16_t sizeA, const uint8_t *N, uint16_t sizeN, uint8_t *result, uint16_t *resultSize, ltc_pkha_f2m_t arithType) |
Calculates the greatest common divisor - GCD (A, N). More... | |
status_t | LTC_PKHA_PrimalityTest (LTC_Type *base, const uint8_t *A, uint16_t sizeA, const uint8_t *B, uint16_t sizeB, const uint8_t *N, uint16_t sizeN, bool *res) |
Executes Miller-Rabin primality test. More... | |
status_t | LTC_PKHA_ECC_PointAdd (LTC_Type *base, const ltc_pkha_ecc_point_t *A, const ltc_pkha_ecc_point_t *B, const uint8_t *N, const uint8_t *R2modN, const uint8_t *aCurveParam, const uint8_t *bCurveParam, uint8_t size, ltc_pkha_f2m_t arithType, ltc_pkha_ecc_point_t *result) |
Adds elliptic curve points - A + B. More... | |
status_t | LTC_PKHA_ECC_PointDouble (LTC_Type *base, const ltc_pkha_ecc_point_t *B, const uint8_t *N, const uint8_t *aCurveParam, const uint8_t *bCurveParam, uint8_t size, ltc_pkha_f2m_t arithType, ltc_pkha_ecc_point_t *result) |
Doubles elliptic curve points - B + B. More... | |
status_t | LTC_PKHA_ECC_PointMul (LTC_Type *base, const ltc_pkha_ecc_point_t *A, const uint8_t *E, uint8_t sizeE, const uint8_t *N, const uint8_t *R2modN, const uint8_t *aCurveParam, const uint8_t *bCurveParam, uint8_t size, ltc_pkha_timing_t equalTime, ltc_pkha_f2m_t arithType, ltc_pkha_ecc_point_t *result, bool *infinity) |
Multiplies an elliptic curve point by a scalar - E x (A0, A1). More... | |
struct ltc_pkha_ecc_point_t |
enum ltc_pkha_timing_t |
enum ltc_pkha_f2m_t |
int LTC_PKHA_CompareBigNum | ( | const uint8_t * | a, |
size_t | sizeA, | ||
const uint8_t * | b, | ||
size_t | sizeB | ||
) |
Compare two PKHA big numbers. Return 1 for a > b, -1 for a < b and 0 if they are same. PKHA big number is lsbyte first. Thus the comparison starts at msbyte which is the last member of tested arrays.
a | First integer represented as an array of bytes, lsbyte first. |
sizeA | Size in bytes of the first integer. |
b | Second integer represented as an array of bytes, lsbyte first. |
sizeB | Size in bytes of the second integer. |
status_t LTC_PKHA_NormalToMontgomery | ( | LTC_Type * | base, |
const uint8_t * | N, | ||
uint16_t | sizeN, | ||
uint8_t * | A, | ||
uint16_t * | sizeA, | ||
uint8_t * | B, | ||
uint16_t * | sizeB, | ||
uint8_t * | R2, | ||
uint16_t * | sizeR2, | ||
ltc_pkha_timing_t | equalTime, | ||
ltc_pkha_f2m_t | arithType | ||
) |
This function computes R2 mod N and optionally converts A or B into Montgomery format of A or B.
base | LTC peripheral base address | |
N | modulus | |
sizeN | size of N in bytes | |
[in,out] | A | The first input in non-Montgomery format. Output Montgomery format of the first input. |
[in,out] | sizeA | pointer to size variable. On input it holds size of input A in bytes. On output it holds size of Montgomery format of A in bytes. |
[in,out] | B | Second input in non-Montgomery format. Output Montgomery format of the second input. |
[in,out] | sizeB | pointer to size variable. On input it holds size of input B in bytes. On output it holds size of Montgomery format of B in bytes. |
[out] | R2 | Output Montgomery factor R2 mod N. |
[out] | sizeR2 | pointer to size variable. On output it holds size of Montgomery factor R2 mod N in bytes. |
equalTime | Run the function time equalized or no timing equalization. | |
arithType | Type of arithmetic to perform (integer or F2m) |
status_t LTC_PKHA_MontgomeryToNormal | ( | LTC_Type * | base, |
const uint8_t * | N, | ||
uint16_t | sizeN, | ||
uint8_t * | A, | ||
uint16_t * | sizeA, | ||
uint8_t * | B, | ||
uint16_t * | sizeB, | ||
ltc_pkha_timing_t | equalTime, | ||
ltc_pkha_f2m_t | arithType | ||
) |
This function converts Montgomery format of A or B into int A or B.
base | LTC peripheral base address | |
N | modulus. | |
sizeN | size of N modulus in bytes. | |
[in,out] | A | Input first number in Montgomery format. Output is non-Montgomery format. |
[in,out] | sizeA | pointer to size variable. On input it holds size of the input A in bytes. On output it holds size of non-Montgomery A in bytes. |
[in,out] | B | Input first number in Montgomery format. Output is non-Montgomery format. |
[in,out] | sizeB | pointer to size variable. On input it holds size of the input B in bytes. On output it holds size of non-Montgomery B in bytes. |
equalTime | Run the function time equalized or no timing equalization. | |
arithType | Type of arithmetic to perform (integer or F2m) |
status_t LTC_PKHA_ModAdd | ( | LTC_Type * | base, |
const uint8_t * | A, | ||
uint16_t | sizeA, | ||
const uint8_t * | B, | ||
uint16_t | sizeB, | ||
const uint8_t * | N, | ||
uint16_t | sizeN, | ||
uint8_t * | result, | ||
uint16_t * | resultSize, | ||
ltc_pkha_f2m_t | arithType | ||
) |
This function performs modular addition of (A + B) mod N, with either integer or binary polynomial (F2m) inputs. In the F2m form, this function is equivalent to a bitwise XOR and it is functionally the same as subtraction.
base | LTC peripheral base address | |
A | first addend (integer or binary polynomial) | |
sizeA | Size of A in bytes | |
B | second addend (integer or binary polynomial) | |
sizeB | Size of B in bytes | |
N | modulus. For F2m operation this can be NULL, as N is ignored during F2m polynomial addition. | |
sizeN | Size of N in bytes. This must be given for both integer and F2m polynomial additions. | |
[out] | result | Output array to store result of operation |
[out] | resultSize | Output size of operation in bytes |
arithType | Type of arithmetic to perform (integer or F2m) |
status_t LTC_PKHA_ModSub1 | ( | LTC_Type * | base, |
const uint8_t * | A, | ||
uint16_t | sizeA, | ||
const uint8_t * | B, | ||
uint16_t | sizeB, | ||
const uint8_t * | N, | ||
uint16_t | sizeN, | ||
uint8_t * | result, | ||
uint16_t * | resultSize | ||
) |
This function performs modular subtraction of (A - B) mod N with integer inputs.
base | LTC peripheral base address | |
A | first addend (integer or binary polynomial) | |
sizeA | Size of A in bytes | |
B | second addend (integer or binary polynomial) | |
sizeB | Size of B in bytes | |
N | modulus | |
sizeN | Size of N in bytes | |
[out] | result | Output array to store result of operation |
[out] | resultSize | Output size of operation in bytes |
status_t LTC_PKHA_ModSub2 | ( | LTC_Type * | base, |
const uint8_t * | A, | ||
uint16_t | sizeA, | ||
const uint8_t * | B, | ||
uint16_t | sizeB, | ||
const uint8_t * | N, | ||
uint16_t | sizeN, | ||
uint8_t * | result, | ||
uint16_t * | resultSize | ||
) |
This function performs modular subtraction of (B - A) mod N, with integer inputs.
base | LTC peripheral base address | |
A | first addend (integer or binary polynomial) | |
sizeA | Size of A in bytes | |
B | second addend (integer or binary polynomial) | |
sizeB | Size of B in bytes | |
N | modulus | |
sizeN | Size of N in bytes | |
[out] | result | Output array to store result of operation |
[out] | resultSize | Output size of operation in bytes |
status_t LTC_PKHA_ModMul | ( | LTC_Type * | base, |
const uint8_t * | A, | ||
uint16_t | sizeA, | ||
const uint8_t * | B, | ||
uint16_t | sizeB, | ||
const uint8_t * | N, | ||
uint16_t | sizeN, | ||
uint8_t * | result, | ||
uint16_t * | resultSize, | ||
ltc_pkha_f2m_t | arithType, | ||
ltc_pkha_montgomery_form_t | montIn, | ||
ltc_pkha_montgomery_form_t | montOut, | ||
ltc_pkha_timing_t | equalTime | ||
) |
This function performs modular multiplication with either integer or binary polynomial (F2m) inputs. It can optionally specify whether inputs and/or outputs will be in Montgomery form or not.
base | LTC peripheral base address | |
A | first addend (integer or binary polynomial) | |
sizeA | Size of A in bytes | |
B | second addend (integer or binary polynomial) | |
sizeB | Size of B in bytes | |
N | modulus. | |
sizeN | Size of N in bytes | |
[out] | result | Output array to store result of operation |
[out] | resultSize | Output size of operation in bytes |
arithType | Type of arithmetic to perform (integer or F2m) | |
montIn | Format of inputs | |
montOut | Format of output | |
equalTime | Run the function time equalized or no timing equalization. This argument is ignored for F2m modular multiplication. |
status_t LTC_PKHA_ModExp | ( | LTC_Type * | base, |
const uint8_t * | A, | ||
uint16_t | sizeA, | ||
const uint8_t * | N, | ||
uint16_t | sizeN, | ||
const uint8_t * | E, | ||
uint16_t | sizeE, | ||
uint8_t * | result, | ||
uint16_t * | resultSize, | ||
ltc_pkha_f2m_t | arithType, | ||
ltc_pkha_montgomery_form_t | montIn, | ||
ltc_pkha_timing_t | equalTime | ||
) |
This function performs modular exponentiation with either integer or binary polynomial (F2m) inputs.
base | LTC peripheral base address | |
A | first addend (integer or binary polynomial) | |
sizeA | Size of A in bytes | |
N | modulus | |
sizeN | Size of N in bytes | |
E | exponent | |
sizeE | Size of E in bytes | |
[out] | result | Output array to store result of operation |
[out] | resultSize | Output size of operation in bytes |
montIn | Format of A input (normal or Montgomery) | |
arithType | Type of arithmetic to perform (integer or F2m) | |
equalTime | Run the function time equalized or no timing equalization. |
status_t LTC_PKHA_ModRed | ( | LTC_Type * | base, |
const uint8_t * | A, | ||
uint16_t | sizeA, | ||
const uint8_t * | N, | ||
uint16_t | sizeN, | ||
uint8_t * | result, | ||
uint16_t * | resultSize, | ||
ltc_pkha_f2m_t | arithType | ||
) |
This function performs modular reduction with either integer or binary polynomial (F2m) inputs.
base | LTC peripheral base address | |
A | first addend (integer or binary polynomial) | |
sizeA | Size of A in bytes | |
N | modulus | |
sizeN | Size of N in bytes | |
[out] | result | Output array to store result of operation |
[out] | resultSize | Output size of operation in bytes |
arithType | Type of arithmetic to perform (integer or F2m) |
status_t LTC_PKHA_ModInv | ( | LTC_Type * | base, |
const uint8_t * | A, | ||
uint16_t | sizeA, | ||
const uint8_t * | N, | ||
uint16_t | sizeN, | ||
uint8_t * | result, | ||
uint16_t * | resultSize, | ||
ltc_pkha_f2m_t | arithType | ||
) |
This function performs modular inversion with either integer or binary polynomial (F2m) inputs.
base | LTC peripheral base address | |
A | first addend (integer or binary polynomial) | |
sizeA | Size of A in bytes | |
N | modulus | |
sizeN | Size of N in bytes | |
[out] | result | Output array to store result of operation |
[out] | resultSize | Output size of operation in bytes |
arithType | Type of arithmetic to perform (integer or F2m) |
status_t LTC_PKHA_ModR2 | ( | LTC_Type * | base, |
const uint8_t * | N, | ||
uint16_t | sizeN, | ||
uint8_t * | result, | ||
uint16_t * | resultSize, | ||
ltc_pkha_f2m_t | arithType | ||
) |
This function computes a constant to assist in converting operands into the Montgomery residue system representation.
base | LTC peripheral base address | |
N | modulus | |
sizeN | Size of N in bytes | |
[out] | result | Output array to store result of operation |
[out] | resultSize | Output size of operation in bytes |
arithType | Type of arithmetic to perform (integer or F2m) |
status_t LTC_PKHA_GCD | ( | LTC_Type * | base, |
const uint8_t * | A, | ||
uint16_t | sizeA, | ||
const uint8_t * | N, | ||
uint16_t | sizeN, | ||
uint8_t * | result, | ||
uint16_t * | resultSize, | ||
ltc_pkha_f2m_t | arithType | ||
) |
This function calculates the greatest common divisor of two inputs with either integer or binary polynomial (F2m) inputs.
base | LTC peripheral base address | |
A | first value (must be smaller than or equal to N) | |
sizeA | Size of A in bytes | |
N | second value (must be non-zero) | |
sizeN | Size of N in bytes | |
[out] | result | Output array to store result of operation |
[out] | resultSize | Output size of operation in bytes |
arithType | Type of arithmetic to perform (integer or F2m) |
status_t LTC_PKHA_PrimalityTest | ( | LTC_Type * | base, |
const uint8_t * | A, | ||
uint16_t | sizeA, | ||
const uint8_t * | B, | ||
uint16_t | sizeB, | ||
const uint8_t * | N, | ||
uint16_t | sizeN, | ||
bool * | res | ||
) |
This function calculates whether or not a candidate prime number is likely to be a prime.
base | LTC peripheral base address | |
A | initial random seed | |
sizeA | Size of A in bytes | |
B | number of trial runs | |
sizeB | Size of B in bytes | |
N | candidate prime integer | |
sizeN | Size of N in bytes | |
[out] | res | True if the value is likely prime or false otherwise |
status_t LTC_PKHA_ECC_PointAdd | ( | LTC_Type * | base, |
const ltc_pkha_ecc_point_t * | A, | ||
const ltc_pkha_ecc_point_t * | B, | ||
const uint8_t * | N, | ||
const uint8_t * | R2modN, | ||
const uint8_t * | aCurveParam, | ||
const uint8_t * | bCurveParam, | ||
uint8_t | size, | ||
ltc_pkha_f2m_t | arithType, | ||
ltc_pkha_ecc_point_t * | result | ||
) |
This function performs ECC point addition over a prime field (Fp) or binary field (F2m) using affine coordinates.
base | LTC peripheral base address | |
A | Left-hand point | |
B | Right-hand point | |
N | Prime modulus of the field | |
R2modN | NULL (the function computes R2modN internally) or pointer to pre-computed R2modN (obtained from LTC_PKHA_ModR2() function). | |
aCurveParam | A parameter from curve equation | |
bCurveParam | B parameter from curve equation (constant) | |
size | Size in bytes of curve points and parameters | |
arithType | Type of arithmetic to perform (integer or F2m) | |
[out] | result | Result point |
status_t LTC_PKHA_ECC_PointDouble | ( | LTC_Type * | base, |
const ltc_pkha_ecc_point_t * | B, | ||
const uint8_t * | N, | ||
const uint8_t * | aCurveParam, | ||
const uint8_t * | bCurveParam, | ||
uint8_t | size, | ||
ltc_pkha_f2m_t | arithType, | ||
ltc_pkha_ecc_point_t * | result | ||
) |
This function performs ECC point doubling over a prime field (Fp) or binary field (F2m) using affine coordinates.
base | LTC peripheral base address | |
B | Point to double | |
N | Prime modulus of the field | |
aCurveParam | A parameter from curve equation | |
bCurveParam | B parameter from curve equation (constant) | |
size | Size in bytes of curve points and parameters | |
arithType | Type of arithmetic to perform (integer or F2m) | |
[out] | result | Result point |
status_t LTC_PKHA_ECC_PointMul | ( | LTC_Type * | base, |
const ltc_pkha_ecc_point_t * | A, | ||
const uint8_t * | E, | ||
uint8_t | sizeE, | ||
const uint8_t * | N, | ||
const uint8_t * | R2modN, | ||
const uint8_t * | aCurveParam, | ||
const uint8_t * | bCurveParam, | ||
uint8_t | size, | ||
ltc_pkha_timing_t | equalTime, | ||
ltc_pkha_f2m_t | arithType, | ||
ltc_pkha_ecc_point_t * | result, | ||
bool * | infinity | ||
) |
This function performs ECC point multiplication to multiply an ECC point by a scalar integer multiplier over a prime field (Fp) or a binary field (F2m).
base | LTC peripheral base address | |
A | Point as multiplicand | |
E | Scalar multiple | |
sizeE | The size of E, in bytes | |
N | Modulus, a prime number for the Fp field or Irreducible polynomial for F2m field. | |
R2modN | NULL (the function computes R2modN internally) or pointer to pre-computed R2modN (obtained from LTC_PKHA_ModR2() function). | |
aCurveParam | A parameter from curve equation | |
bCurveParam | B parameter from curve equation (C parameter for operation over F2m). | |
size | Size in bytes of curve points and parameters | |
equalTime | Run the function time equalized or no timing equalization. | |
arithType | Type of arithmetic to perform (integer or F2m) | |
[out] | result | Result point |
[out] | infinity | Output true if the result is point of infinity, and false otherwise. Writing of this output will be ignored if the argument is NULL. |