mirror of
https://github.com/wolfSSL/wolfssl.git
synced 2025-07-30 02:37:28 +02:00
Cleanups to KSDK port for LTC.
This commit is contained in:
@ -129,9 +129,9 @@ int mp_mul(mp_int *A, mp_int *B, mp_int *C)
|
||||
#endif
|
||||
|
||||
/* unsigned multiply */
|
||||
uint8_t *ptrA = (uint8_t *)XMALLOC(LTC_MAX_INT_BYTES, 0, DYNAMIC_TYPE_BIGINT);
|
||||
uint8_t *ptrB = (uint8_t *)XMALLOC(LTC_MAX_INT_BYTES, 0, DYNAMIC_TYPE_BIGINT);
|
||||
uint8_t *ptrC = (uint8_t *)XMALLOC(LTC_MAX_INT_BYTES, 0, DYNAMIC_TYPE_BIGINT);
|
||||
uint8_t *ptrA = (uint8_t *)XMALLOC(LTC_MAX_INT_BYTES, NULL, DYNAMIC_TYPE_BIGINT);
|
||||
uint8_t *ptrB = (uint8_t *)XMALLOC(LTC_MAX_INT_BYTES, NULL, DYNAMIC_TYPE_BIGINT);
|
||||
uint8_t *ptrC = (uint8_t *)XMALLOC(LTC_MAX_INT_BYTES, NULL, DYNAMIC_TYPE_BIGINT);
|
||||
|
||||
if (ptrA && ptrB && ptrC) {
|
||||
uint16_t sizeA, sizeB;
|
||||
@ -187,9 +187,9 @@ int mp_mod(mp_int *a, mp_int *b, mp_int *c)
|
||||
{
|
||||
#endif /* FREESCALE_LTC_TFM_RSA_4096_ENABLE */
|
||||
int neg = 0;
|
||||
uint8_t *ptrA = (uint8_t *)XMALLOC(LTC_MAX_INT_BYTES, 0, DYNAMIC_TYPE_BIGINT);
|
||||
uint8_t *ptrB = (uint8_t *)XMALLOC(LTC_MAX_INT_BYTES, 0, DYNAMIC_TYPE_BIGINT);
|
||||
uint8_t *ptrC = (uint8_t *)XMALLOC(LTC_MAX_INT_BYTES, 0, DYNAMIC_TYPE_BIGINT);
|
||||
uint8_t *ptrA = (uint8_t *)XMALLOC(LTC_MAX_INT_BYTES, NULL, DYNAMIC_TYPE_BIGINT);
|
||||
uint8_t *ptrB = (uint8_t *)XMALLOC(LTC_MAX_INT_BYTES, NULL, DYNAMIC_TYPE_BIGINT);
|
||||
uint8_t *ptrC = (uint8_t *)XMALLOC(LTC_MAX_INT_BYTES, NULL, DYNAMIC_TYPE_BIGINT);
|
||||
|
||||
#ifndef WOLFSSL_SP_MATH
|
||||
/* get sign for the result */
|
||||
@ -252,9 +252,9 @@ int mp_invmod(mp_int *a, mp_int *b, mp_int *c)
|
||||
szB = mp_unsigned_bin_size(b);
|
||||
if ((szA <= LTC_MAX_INT_BYTES) && (szB <= LTC_MAX_INT_BYTES)) {
|
||||
#endif
|
||||
uint8_t *ptrA = (uint8_t *)XMALLOC(LTC_MAX_INT_BYTES, 0, DYNAMIC_TYPE_BIGINT);
|
||||
uint8_t *ptrB = (uint8_t *)XMALLOC(LTC_MAX_INT_BYTES, 0, DYNAMIC_TYPE_BIGINT);
|
||||
uint8_t *ptrC = (uint8_t *)XMALLOC(LTC_MAX_INT_BYTES, 0, DYNAMIC_TYPE_BIGINT);
|
||||
uint8_t *ptrA = (uint8_t *)XMALLOC(LTC_MAX_INT_BYTES, NULL, DYNAMIC_TYPE_BIGINT);
|
||||
uint8_t *ptrB = (uint8_t *)XMALLOC(LTC_MAX_INT_BYTES, NULL, DYNAMIC_TYPE_BIGINT);
|
||||
uint8_t *ptrC = (uint8_t *)XMALLOC(LTC_MAX_INT_BYTES, NULL, DYNAMIC_TYPE_BIGINT);
|
||||
|
||||
if (ptrA && ptrB && ptrC) {
|
||||
uint16_t sizeA, sizeB, sizeC;
|
||||
@ -317,8 +317,8 @@ int mp_mulmod(mp_int *a, mp_int *b, mp_int *c, mp_int *d)
|
||||
uint8_t *ptrC = (uint8_t *)XMALLOC(LTC_MAX_INT_BYTES, NULL, DYNAMIC_TYPE_BIGINT);
|
||||
uint8_t *ptrD = (uint8_t *)XMALLOC(LTC_MAX_INT_BYTES, NULL, DYNAMIC_TYPE_BIGINT);
|
||||
|
||||
/* if A or B is negative, subtract abs(A) or abs(B) from modulus to get positive integer representation of the
|
||||
* same number */
|
||||
/* if A or B is negative, subtract abs(A) or abs(B) from modulus to get
|
||||
* positive integer representation of the same number */
|
||||
res = mp_init(&t);
|
||||
#ifndef WOLFSSL_SP_MATH
|
||||
if (a->sign) {
|
||||
@ -347,7 +347,8 @@ int mp_mulmod(mp_int *a, mp_int *b, mp_int *c, mp_int *d)
|
||||
/* (A*B)mod C = ((A mod C) * (B mod C)) mod C */
|
||||
if (res == MP_OKAY && LTC_PKHA_CompareBigNum(ptrA, sizeA, ptrC, sizeC) >= 0) {
|
||||
if (kStatus_Success !=
|
||||
LTC_PKHA_ModRed(LTC_BASE, ptrA, sizeA, ptrC, sizeC, ptrA, &sizeA, kLTC_PKHA_IntegerArith))
|
||||
LTC_PKHA_ModRed(LTC_BASE, ptrA, sizeA, ptrC, sizeC, ptrA,
|
||||
&sizeA, kLTC_PKHA_IntegerArith))
|
||||
{
|
||||
res = MP_VAL;
|
||||
}
|
||||
@ -355,16 +356,18 @@ int mp_mulmod(mp_int *a, mp_int *b, mp_int *c, mp_int *d)
|
||||
if (res == MP_OKAY && (LTC_PKHA_CompareBigNum(ptrB, sizeB, ptrC, sizeC) >= 0))
|
||||
{
|
||||
if (kStatus_Success !=
|
||||
LTC_PKHA_ModRed(LTC_BASE, ptrB, sizeB, ptrC, sizeC, ptrB, &sizeB, kLTC_PKHA_IntegerArith))
|
||||
LTC_PKHA_ModRed(LTC_BASE, ptrB, sizeB, ptrC, sizeC, ptrB,
|
||||
&sizeB, kLTC_PKHA_IntegerArith))
|
||||
{
|
||||
res = MP_VAL;
|
||||
}
|
||||
}
|
||||
|
||||
if (res == MP_OKAY) {
|
||||
if (kStatus_Success != LTC_PKHA_ModMul(LTC_BASE, ptrA, sizeA, ptrB, sizeB, ptrC, sizeC, ptrD, &sizeD,
|
||||
kLTC_PKHA_IntegerArith, kLTC_PKHA_NormalValue,
|
||||
kLTC_PKHA_NormalValue, kLTC_PKHA_TimingEqualized))
|
||||
if (kStatus_Success != LTC_PKHA_ModMul(LTC_BASE, ptrA, sizeA,
|
||||
ptrB, sizeB, ptrC, sizeC, ptrD, &sizeD,
|
||||
kLTC_PKHA_IntegerArith, kLTC_PKHA_NormalValue,
|
||||
kLTC_PKHA_NormalValue, kLTC_PKHA_TimingEqualized))
|
||||
{
|
||||
res = MP_VAL;
|
||||
}
|
||||
@ -427,14 +430,16 @@ int mp_exptmod(mp_int *G, mp_int *X, mp_int *P, mp_int *Y)
|
||||
szB = mp_unsigned_bin_size(X);
|
||||
szC = mp_unsigned_bin_size(P);
|
||||
|
||||
if ((szA <= LTC_MAX_INT_BYTES) && (szB <= LTC_MAX_INT_BYTES) && (szC <= LTC_MAX_INT_BYTES)) {
|
||||
if ((szA <= LTC_MAX_INT_BYTES) && (szB <= LTC_MAX_INT_BYTES) &&
|
||||
(szC <= LTC_MAX_INT_BYTES))
|
||||
{
|
||||
#endif /* FREESCALE_LTC_TFM_RSA_4096_ENABLE */
|
||||
mp_int t;
|
||||
|
||||
uint16_t sizeG, sizeX, sizeP;
|
||||
uint8_t *ptrG = (uint8_t *)XMALLOC(LTC_MAX_INT_BYTES, 0, DYNAMIC_TYPE_BIGINT);
|
||||
uint8_t *ptrX = (uint8_t *)XMALLOC(LTC_MAX_INT_BYTES, 0, DYNAMIC_TYPE_BIGINT);
|
||||
uint8_t *ptrP = (uint8_t *)XMALLOC(LTC_MAX_INT_BYTES, 0, DYNAMIC_TYPE_BIGINT);
|
||||
uint8_t *ptrG = (uint8_t *)XMALLOC(LTC_MAX_INT_BYTES, NULL, DYNAMIC_TYPE_BIGINT);
|
||||
uint8_t *ptrX = (uint8_t *)XMALLOC(LTC_MAX_INT_BYTES, NULL, DYNAMIC_TYPE_BIGINT);
|
||||
uint8_t *ptrP = (uint8_t *)XMALLOC(LTC_MAX_INT_BYTES, NULL, DYNAMIC_TYPE_BIGINT);
|
||||
|
||||
/* if G is negative, add modulus to convert to positive number for LTC */
|
||||
res = mp_init(&t);
|
||||
@ -454,7 +459,8 @@ int mp_exptmod(mp_int *G, mp_int *X, mp_int *P, mp_int *Y)
|
||||
if (res == MP_OKAY)
|
||||
res = ltc_get_lsb_bin_from_mp_int(ptrP, P, &sizeP);
|
||||
|
||||
/* if number if greater that modulo, we must first reduce due to LTC requirement on modular exponentiaton */
|
||||
/* if number if greater that modulo, we must first reduce due to
|
||||
LTC requirement on modular exponentiaton */
|
||||
/* it needs number less than modulus. */
|
||||
/* we can take advantage of modular arithmetic rule that: A^B mod C = ( (A mod C)^B ) mod C
|
||||
and so we do first (A mod N) : LTC does not give size requirement on A versus N,
|
||||
@ -462,7 +468,8 @@ int mp_exptmod(mp_int *G, mp_int *X, mp_int *P, mp_int *Y)
|
||||
*/
|
||||
/* if G >= P then */
|
||||
if (res == MP_OKAY && LTC_PKHA_CompareBigNum(ptrG, sizeG, ptrP, sizeP) >= 0) {
|
||||
res = (int)LTC_PKHA_ModRed(LTC_BASE, ptrG, sizeG, ptrP, sizeP, ptrG, &sizeG, kLTC_PKHA_IntegerArith);
|
||||
res = (int)LTC_PKHA_ModRed(LTC_BASE, ptrG, sizeG, ptrP, sizeP,
|
||||
ptrG, &sizeG, kLTC_PKHA_IntegerArith);
|
||||
|
||||
if (res != kStatus_Success) {
|
||||
res = MP_VAL;
|
||||
@ -470,8 +477,9 @@ int mp_exptmod(mp_int *G, mp_int *X, mp_int *P, mp_int *Y)
|
||||
}
|
||||
|
||||
if (res == MP_OKAY) {
|
||||
res = (int)LTC_PKHA_ModExp(LTC_BASE, ptrG, sizeG, ptrP, sizeP, ptrX, sizeX, ptrP, &sizeP,
|
||||
kLTC_PKHA_IntegerArith, kLTC_PKHA_NormalValue, kLTC_PKHA_TimingEqualized);
|
||||
res = (int)LTC_PKHA_ModExp(LTC_BASE, ptrG, sizeG, ptrP, sizeP,
|
||||
ptrX, sizeX, ptrP, &sizeP, kLTC_PKHA_IntegerArith,
|
||||
kLTC_PKHA_NormalValue, kLTC_PKHA_TimingEqualized);
|
||||
|
||||
if (res != kStatus_Success) {
|
||||
res = MP_VAL;
|
||||
@ -575,7 +583,7 @@ static const uint8_t ltc_ecc256_modulus[32] = {
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF};
|
||||
static const uint8_t ltc_ecc256_r2modn[32] = {
|
||||
static const uint8_t ltc_ecc256_r2modn[32] = { /* R^2 mod N */
|
||||
0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFB, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFD, 0xFF, 0xFF, 0xFF, 0x04, 0x00, 0x00, 0x00};
|
||||
@ -707,9 +715,6 @@ int wc_ecc_mulmod_ex(const mp_int *k, ecc_point *G, ecc_point *R, mp_int* a,
|
||||
status_t status;
|
||||
int res;
|
||||
|
||||
(void)a;
|
||||
(void)heap;
|
||||
|
||||
uint8_t Gxbin[LTC_MAX_ECC_BITS / 8];
|
||||
uint8_t Gybin[LTC_MAX_ECC_BITS / 8];
|
||||
uint8_t kbin[LTC_MAX_INT_BYTES];
|
||||
@ -719,6 +724,9 @@ int wc_ecc_mulmod_ex(const mp_int *k, ecc_point *G, ecc_point *R, mp_int* a,
|
||||
const uint8_t *bCurveParam;
|
||||
const uint8_t *r2modn;
|
||||
|
||||
(void)a;
|
||||
(void)heap;
|
||||
|
||||
if (k == NULL || G == NULL || R == NULL || modulus == NULL) {
|
||||
return ECC_BAD_ARG_E;
|
||||
}
|
||||
@ -731,21 +739,22 @@ int wc_ecc_mulmod_ex(const mp_int *k, ecc_point *G, ecc_point *R, mp_int* a,
|
||||
res = ltc_get_from_mp_int(Gxbin, G->x, szModulus);
|
||||
if (res == MP_OKAY)
|
||||
res = ltc_get_from_mp_int(Gybin, G->y, szModulus);
|
||||
|
||||
if (res != MP_OKAY)
|
||||
return res;
|
||||
|
||||
size = szModulus;
|
||||
|
||||
/* find LTC friendly parameters for the selected curve */
|
||||
if (0 != ltc_get_ecc_specs(&modbin, &r2modn, &aCurveParam, &bCurveParam, size)) {
|
||||
if (ltc_get_ecc_specs(&modbin, &r2modn, &aCurveParam, &bCurveParam, size) != 0) {
|
||||
return ECC_BAD_ARG_E;
|
||||
}
|
||||
|
||||
B.X = &Gxbin[0];
|
||||
B.Y = &Gybin[0];
|
||||
|
||||
status = LTC_PKHA_ECC_PointMul(LTC_BASE, &B, kbin, szkbin, modbin, r2modn, aCurveParam, bCurveParam, size,
|
||||
kLTC_PKHA_TimingEqualized, kLTC_PKHA_IntegerArith, &B, &point_of_infinity);
|
||||
status = LTC_PKHA_ECC_PointMul(LTC_BASE, &B, kbin, szkbin, modbin, r2modn,
|
||||
aCurveParam, bCurveParam, size, kLTC_PKHA_TimingEqualized,
|
||||
kLTC_PKHA_IntegerArith, &B, &point_of_infinity);
|
||||
if (status != kStatus_Success) {
|
||||
return MP_VAL;
|
||||
}
|
||||
@ -817,8 +826,8 @@ int wc_ecc_point_add(ecc_point *mG, ecc_point *mQ, ecc_point *mR, mp_int *m)
|
||||
B.X = Qxbin;
|
||||
B.Y = Qybin;
|
||||
|
||||
status = LTC_PKHA_ECC_PointAdd(LTC_BASE, &A, &B, modbin, r2modn, aCurveParam, bCurveParam, size,
|
||||
kLTC_PKHA_IntegerArith, &A);
|
||||
status = LTC_PKHA_ECC_PointAdd(LTC_BASE, &A, &B, modbin, r2modn,
|
||||
aCurveParam, bCurveParam, size, kLTC_PKHA_IntegerArith, &A);
|
||||
if (status != kStatus_Success) {
|
||||
res = MP_VAL;
|
||||
}
|
||||
@ -1131,7 +1140,8 @@ status_t LTC_PKHA_Curve25519ComputeY(ltc_pkha_ecc_point_t *ltcPoint)
|
||||
/* if type is set, the input point p is in Montgomery curve coordinates,
|
||||
so there is a map to Weierstrass curve */
|
||||
/* q output point is always in Montgomery curve coordinates */
|
||||
int nxp_ltc_curve25519(ECPoint *q, const byte *n, const ECPoint *p, fsl_ltc_ecc_coordinate_system_t type)
|
||||
int nxp_ltc_curve25519(ECPoint *q, const byte *n, const ECPoint *p,
|
||||
fsl_ltc_ecc_coordinate_system_t type)
|
||||
{
|
||||
status_t status;
|
||||
ltc_pkha_ecc_point_t ltcPoint;
|
||||
|
Reference in New Issue
Block a user