forked from wolfSSL/wolfssl
Fix for ecc_map, which is handled in hardware. Fix for NXP LTC mp_mul N value. Fix for MMCAU cast warnings.
This commit is contained in:
@@ -2278,7 +2278,7 @@ int ecc_projective_dbl_point(ecc_point *P, ecc_point *R, mp_int* a,
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if !defined(FREESCALE_LTC_ECC) && !defined(WOLFSSL_STM32_PKA)
|
||||||
/**
|
/**
|
||||||
Map a projective Jacobian point back to affine space
|
Map a projective Jacobian point back to affine space
|
||||||
P [in/out] The point to map
|
P [in/out] The point to map
|
||||||
@@ -2497,6 +2497,7 @@ done:
|
|||||||
return ECC_BAD_ARG_E;
|
return ECC_BAD_ARG_E;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
#endif /* !FREESCALE_LTC_ECC && !WOLFSSL_STM32_PKA */
|
||||||
|
|
||||||
int ecc_map(ecc_point* P, mp_int* modulus, mp_digit mp)
|
int ecc_map(ecc_point* P, mp_int* modulus, mp_digit mp)
|
||||||
{
|
{
|
||||||
@@ -4463,14 +4464,10 @@ static int ecc_make_pub_ex(ecc_key* key, ecc_curve_spec* curveIn,
|
|||||||
err = MEMORY_E;
|
err = MEMORY_E;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#ifndef FREESCALE_LTC_ECC /* this is done in hardware */
|
|
||||||
if (err == MP_OKAY) {
|
if (err == MP_OKAY) {
|
||||||
/* Use constant time map if compiled in */
|
/* Use constant time map if compiled in */
|
||||||
err = ecc_map_ex(pub, curve->prime, mp, 1);
|
err = ecc_map_ex(pub, curve->prime, mp, 1);
|
||||||
}
|
}
|
||||||
#else
|
|
||||||
(void)mp;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
wc_ecc_del_point_ex(base, key->heap);
|
wc_ecc_del_point_ex(base, key->heap);
|
||||||
}
|
}
|
||||||
|
@@ -127,7 +127,7 @@ static int Transform(wc_Md5* md5, const byte* data)
|
|||||||
#ifdef FREESCALE_MMCAU_CLASSIC_SHA
|
#ifdef FREESCALE_MMCAU_CLASSIC_SHA
|
||||||
cau_md5_hash_n((byte*)data, 1, (unsigned char*)md5->digest);
|
cau_md5_hash_n((byte*)data, 1, (unsigned char*)md5->digest);
|
||||||
#else
|
#else
|
||||||
MMCAU_MD5_HashN((byte*)data, 1, (word32*)md5->digest);
|
MMCAU_MD5_HashN((byte*)data, 1, (uint32_t*)md5->digest);
|
||||||
#endif
|
#endif
|
||||||
wolfSSL_CryptHwMutexUnLock();
|
wolfSSL_CryptHwMutexUnLock();
|
||||||
}
|
}
|
||||||
@@ -148,7 +148,7 @@ static int Transform_Len(wc_Md5* md5, const byte* data, word32 len)
|
|||||||
#ifdef FREESCALE_MMCAU_CLASSIC_SHA
|
#ifdef FREESCALE_MMCAU_CLASSIC_SHA
|
||||||
cau_md5_hash_n(local, 1, (unsigned char*)md5->digest);
|
cau_md5_hash_n(local, 1, (unsigned char*)md5->digest);
|
||||||
#else
|
#else
|
||||||
MMCAU_MD5_HashN(local, 1, (word32*)md5->digest);
|
MMCAU_MD5_HashN(local, 1, (uint32_t*)md5->digest);
|
||||||
#endif
|
#endif
|
||||||
data += WC_MD5_BLOCK_SIZE;
|
data += WC_MD5_BLOCK_SIZE;
|
||||||
len -= WC_MD5_BLOCK_SIZE;
|
len -= WC_MD5_BLOCK_SIZE;
|
||||||
@@ -162,7 +162,7 @@ static int Transform_Len(wc_Md5* md5, const byte* data, word32 len)
|
|||||||
(unsigned char*)md5->digest);
|
(unsigned char*)md5->digest);
|
||||||
#else
|
#else
|
||||||
MMCAU_MD5_HashN((byte*)data, len / WC_MD5_BLOCK_SIZE,
|
MMCAU_MD5_HashN((byte*)data, len / WC_MD5_BLOCK_SIZE,
|
||||||
(word32*)md5->digest);
|
(uint32_t*)md5->digest);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
wolfSSL_CryptHwMutexUnLock();
|
wolfSSL_CryptHwMutexUnLock();
|
||||||
|
@@ -136,21 +136,28 @@ int mp_mul(mp_int *A, mp_int *B, mp_int *C)
|
|||||||
uint8_t *ptrC = (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 && ptrN && ptrC) {
|
if (ptrA && ptrB && ptrN && ptrC) {
|
||||||
uint16_t sizeA, sizeB, sizeC = 0;
|
uint16_t sizeA, sizeB, sizeN, sizeC = 0;
|
||||||
|
|
||||||
res = ltc_get_lsb_bin_from_mp_int(ptrA, A, &sizeA);
|
res = ltc_get_lsb_bin_from_mp_int(ptrA, A, &sizeA);
|
||||||
if (res == MP_OKAY)
|
if (res == MP_OKAY)
|
||||||
res = ltc_get_lsb_bin_from_mp_int(ptrB, B, &sizeB);
|
res = ltc_get_lsb_bin_from_mp_int(ptrB, B, &sizeB);
|
||||||
if (res == MP_OKAY) {
|
if (res == MP_OKAY) {
|
||||||
XMEMSET(ptrN, 0xFF, LTC_MAX_INT_BYTES);
|
sizeN = sizeA + sizeB;
|
||||||
|
XMEMSET(ptrN, 0xFF, sizeN);
|
||||||
|
XMEMSET(ptrC, 0, LTC_MAX_INT_BYTES);
|
||||||
|
|
||||||
status = LTC_PKHA_ModMul(LTC_BASE, ptrA, sizeA, ptrB, sizeB, ptrN,
|
status = LTC_PKHA_ModMul(LTC_BASE, ptrA, sizeA, ptrB, sizeB,
|
||||||
LTC_MAX_INT_BYTES, ptrC, &sizeC, kLTC_PKHA_IntegerArith,
|
ptrN, sizeN, ptrC, &sizeC, kLTC_PKHA_IntegerArith,
|
||||||
kLTC_PKHA_NormalValue, kLTC_PKHA_NormalValue,
|
kLTC_PKHA_NormalValue, kLTC_PKHA_NormalValue,
|
||||||
kLTC_PKHA_TimingEqualized);
|
kLTC_PKHA_TimingEqualized);
|
||||||
if (status == kStatus_Success) {
|
if (status == kStatus_Success) {
|
||||||
ltc_reverse_array(ptrC, sizeC);
|
ltc_reverse_array(ptrC, sizeC);
|
||||||
res = mp_read_unsigned_bin(C, ptrC, sizeC);
|
res = mp_read_unsigned_bin(C, ptrC, sizeC);
|
||||||
|
|
||||||
|
#ifndef WOLFSSL_SP_MATH
|
||||||
|
/* fix sign */
|
||||||
|
C->sign = neg;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
res = MP_VAL;
|
res = MP_VAL;
|
||||||
@@ -158,10 +165,6 @@ int mp_mul(mp_int *A, mp_int *B, mp_int *C)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef WOLFSSL_SP_MATH
|
|
||||||
/* fix sign */
|
|
||||||
C->sign = neg;
|
|
||||||
#endif
|
|
||||||
if (ptrA) {
|
if (ptrA) {
|
||||||
XFREE(ptrA, NULL, DYNAMIC_TYPE_BIGINT);
|
XFREE(ptrA, NULL, DYNAMIC_TYPE_BIGINT);
|
||||||
}
|
}
|
||||||
@@ -388,15 +391,14 @@ int mp_mulmod(mp_int *a, mp_int *b, mp_int *c, mp_int *d)
|
|||||||
ptrB, sizeB, ptrC, sizeC, ptrD, &sizeD,
|
ptrB, sizeB, ptrC, sizeC, ptrD, &sizeD,
|
||||||
kLTC_PKHA_IntegerArith, kLTC_PKHA_NormalValue,
|
kLTC_PKHA_IntegerArith, kLTC_PKHA_NormalValue,
|
||||||
kLTC_PKHA_NormalValue, kLTC_PKHA_TimingEqualized);
|
kLTC_PKHA_NormalValue, kLTC_PKHA_TimingEqualized);
|
||||||
if (status != kStatus_Success) {
|
if (status == kStatus_Success) {
|
||||||
|
ltc_reverse_array(ptrD, sizeD);
|
||||||
|
res = mp_read_unsigned_bin(d, ptrD, sizeD);
|
||||||
|
}
|
||||||
|
else {
|
||||||
res = MP_VAL;
|
res = MP_VAL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (res == MP_OKAY) {
|
|
||||||
ltc_reverse_array(ptrD, sizeD);
|
|
||||||
res = mp_read_unsigned_bin(d, ptrD, sizeD);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
res = MP_MEM;
|
res = MP_MEM;
|
||||||
@@ -892,6 +894,16 @@ int wc_ecc_mulmod_ex2(const mp_int* k, ecc_point *G, ecc_point *R, mp_int* a,
|
|||||||
return wc_ecc_mulmod_ex(k, G, R, a, modulus, map, heap);
|
return wc_ecc_mulmod_ex(k, G, R, a, modulus, map, heap);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int ecc_map_ex(ecc_point* P, mp_int* modulus, mp_digit mp, int ct)
|
||||||
|
{
|
||||||
|
/* this is handled in hardware, so no projective mapping needed */
|
||||||
|
(void)P;
|
||||||
|
(void)modulus;
|
||||||
|
(void)mp;
|
||||||
|
(void)ct;
|
||||||
|
return MP_OKAY;
|
||||||
|
}
|
||||||
|
|
||||||
int wc_ecc_point_add(ecc_point *mG, ecc_point *mQ, ecc_point *mR, mp_int *m)
|
int wc_ecc_point_add(ecc_point *mG, ecc_point *mQ, ecc_point *mR, mp_int *m)
|
||||||
{
|
{
|
||||||
int res;
|
int res;
|
||||||
|
Reference in New Issue
Block a user