mirror of
https://github.com/wolfSSL/wolfssl.git
synced 2025-07-31 11:17:29 +02:00
Merge pull request #2929 from dgarske/sp_rsalowmem
Fix for SP math with `RSA_LOW_MEM` (ARM only)
This commit is contained in:
@ -7489,63 +7489,6 @@ int sp_RsaPublic_2048(const byte* in, word32 inLen, mp_int* em, mp_int* mm,
|
|||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined(SP_RSA_PRIVATE_EXP_D) || defined(RSA_LOW_MEM)
|
|
||||||
sp_digit* a;
|
|
||||||
sp_digit* d = NULL;
|
|
||||||
sp_digit* m;
|
|
||||||
sp_digit* r;
|
|
||||||
int err = MP_OKAY;
|
|
||||||
|
|
||||||
(void)pm;
|
|
||||||
(void)qm;
|
|
||||||
(void)dpm;
|
|
||||||
(void)dqm;
|
|
||||||
(void)qim;
|
|
||||||
|
|
||||||
if (*outLen < 256U) {
|
|
||||||
err = MP_TO_E;
|
|
||||||
}
|
|
||||||
if (err == MP_OKAY) {
|
|
||||||
if (mp_count_bits(dm) > 2048) {
|
|
||||||
err = MP_READ_E;
|
|
||||||
}
|
|
||||||
if (inLen > 256) {
|
|
||||||
err = MP_READ_E;
|
|
||||||
}
|
|
||||||
if (mp_count_bits(mm) != 2048) {
|
|
||||||
err = MP_READ_E;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (err == MP_OKAY) {
|
|
||||||
d = (sp_digit*)XMALLOC(sizeof(sp_digit) * 64 * 4, NULL,
|
|
||||||
DYNAMIC_TYPE_RSA);
|
|
||||||
if (d == NULL) {
|
|
||||||
err = MEMORY_E;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (err == MP_OKAY) {
|
|
||||||
a = d + 64;
|
|
||||||
m = a + 128;
|
|
||||||
r = a;
|
|
||||||
|
|
||||||
sp_2048_from_bin(a, 64, in, inLen);
|
|
||||||
sp_2048_from_mp(d, 64, dm);
|
|
||||||
sp_2048_from_mp(m, 64, mm);
|
|
||||||
err = sp_2048_mod_exp_64(r, a, d, 2048, m, 0);
|
|
||||||
}
|
|
||||||
if (err == MP_OKAY) {
|
|
||||||
sp_2048_to_bin(r, out);
|
|
||||||
*outLen = 256;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (d != NULL) {
|
|
||||||
XMEMSET(d, 0, sizeof(sp_digit) * 64);
|
|
||||||
XFREE(d, NULL, DYNAMIC_TYPE_RSA);
|
|
||||||
}
|
|
||||||
|
|
||||||
return err;
|
|
||||||
#else
|
|
||||||
#ifndef WOLFSSL_RSA_PUBLIC_ONLY
|
#ifndef WOLFSSL_RSA_PUBLIC_ONLY
|
||||||
/* Conditionally add a and b using the mask m.
|
/* Conditionally add a and b using the mask m.
|
||||||
* m is -1 to add and 0 when not.
|
* m is -1 to add and 0 when not.
|
||||||
@ -7774,6 +7717,63 @@ int sp_RsaPrivate_2048(const byte* in, word32 inLen, mp_int* dm,
|
|||||||
mp_int* pm, mp_int* qm, mp_int* dpm, mp_int* dqm, mp_int* qim, mp_int* mm,
|
mp_int* pm, mp_int* qm, mp_int* dpm, mp_int* dqm, mp_int* qim, mp_int* mm,
|
||||||
byte* out, word32* outLen)
|
byte* out, word32* outLen)
|
||||||
{
|
{
|
||||||
|
#if defined(SP_RSA_PRIVATE_EXP_D) || defined(RSA_LOW_MEM)
|
||||||
|
sp_digit* a;
|
||||||
|
sp_digit* d = NULL;
|
||||||
|
sp_digit* m;
|
||||||
|
sp_digit* r;
|
||||||
|
int err = MP_OKAY;
|
||||||
|
|
||||||
|
(void)pm;
|
||||||
|
(void)qm;
|
||||||
|
(void)dpm;
|
||||||
|
(void)dqm;
|
||||||
|
(void)qim;
|
||||||
|
|
||||||
|
if (*outLen < 256U) {
|
||||||
|
err = MP_TO_E;
|
||||||
|
}
|
||||||
|
if (err == MP_OKAY) {
|
||||||
|
if (mp_count_bits(dm) > 2048) {
|
||||||
|
err = MP_READ_E;
|
||||||
|
}
|
||||||
|
if (inLen > 256) {
|
||||||
|
err = MP_READ_E;
|
||||||
|
}
|
||||||
|
if (mp_count_bits(mm) != 2048) {
|
||||||
|
err = MP_READ_E;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (err == MP_OKAY) {
|
||||||
|
d = (sp_digit*)XMALLOC(sizeof(sp_digit) * 64 * 4, NULL,
|
||||||
|
DYNAMIC_TYPE_RSA);
|
||||||
|
if (d == NULL) {
|
||||||
|
err = MEMORY_E;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (err == MP_OKAY) {
|
||||||
|
a = d + 64;
|
||||||
|
m = a + 128;
|
||||||
|
r = a;
|
||||||
|
|
||||||
|
sp_2048_from_bin(a, 64, in, inLen);
|
||||||
|
sp_2048_from_mp(d, 64, dm);
|
||||||
|
sp_2048_from_mp(m, 64, mm);
|
||||||
|
err = sp_2048_mod_exp_64(r, a, d, 2048, m, 0);
|
||||||
|
}
|
||||||
|
if (err == MP_OKAY) {
|
||||||
|
sp_2048_to_bin(r, out);
|
||||||
|
*outLen = 256;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (d != NULL) {
|
||||||
|
XMEMSET(d, 0, sizeof(sp_digit) * 64);
|
||||||
|
XFREE(d, NULL, DYNAMIC_TYPE_RSA);
|
||||||
|
}
|
||||||
|
|
||||||
|
return err;
|
||||||
|
#else
|
||||||
#if (!defined(WOLFSSL_SP_SMALL) && !defined(WOLFSSL_SMALL_STACK)) || defined(WOLFSSL_SP_NO_MALLOC)
|
#if (!defined(WOLFSSL_SP_SMALL) && !defined(WOLFSSL_SMALL_STACK)) || defined(WOLFSSL_SP_NO_MALLOC)
|
||||||
sp_digit a[64 * 2];
|
sp_digit a[64 * 2];
|
||||||
sp_digit p[32], q[32], dp[32];
|
sp_digit p[32], q[32], dp[32];
|
||||||
@ -7869,11 +7869,10 @@ int sp_RsaPrivate_2048(const byte* in, word32 inLen, mp_int* dm,
|
|||||||
XMEMSET(q, 0, sizeof(q));
|
XMEMSET(q, 0, sizeof(q));
|
||||||
XMEMSET(dp, 0, sizeof(dp));
|
XMEMSET(dp, 0, sizeof(dp));
|
||||||
#endif
|
#endif
|
||||||
|
#endif /* SP_RSA_PRIVATE_EXP_D || RSA_LOW_MEM */
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
#endif /* WOLFSSL_RSA_PUBLIC_ONLY */
|
#endif /* WOLFSSL_RSA_PUBLIC_ONLY */
|
||||||
#endif /* SP_RSA_PRIVATE_EXP_D || RSA_LOW_MEM */
|
|
||||||
#endif /* WOLFSSL_HAVE_SP_RSA */
|
#endif /* WOLFSSL_HAVE_SP_RSA */
|
||||||
#if defined(WOLFSSL_HAVE_SP_DH) || (defined(WOLFSSL_HAVE_SP_RSA) && \
|
#if defined(WOLFSSL_HAVE_SP_DH) || (defined(WOLFSSL_HAVE_SP_RSA) && \
|
||||||
!defined(WOLFSSL_RSA_PUBLIC_ONLY))
|
!defined(WOLFSSL_RSA_PUBLIC_ONLY))
|
||||||
@ -19035,63 +19034,6 @@ int sp_RsaPublic_3072(const byte* in, word32 inLen, mp_int* em, mp_int* mm,
|
|||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined(SP_RSA_PRIVATE_EXP_D) || defined(RSA_LOW_MEM)
|
|
||||||
sp_digit* a;
|
|
||||||
sp_digit* d = NULL;
|
|
||||||
sp_digit* m;
|
|
||||||
sp_digit* r;
|
|
||||||
int err = MP_OKAY;
|
|
||||||
|
|
||||||
(void)pm;
|
|
||||||
(void)qm;
|
|
||||||
(void)dpm;
|
|
||||||
(void)dqm;
|
|
||||||
(void)qim;
|
|
||||||
|
|
||||||
if (*outLen < 384U) {
|
|
||||||
err = MP_TO_E;
|
|
||||||
}
|
|
||||||
if (err == MP_OKAY) {
|
|
||||||
if (mp_count_bits(dm) > 3072) {
|
|
||||||
err = MP_READ_E;
|
|
||||||
}
|
|
||||||
if (inLen > 384) {
|
|
||||||
err = MP_READ_E;
|
|
||||||
}
|
|
||||||
if (mp_count_bits(mm) != 3072) {
|
|
||||||
err = MP_READ_E;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (err == MP_OKAY) {
|
|
||||||
d = (sp_digit*)XMALLOC(sizeof(sp_digit) * 96 * 4, NULL,
|
|
||||||
DYNAMIC_TYPE_RSA);
|
|
||||||
if (d == NULL) {
|
|
||||||
err = MEMORY_E;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (err == MP_OKAY) {
|
|
||||||
a = d + 96;
|
|
||||||
m = a + 192;
|
|
||||||
r = a;
|
|
||||||
|
|
||||||
sp_3072_from_bin(a, 96, in, inLen);
|
|
||||||
sp_3072_from_mp(d, 96, dm);
|
|
||||||
sp_3072_from_mp(m, 96, mm);
|
|
||||||
err = sp_3072_mod_exp_96(r, a, d, 3072, m, 0);
|
|
||||||
}
|
|
||||||
if (err == MP_OKAY) {
|
|
||||||
sp_3072_to_bin(r, out);
|
|
||||||
*outLen = 384;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (d != NULL) {
|
|
||||||
XMEMSET(d, 0, sizeof(sp_digit) * 96);
|
|
||||||
XFREE(d, NULL, DYNAMIC_TYPE_RSA);
|
|
||||||
}
|
|
||||||
|
|
||||||
return err;
|
|
||||||
#else
|
|
||||||
#ifndef WOLFSSL_RSA_PUBLIC_ONLY
|
#ifndef WOLFSSL_RSA_PUBLIC_ONLY
|
||||||
/* Conditionally add a and b using the mask m.
|
/* Conditionally add a and b using the mask m.
|
||||||
* m is -1 to add and 0 when not.
|
* m is -1 to add and 0 when not.
|
||||||
@ -19400,6 +19342,63 @@ int sp_RsaPrivate_3072(const byte* in, word32 inLen, mp_int* dm,
|
|||||||
mp_int* pm, mp_int* qm, mp_int* dpm, mp_int* dqm, mp_int* qim, mp_int* mm,
|
mp_int* pm, mp_int* qm, mp_int* dpm, mp_int* dqm, mp_int* qim, mp_int* mm,
|
||||||
byte* out, word32* outLen)
|
byte* out, word32* outLen)
|
||||||
{
|
{
|
||||||
|
#if defined(SP_RSA_PRIVATE_EXP_D) || defined(RSA_LOW_MEM)
|
||||||
|
sp_digit* a;
|
||||||
|
sp_digit* d = NULL;
|
||||||
|
sp_digit* m;
|
||||||
|
sp_digit* r;
|
||||||
|
int err = MP_OKAY;
|
||||||
|
|
||||||
|
(void)pm;
|
||||||
|
(void)qm;
|
||||||
|
(void)dpm;
|
||||||
|
(void)dqm;
|
||||||
|
(void)qim;
|
||||||
|
|
||||||
|
if (*outLen < 384U) {
|
||||||
|
err = MP_TO_E;
|
||||||
|
}
|
||||||
|
if (err == MP_OKAY) {
|
||||||
|
if (mp_count_bits(dm) > 3072) {
|
||||||
|
err = MP_READ_E;
|
||||||
|
}
|
||||||
|
if (inLen > 384) {
|
||||||
|
err = MP_READ_E;
|
||||||
|
}
|
||||||
|
if (mp_count_bits(mm) != 3072) {
|
||||||
|
err = MP_READ_E;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (err == MP_OKAY) {
|
||||||
|
d = (sp_digit*)XMALLOC(sizeof(sp_digit) * 96 * 4, NULL,
|
||||||
|
DYNAMIC_TYPE_RSA);
|
||||||
|
if (d == NULL) {
|
||||||
|
err = MEMORY_E;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (err == MP_OKAY) {
|
||||||
|
a = d + 96;
|
||||||
|
m = a + 192;
|
||||||
|
r = a;
|
||||||
|
|
||||||
|
sp_3072_from_bin(a, 96, in, inLen);
|
||||||
|
sp_3072_from_mp(d, 96, dm);
|
||||||
|
sp_3072_from_mp(m, 96, mm);
|
||||||
|
err = sp_3072_mod_exp_96(r, a, d, 3072, m, 0);
|
||||||
|
}
|
||||||
|
if (err == MP_OKAY) {
|
||||||
|
sp_3072_to_bin(r, out);
|
||||||
|
*outLen = 384;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (d != NULL) {
|
||||||
|
XMEMSET(d, 0, sizeof(sp_digit) * 96);
|
||||||
|
XFREE(d, NULL, DYNAMIC_TYPE_RSA);
|
||||||
|
}
|
||||||
|
|
||||||
|
return err;
|
||||||
|
#else
|
||||||
#if (!defined(WOLFSSL_SP_SMALL) && !defined(WOLFSSL_SMALL_STACK)) || defined(WOLFSSL_SP_NO_MALLOC)
|
#if (!defined(WOLFSSL_SP_SMALL) && !defined(WOLFSSL_SMALL_STACK)) || defined(WOLFSSL_SP_NO_MALLOC)
|
||||||
sp_digit a[96 * 2];
|
sp_digit a[96 * 2];
|
||||||
sp_digit p[48], q[48], dp[48];
|
sp_digit p[48], q[48], dp[48];
|
||||||
@ -19495,11 +19494,10 @@ int sp_RsaPrivate_3072(const byte* in, word32 inLen, mp_int* dm,
|
|||||||
XMEMSET(q, 0, sizeof(q));
|
XMEMSET(q, 0, sizeof(q));
|
||||||
XMEMSET(dp, 0, sizeof(dp));
|
XMEMSET(dp, 0, sizeof(dp));
|
||||||
#endif
|
#endif
|
||||||
|
#endif /* SP_RSA_PRIVATE_EXP_D || RSA_LOW_MEM */
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
#endif /* WOLFSSL_RSA_PUBLIC_ONLY */
|
#endif /* WOLFSSL_RSA_PUBLIC_ONLY */
|
||||||
#endif /* SP_RSA_PRIVATE_EXP_D || RSA_LOW_MEM */
|
|
||||||
#endif /* WOLFSSL_HAVE_SP_RSA */
|
#endif /* WOLFSSL_HAVE_SP_RSA */
|
||||||
#if defined(WOLFSSL_HAVE_SP_DH) || (defined(WOLFSSL_HAVE_SP_RSA) && \
|
#if defined(WOLFSSL_HAVE_SP_DH) || (defined(WOLFSSL_HAVE_SP_RSA) && \
|
||||||
!defined(WOLFSSL_RSA_PUBLIC_ONLY))
|
!defined(WOLFSSL_RSA_PUBLIC_ONLY))
|
||||||
@ -71655,63 +71653,6 @@ int sp_RsaPublic_4096(const byte* in, word32 inLen, mp_int* em, mp_int* mm,
|
|||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined(SP_RSA_PRIVATE_EXP_D) || defined(RSA_LOW_MEM)
|
|
||||||
sp_digit* a;
|
|
||||||
sp_digit* d = NULL;
|
|
||||||
sp_digit* m;
|
|
||||||
sp_digit* r;
|
|
||||||
int err = MP_OKAY;
|
|
||||||
|
|
||||||
(void)pm;
|
|
||||||
(void)qm;
|
|
||||||
(void)dpm;
|
|
||||||
(void)dqm;
|
|
||||||
(void)qim;
|
|
||||||
|
|
||||||
if (*outLen < 512U) {
|
|
||||||
err = MP_TO_E;
|
|
||||||
}
|
|
||||||
if (err == MP_OKAY) {
|
|
||||||
if (mp_count_bits(dm) > 4096) {
|
|
||||||
err = MP_READ_E;
|
|
||||||
}
|
|
||||||
if (inLen > 512) {
|
|
||||||
err = MP_READ_E;
|
|
||||||
}
|
|
||||||
if (mp_count_bits(mm) != 4096) {
|
|
||||||
err = MP_READ_E;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (err == MP_OKAY) {
|
|
||||||
d = (sp_digit*)XMALLOC(sizeof(sp_digit) * 128 * 4, NULL,
|
|
||||||
DYNAMIC_TYPE_RSA);
|
|
||||||
if (d == NULL) {
|
|
||||||
err = MEMORY_E;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (err == MP_OKAY) {
|
|
||||||
a = d + 128;
|
|
||||||
m = a + 256;
|
|
||||||
r = a;
|
|
||||||
|
|
||||||
sp_4096_from_bin(a, 128, in, inLen);
|
|
||||||
sp_4096_from_mp(d, 128, dm);
|
|
||||||
sp_4096_from_mp(m, 128, mm);
|
|
||||||
err = sp_4096_mod_exp_128(r, a, d, 4096, m, 0);
|
|
||||||
}
|
|
||||||
if (err == MP_OKAY) {
|
|
||||||
sp_4096_to_bin(r, out);
|
|
||||||
*outLen = 512;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (d != NULL) {
|
|
||||||
XMEMSET(d, 0, sizeof(sp_digit) * 128);
|
|
||||||
XFREE(d, NULL, DYNAMIC_TYPE_RSA);
|
|
||||||
}
|
|
||||||
|
|
||||||
return err;
|
|
||||||
#else
|
|
||||||
#ifndef WOLFSSL_RSA_PUBLIC_ONLY
|
#ifndef WOLFSSL_RSA_PUBLIC_ONLY
|
||||||
/* Conditionally add a and b using the mask m.
|
/* Conditionally add a and b using the mask m.
|
||||||
* m is -1 to add and 0 when not.
|
* m is -1 to add and 0 when not.
|
||||||
@ -72100,6 +72041,63 @@ int sp_RsaPrivate_4096(const byte* in, word32 inLen, mp_int* dm,
|
|||||||
mp_int* pm, mp_int* qm, mp_int* dpm, mp_int* dqm, mp_int* qim, mp_int* mm,
|
mp_int* pm, mp_int* qm, mp_int* dpm, mp_int* dqm, mp_int* qim, mp_int* mm,
|
||||||
byte* out, word32* outLen)
|
byte* out, word32* outLen)
|
||||||
{
|
{
|
||||||
|
#if defined(SP_RSA_PRIVATE_EXP_D) || defined(RSA_LOW_MEM)
|
||||||
|
sp_digit* a;
|
||||||
|
sp_digit* d = NULL;
|
||||||
|
sp_digit* m;
|
||||||
|
sp_digit* r;
|
||||||
|
int err = MP_OKAY;
|
||||||
|
|
||||||
|
(void)pm;
|
||||||
|
(void)qm;
|
||||||
|
(void)dpm;
|
||||||
|
(void)dqm;
|
||||||
|
(void)qim;
|
||||||
|
|
||||||
|
if (*outLen < 512U) {
|
||||||
|
err = MP_TO_E;
|
||||||
|
}
|
||||||
|
if (err == MP_OKAY) {
|
||||||
|
if (mp_count_bits(dm) > 4096) {
|
||||||
|
err = MP_READ_E;
|
||||||
|
}
|
||||||
|
if (inLen > 512) {
|
||||||
|
err = MP_READ_E;
|
||||||
|
}
|
||||||
|
if (mp_count_bits(mm) != 4096) {
|
||||||
|
err = MP_READ_E;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (err == MP_OKAY) {
|
||||||
|
d = (sp_digit*)XMALLOC(sizeof(sp_digit) * 128 * 4, NULL,
|
||||||
|
DYNAMIC_TYPE_RSA);
|
||||||
|
if (d == NULL) {
|
||||||
|
err = MEMORY_E;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (err == MP_OKAY) {
|
||||||
|
a = d + 128;
|
||||||
|
m = a + 256;
|
||||||
|
r = a;
|
||||||
|
|
||||||
|
sp_4096_from_bin(a, 128, in, inLen);
|
||||||
|
sp_4096_from_mp(d, 128, dm);
|
||||||
|
sp_4096_from_mp(m, 128, mm);
|
||||||
|
err = sp_4096_mod_exp_128(r, a, d, 4096, m, 0);
|
||||||
|
}
|
||||||
|
if (err == MP_OKAY) {
|
||||||
|
sp_4096_to_bin(r, out);
|
||||||
|
*outLen = 512;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (d != NULL) {
|
||||||
|
XMEMSET(d, 0, sizeof(sp_digit) * 128);
|
||||||
|
XFREE(d, NULL, DYNAMIC_TYPE_RSA);
|
||||||
|
}
|
||||||
|
|
||||||
|
return err;
|
||||||
|
#else
|
||||||
#if (!defined(WOLFSSL_SP_SMALL) && !defined(WOLFSSL_SMALL_STACK)) || defined(WOLFSSL_SP_NO_MALLOC)
|
#if (!defined(WOLFSSL_SP_SMALL) && !defined(WOLFSSL_SMALL_STACK)) || defined(WOLFSSL_SP_NO_MALLOC)
|
||||||
sp_digit a[128 * 2];
|
sp_digit a[128 * 2];
|
||||||
sp_digit p[64], q[64], dp[64];
|
sp_digit p[64], q[64], dp[64];
|
||||||
@ -72195,11 +72193,10 @@ int sp_RsaPrivate_4096(const byte* in, word32 inLen, mp_int* dm,
|
|||||||
XMEMSET(q, 0, sizeof(q));
|
XMEMSET(q, 0, sizeof(q));
|
||||||
XMEMSET(dp, 0, sizeof(dp));
|
XMEMSET(dp, 0, sizeof(dp));
|
||||||
#endif
|
#endif
|
||||||
|
#endif /* SP_RSA_PRIVATE_EXP_D || RSA_LOW_MEM */
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
#endif /* WOLFSSL_RSA_PUBLIC_ONLY */
|
#endif /* WOLFSSL_RSA_PUBLIC_ONLY */
|
||||||
#endif /* SP_RSA_PRIVATE_EXP_D || RSA_LOW_MEM */
|
|
||||||
#endif /* WOLFSSL_HAVE_SP_RSA */
|
#endif /* WOLFSSL_HAVE_SP_RSA */
|
||||||
#if defined(WOLFSSL_HAVE_SP_DH) || (defined(WOLFSSL_HAVE_SP_RSA) && \
|
#if defined(WOLFSSL_HAVE_SP_DH) || (defined(WOLFSSL_HAVE_SP_RSA) && \
|
||||||
!defined(WOLFSSL_RSA_PUBLIC_ONLY))
|
!defined(WOLFSSL_RSA_PUBLIC_ONLY))
|
||||||
|
@ -4991,63 +4991,6 @@ int sp_RsaPublic_2048(const byte* in, word32 inLen, mp_int* em, mp_int* mm,
|
|||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined(SP_RSA_PRIVATE_EXP_D) || defined(RSA_LOW_MEM)
|
|
||||||
sp_digit* a;
|
|
||||||
sp_digit* d = NULL;
|
|
||||||
sp_digit* m;
|
|
||||||
sp_digit* r;
|
|
||||||
int err = MP_OKAY;
|
|
||||||
|
|
||||||
(void)pm;
|
|
||||||
(void)qm;
|
|
||||||
(void)dpm;
|
|
||||||
(void)dqm;
|
|
||||||
(void)qim;
|
|
||||||
|
|
||||||
if (*outLen < 256U) {
|
|
||||||
err = MP_TO_E;
|
|
||||||
}
|
|
||||||
if (err == MP_OKAY) {
|
|
||||||
if (mp_count_bits(dm) > 2048) {
|
|
||||||
err = MP_READ_E;
|
|
||||||
}
|
|
||||||
if (inLen > 256) {
|
|
||||||
err = MP_READ_E;
|
|
||||||
}
|
|
||||||
if (mp_count_bits(mm) != 2048) {
|
|
||||||
err = MP_READ_E;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (err == MP_OKAY) {
|
|
||||||
d = (sp_digit*)XMALLOC(sizeof(sp_digit) * 32 * 4, NULL,
|
|
||||||
DYNAMIC_TYPE_RSA);
|
|
||||||
if (d == NULL) {
|
|
||||||
err = MEMORY_E;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (err == MP_OKAY) {
|
|
||||||
a = d + 32;
|
|
||||||
m = a + 64;
|
|
||||||
r = a;
|
|
||||||
|
|
||||||
sp_2048_from_bin(a, 32, in, inLen);
|
|
||||||
sp_2048_from_mp(d, 32, dm);
|
|
||||||
sp_2048_from_mp(m, 32, mm);
|
|
||||||
err = sp_2048_mod_exp_32(r, a, d, 2048, m, 0);
|
|
||||||
}
|
|
||||||
if (err == MP_OKAY) {
|
|
||||||
sp_2048_to_bin(r, out);
|
|
||||||
*outLen = 256;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (d != NULL) {
|
|
||||||
XMEMSET(d, 0, sizeof(sp_digit) * 32);
|
|
||||||
XFREE(d, NULL, DYNAMIC_TYPE_RSA);
|
|
||||||
}
|
|
||||||
|
|
||||||
return err;
|
|
||||||
#else
|
|
||||||
#ifndef WOLFSSL_RSA_PUBLIC_ONLY
|
#ifndef WOLFSSL_RSA_PUBLIC_ONLY
|
||||||
/* Conditionally add a and b using the mask m.
|
/* Conditionally add a and b using the mask m.
|
||||||
* m is -1 to add and 0 when not.
|
* m is -1 to add and 0 when not.
|
||||||
@ -5172,6 +5115,63 @@ int sp_RsaPrivate_2048(const byte* in, word32 inLen, mp_int* dm,
|
|||||||
mp_int* pm, mp_int* qm, mp_int* dpm, mp_int* dqm, mp_int* qim, mp_int* mm,
|
mp_int* pm, mp_int* qm, mp_int* dpm, mp_int* dqm, mp_int* qim, mp_int* mm,
|
||||||
byte* out, word32* outLen)
|
byte* out, word32* outLen)
|
||||||
{
|
{
|
||||||
|
#if defined(SP_RSA_PRIVATE_EXP_D) || defined(RSA_LOW_MEM)
|
||||||
|
sp_digit* a;
|
||||||
|
sp_digit* d = NULL;
|
||||||
|
sp_digit* m;
|
||||||
|
sp_digit* r;
|
||||||
|
int err = MP_OKAY;
|
||||||
|
|
||||||
|
(void)pm;
|
||||||
|
(void)qm;
|
||||||
|
(void)dpm;
|
||||||
|
(void)dqm;
|
||||||
|
(void)qim;
|
||||||
|
|
||||||
|
if (*outLen < 256U) {
|
||||||
|
err = MP_TO_E;
|
||||||
|
}
|
||||||
|
if (err == MP_OKAY) {
|
||||||
|
if (mp_count_bits(dm) > 2048) {
|
||||||
|
err = MP_READ_E;
|
||||||
|
}
|
||||||
|
if (inLen > 256) {
|
||||||
|
err = MP_READ_E;
|
||||||
|
}
|
||||||
|
if (mp_count_bits(mm) != 2048) {
|
||||||
|
err = MP_READ_E;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (err == MP_OKAY) {
|
||||||
|
d = (sp_digit*)XMALLOC(sizeof(sp_digit) * 32 * 4, NULL,
|
||||||
|
DYNAMIC_TYPE_RSA);
|
||||||
|
if (d == NULL) {
|
||||||
|
err = MEMORY_E;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (err == MP_OKAY) {
|
||||||
|
a = d + 32;
|
||||||
|
m = a + 64;
|
||||||
|
r = a;
|
||||||
|
|
||||||
|
sp_2048_from_bin(a, 32, in, inLen);
|
||||||
|
sp_2048_from_mp(d, 32, dm);
|
||||||
|
sp_2048_from_mp(m, 32, mm);
|
||||||
|
err = sp_2048_mod_exp_32(r, a, d, 2048, m, 0);
|
||||||
|
}
|
||||||
|
if (err == MP_OKAY) {
|
||||||
|
sp_2048_to_bin(r, out);
|
||||||
|
*outLen = 256;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (d != NULL) {
|
||||||
|
XMEMSET(d, 0, sizeof(sp_digit) * 32);
|
||||||
|
XFREE(d, NULL, DYNAMIC_TYPE_RSA);
|
||||||
|
}
|
||||||
|
|
||||||
|
return err;
|
||||||
|
#else
|
||||||
#if (!defined(WOLFSSL_SP_SMALL) && !defined(WOLFSSL_SMALL_STACK)) || defined(WOLFSSL_SP_NO_MALLOC)
|
#if (!defined(WOLFSSL_SP_SMALL) && !defined(WOLFSSL_SMALL_STACK)) || defined(WOLFSSL_SP_NO_MALLOC)
|
||||||
sp_digit a[32 * 2];
|
sp_digit a[32 * 2];
|
||||||
sp_digit p[16], q[16], dp[16];
|
sp_digit p[16], q[16], dp[16];
|
||||||
@ -5267,11 +5267,10 @@ int sp_RsaPrivate_2048(const byte* in, word32 inLen, mp_int* dm,
|
|||||||
XMEMSET(q, 0, sizeof(q));
|
XMEMSET(q, 0, sizeof(q));
|
||||||
XMEMSET(dp, 0, sizeof(dp));
|
XMEMSET(dp, 0, sizeof(dp));
|
||||||
#endif
|
#endif
|
||||||
|
#endif /* SP_RSA_PRIVATE_EXP_D || RSA_LOW_MEM */
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
#endif /* WOLFSSL_RSA_PUBLIC_ONLY */
|
#endif /* WOLFSSL_RSA_PUBLIC_ONLY */
|
||||||
#endif /* SP_RSA_PRIVATE_EXP_D || RSA_LOW_MEM */
|
|
||||||
#endif /* WOLFSSL_HAVE_SP_RSA */
|
#endif /* WOLFSSL_HAVE_SP_RSA */
|
||||||
#if defined(WOLFSSL_HAVE_SP_DH) || (defined(WOLFSSL_HAVE_SP_RSA) && \
|
#if defined(WOLFSSL_HAVE_SP_DH) || (defined(WOLFSSL_HAVE_SP_RSA) && \
|
||||||
!defined(WOLFSSL_RSA_PUBLIC_ONLY))
|
!defined(WOLFSSL_RSA_PUBLIC_ONLY))
|
||||||
@ -12695,63 +12694,6 @@ int sp_RsaPublic_3072(const byte* in, word32 inLen, mp_int* em, mp_int* mm,
|
|||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined(SP_RSA_PRIVATE_EXP_D) || defined(RSA_LOW_MEM)
|
|
||||||
sp_digit* a;
|
|
||||||
sp_digit* d = NULL;
|
|
||||||
sp_digit* m;
|
|
||||||
sp_digit* r;
|
|
||||||
int err = MP_OKAY;
|
|
||||||
|
|
||||||
(void)pm;
|
|
||||||
(void)qm;
|
|
||||||
(void)dpm;
|
|
||||||
(void)dqm;
|
|
||||||
(void)qim;
|
|
||||||
|
|
||||||
if (*outLen < 384U) {
|
|
||||||
err = MP_TO_E;
|
|
||||||
}
|
|
||||||
if (err == MP_OKAY) {
|
|
||||||
if (mp_count_bits(dm) > 3072) {
|
|
||||||
err = MP_READ_E;
|
|
||||||
}
|
|
||||||
if (inLen > 384) {
|
|
||||||
err = MP_READ_E;
|
|
||||||
}
|
|
||||||
if (mp_count_bits(mm) != 3072) {
|
|
||||||
err = MP_READ_E;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (err == MP_OKAY) {
|
|
||||||
d = (sp_digit*)XMALLOC(sizeof(sp_digit) * 48 * 4, NULL,
|
|
||||||
DYNAMIC_TYPE_RSA);
|
|
||||||
if (d == NULL) {
|
|
||||||
err = MEMORY_E;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (err == MP_OKAY) {
|
|
||||||
a = d + 48;
|
|
||||||
m = a + 96;
|
|
||||||
r = a;
|
|
||||||
|
|
||||||
sp_3072_from_bin(a, 48, in, inLen);
|
|
||||||
sp_3072_from_mp(d, 48, dm);
|
|
||||||
sp_3072_from_mp(m, 48, mm);
|
|
||||||
err = sp_3072_mod_exp_48(r, a, d, 3072, m, 0);
|
|
||||||
}
|
|
||||||
if (err == MP_OKAY) {
|
|
||||||
sp_3072_to_bin(r, out);
|
|
||||||
*outLen = 384;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (d != NULL) {
|
|
||||||
XMEMSET(d, 0, sizeof(sp_digit) * 48);
|
|
||||||
XFREE(d, NULL, DYNAMIC_TYPE_RSA);
|
|
||||||
}
|
|
||||||
|
|
||||||
return err;
|
|
||||||
#else
|
|
||||||
#ifndef WOLFSSL_RSA_PUBLIC_ONLY
|
#ifndef WOLFSSL_RSA_PUBLIC_ONLY
|
||||||
/* Conditionally add a and b using the mask m.
|
/* Conditionally add a and b using the mask m.
|
||||||
* m is -1 to add and 0 when not.
|
* m is -1 to add and 0 when not.
|
||||||
@ -12904,6 +12846,63 @@ int sp_RsaPrivate_3072(const byte* in, word32 inLen, mp_int* dm,
|
|||||||
mp_int* pm, mp_int* qm, mp_int* dpm, mp_int* dqm, mp_int* qim, mp_int* mm,
|
mp_int* pm, mp_int* qm, mp_int* dpm, mp_int* dqm, mp_int* qim, mp_int* mm,
|
||||||
byte* out, word32* outLen)
|
byte* out, word32* outLen)
|
||||||
{
|
{
|
||||||
|
#if defined(SP_RSA_PRIVATE_EXP_D) || defined(RSA_LOW_MEM)
|
||||||
|
sp_digit* a;
|
||||||
|
sp_digit* d = NULL;
|
||||||
|
sp_digit* m;
|
||||||
|
sp_digit* r;
|
||||||
|
int err = MP_OKAY;
|
||||||
|
|
||||||
|
(void)pm;
|
||||||
|
(void)qm;
|
||||||
|
(void)dpm;
|
||||||
|
(void)dqm;
|
||||||
|
(void)qim;
|
||||||
|
|
||||||
|
if (*outLen < 384U) {
|
||||||
|
err = MP_TO_E;
|
||||||
|
}
|
||||||
|
if (err == MP_OKAY) {
|
||||||
|
if (mp_count_bits(dm) > 3072) {
|
||||||
|
err = MP_READ_E;
|
||||||
|
}
|
||||||
|
if (inLen > 384) {
|
||||||
|
err = MP_READ_E;
|
||||||
|
}
|
||||||
|
if (mp_count_bits(mm) != 3072) {
|
||||||
|
err = MP_READ_E;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (err == MP_OKAY) {
|
||||||
|
d = (sp_digit*)XMALLOC(sizeof(sp_digit) * 48 * 4, NULL,
|
||||||
|
DYNAMIC_TYPE_RSA);
|
||||||
|
if (d == NULL) {
|
||||||
|
err = MEMORY_E;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (err == MP_OKAY) {
|
||||||
|
a = d + 48;
|
||||||
|
m = a + 96;
|
||||||
|
r = a;
|
||||||
|
|
||||||
|
sp_3072_from_bin(a, 48, in, inLen);
|
||||||
|
sp_3072_from_mp(d, 48, dm);
|
||||||
|
sp_3072_from_mp(m, 48, mm);
|
||||||
|
err = sp_3072_mod_exp_48(r, a, d, 3072, m, 0);
|
||||||
|
}
|
||||||
|
if (err == MP_OKAY) {
|
||||||
|
sp_3072_to_bin(r, out);
|
||||||
|
*outLen = 384;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (d != NULL) {
|
||||||
|
XMEMSET(d, 0, sizeof(sp_digit) * 48);
|
||||||
|
XFREE(d, NULL, DYNAMIC_TYPE_RSA);
|
||||||
|
}
|
||||||
|
|
||||||
|
return err;
|
||||||
|
#else
|
||||||
#if (!defined(WOLFSSL_SP_SMALL) && !defined(WOLFSSL_SMALL_STACK)) || defined(WOLFSSL_SP_NO_MALLOC)
|
#if (!defined(WOLFSSL_SP_SMALL) && !defined(WOLFSSL_SMALL_STACK)) || defined(WOLFSSL_SP_NO_MALLOC)
|
||||||
sp_digit a[48 * 2];
|
sp_digit a[48 * 2];
|
||||||
sp_digit p[24], q[24], dp[24];
|
sp_digit p[24], q[24], dp[24];
|
||||||
@ -12999,11 +12998,10 @@ int sp_RsaPrivate_3072(const byte* in, word32 inLen, mp_int* dm,
|
|||||||
XMEMSET(q, 0, sizeof(q));
|
XMEMSET(q, 0, sizeof(q));
|
||||||
XMEMSET(dp, 0, sizeof(dp));
|
XMEMSET(dp, 0, sizeof(dp));
|
||||||
#endif
|
#endif
|
||||||
|
#endif /* SP_RSA_PRIVATE_EXP_D || RSA_LOW_MEM */
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
#endif /* WOLFSSL_RSA_PUBLIC_ONLY */
|
#endif /* WOLFSSL_RSA_PUBLIC_ONLY */
|
||||||
#endif /* SP_RSA_PRIVATE_EXP_D || RSA_LOW_MEM */
|
|
||||||
#endif /* WOLFSSL_HAVE_SP_RSA */
|
#endif /* WOLFSSL_HAVE_SP_RSA */
|
||||||
#if defined(WOLFSSL_HAVE_SP_DH) || (defined(WOLFSSL_HAVE_SP_RSA) && \
|
#if defined(WOLFSSL_HAVE_SP_DH) || (defined(WOLFSSL_HAVE_SP_RSA) && \
|
||||||
!defined(WOLFSSL_RSA_PUBLIC_ONLY))
|
!defined(WOLFSSL_RSA_PUBLIC_ONLY))
|
||||||
@ -17625,63 +17623,6 @@ int sp_RsaPublic_4096(const byte* in, word32 inLen, mp_int* em, mp_int* mm,
|
|||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined(SP_RSA_PRIVATE_EXP_D) || defined(RSA_LOW_MEM)
|
|
||||||
sp_digit* a;
|
|
||||||
sp_digit* d = NULL;
|
|
||||||
sp_digit* m;
|
|
||||||
sp_digit* r;
|
|
||||||
int err = MP_OKAY;
|
|
||||||
|
|
||||||
(void)pm;
|
|
||||||
(void)qm;
|
|
||||||
(void)dpm;
|
|
||||||
(void)dqm;
|
|
||||||
(void)qim;
|
|
||||||
|
|
||||||
if (*outLen < 512U) {
|
|
||||||
err = MP_TO_E;
|
|
||||||
}
|
|
||||||
if (err == MP_OKAY) {
|
|
||||||
if (mp_count_bits(dm) > 4096) {
|
|
||||||
err = MP_READ_E;
|
|
||||||
}
|
|
||||||
if (inLen > 512) {
|
|
||||||
err = MP_READ_E;
|
|
||||||
}
|
|
||||||
if (mp_count_bits(mm) != 4096) {
|
|
||||||
err = MP_READ_E;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (err == MP_OKAY) {
|
|
||||||
d = (sp_digit*)XMALLOC(sizeof(sp_digit) * 64 * 4, NULL,
|
|
||||||
DYNAMIC_TYPE_RSA);
|
|
||||||
if (d == NULL) {
|
|
||||||
err = MEMORY_E;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (err == MP_OKAY) {
|
|
||||||
a = d + 64;
|
|
||||||
m = a + 128;
|
|
||||||
r = a;
|
|
||||||
|
|
||||||
sp_4096_from_bin(a, 64, in, inLen);
|
|
||||||
sp_4096_from_mp(d, 64, dm);
|
|
||||||
sp_4096_from_mp(m, 64, mm);
|
|
||||||
err = sp_4096_mod_exp_64(r, a, d, 4096, m, 0);
|
|
||||||
}
|
|
||||||
if (err == MP_OKAY) {
|
|
||||||
sp_4096_to_bin(r, out);
|
|
||||||
*outLen = 512;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (d != NULL) {
|
|
||||||
XMEMSET(d, 0, sizeof(sp_digit) * 64);
|
|
||||||
XFREE(d, NULL, DYNAMIC_TYPE_RSA);
|
|
||||||
}
|
|
||||||
|
|
||||||
return err;
|
|
||||||
#else
|
|
||||||
#ifndef WOLFSSL_RSA_PUBLIC_ONLY
|
#ifndef WOLFSSL_RSA_PUBLIC_ONLY
|
||||||
/* Conditionally add a and b using the mask m.
|
/* Conditionally add a and b using the mask m.
|
||||||
* m is -1 to add and 0 when not.
|
* m is -1 to add and 0 when not.
|
||||||
@ -17862,6 +17803,63 @@ int sp_RsaPrivate_4096(const byte* in, word32 inLen, mp_int* dm,
|
|||||||
mp_int* pm, mp_int* qm, mp_int* dpm, mp_int* dqm, mp_int* qim, mp_int* mm,
|
mp_int* pm, mp_int* qm, mp_int* dpm, mp_int* dqm, mp_int* qim, mp_int* mm,
|
||||||
byte* out, word32* outLen)
|
byte* out, word32* outLen)
|
||||||
{
|
{
|
||||||
|
#if defined(SP_RSA_PRIVATE_EXP_D) || defined(RSA_LOW_MEM)
|
||||||
|
sp_digit* a;
|
||||||
|
sp_digit* d = NULL;
|
||||||
|
sp_digit* m;
|
||||||
|
sp_digit* r;
|
||||||
|
int err = MP_OKAY;
|
||||||
|
|
||||||
|
(void)pm;
|
||||||
|
(void)qm;
|
||||||
|
(void)dpm;
|
||||||
|
(void)dqm;
|
||||||
|
(void)qim;
|
||||||
|
|
||||||
|
if (*outLen < 512U) {
|
||||||
|
err = MP_TO_E;
|
||||||
|
}
|
||||||
|
if (err == MP_OKAY) {
|
||||||
|
if (mp_count_bits(dm) > 4096) {
|
||||||
|
err = MP_READ_E;
|
||||||
|
}
|
||||||
|
if (inLen > 512) {
|
||||||
|
err = MP_READ_E;
|
||||||
|
}
|
||||||
|
if (mp_count_bits(mm) != 4096) {
|
||||||
|
err = MP_READ_E;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (err == MP_OKAY) {
|
||||||
|
d = (sp_digit*)XMALLOC(sizeof(sp_digit) * 64 * 4, NULL,
|
||||||
|
DYNAMIC_TYPE_RSA);
|
||||||
|
if (d == NULL) {
|
||||||
|
err = MEMORY_E;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (err == MP_OKAY) {
|
||||||
|
a = d + 64;
|
||||||
|
m = a + 128;
|
||||||
|
r = a;
|
||||||
|
|
||||||
|
sp_4096_from_bin(a, 64, in, inLen);
|
||||||
|
sp_4096_from_mp(d, 64, dm);
|
||||||
|
sp_4096_from_mp(m, 64, mm);
|
||||||
|
err = sp_4096_mod_exp_64(r, a, d, 4096, m, 0);
|
||||||
|
}
|
||||||
|
if (err == MP_OKAY) {
|
||||||
|
sp_4096_to_bin(r, out);
|
||||||
|
*outLen = 512;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (d != NULL) {
|
||||||
|
XMEMSET(d, 0, sizeof(sp_digit) * 64);
|
||||||
|
XFREE(d, NULL, DYNAMIC_TYPE_RSA);
|
||||||
|
}
|
||||||
|
|
||||||
|
return err;
|
||||||
|
#else
|
||||||
#if (!defined(WOLFSSL_SP_SMALL) && !defined(WOLFSSL_SMALL_STACK)) || defined(WOLFSSL_SP_NO_MALLOC)
|
#if (!defined(WOLFSSL_SP_SMALL) && !defined(WOLFSSL_SMALL_STACK)) || defined(WOLFSSL_SP_NO_MALLOC)
|
||||||
sp_digit a[64 * 2];
|
sp_digit a[64 * 2];
|
||||||
sp_digit p[32], q[32], dp[32];
|
sp_digit p[32], q[32], dp[32];
|
||||||
@ -17957,11 +17955,10 @@ int sp_RsaPrivate_4096(const byte* in, word32 inLen, mp_int* dm,
|
|||||||
XMEMSET(q, 0, sizeof(q));
|
XMEMSET(q, 0, sizeof(q));
|
||||||
XMEMSET(dp, 0, sizeof(dp));
|
XMEMSET(dp, 0, sizeof(dp));
|
||||||
#endif
|
#endif
|
||||||
|
#endif /* SP_RSA_PRIVATE_EXP_D || RSA_LOW_MEM */
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
#endif /* WOLFSSL_RSA_PUBLIC_ONLY */
|
#endif /* WOLFSSL_RSA_PUBLIC_ONLY */
|
||||||
#endif /* SP_RSA_PRIVATE_EXP_D || RSA_LOW_MEM */
|
|
||||||
#endif /* WOLFSSL_HAVE_SP_RSA */
|
#endif /* WOLFSSL_HAVE_SP_RSA */
|
||||||
#if defined(WOLFSSL_HAVE_SP_DH) || (defined(WOLFSSL_HAVE_SP_RSA) && \
|
#if defined(WOLFSSL_HAVE_SP_DH) || (defined(WOLFSSL_HAVE_SP_RSA) && \
|
||||||
!defined(WOLFSSL_RSA_PUBLIC_ONLY))
|
!defined(WOLFSSL_RSA_PUBLIC_ONLY))
|
||||||
|
@ -4362,63 +4362,6 @@ int sp_RsaPublic_2048(const byte* in, word32 inLen, mp_int* em, mp_int* mm,
|
|||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined(SP_RSA_PRIVATE_EXP_D) || defined(RSA_LOW_MEM)
|
|
||||||
sp_digit* a;
|
|
||||||
sp_digit* d = NULL;
|
|
||||||
sp_digit* m;
|
|
||||||
sp_digit* r;
|
|
||||||
int err = MP_OKAY;
|
|
||||||
|
|
||||||
(void)pm;
|
|
||||||
(void)qm;
|
|
||||||
(void)dpm;
|
|
||||||
(void)dqm;
|
|
||||||
(void)qim;
|
|
||||||
|
|
||||||
if (*outLen < 256U) {
|
|
||||||
err = MP_TO_E;
|
|
||||||
}
|
|
||||||
if (err == MP_OKAY) {
|
|
||||||
if (mp_count_bits(dm) > 2048) {
|
|
||||||
err = MP_READ_E;
|
|
||||||
}
|
|
||||||
if (inLen > 256) {
|
|
||||||
err = MP_READ_E;
|
|
||||||
}
|
|
||||||
if (mp_count_bits(mm) != 2048) {
|
|
||||||
err = MP_READ_E;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (err == MP_OKAY) {
|
|
||||||
d = (sp_digit*)XMALLOC(sizeof(sp_digit) * 64 * 4, NULL,
|
|
||||||
DYNAMIC_TYPE_RSA);
|
|
||||||
if (d == NULL) {
|
|
||||||
err = MEMORY_E;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (err == MP_OKAY) {
|
|
||||||
a = d + 64;
|
|
||||||
m = a + 128;
|
|
||||||
r = a;
|
|
||||||
|
|
||||||
sp_2048_from_bin(a, 64, in, inLen);
|
|
||||||
sp_2048_from_mp(d, 64, dm);
|
|
||||||
sp_2048_from_mp(m, 64, mm);
|
|
||||||
err = sp_2048_mod_exp_64(r, a, d, 2048, m, 0);
|
|
||||||
}
|
|
||||||
if (err == MP_OKAY) {
|
|
||||||
sp_2048_to_bin(r, out);
|
|
||||||
*outLen = 256;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (d != NULL) {
|
|
||||||
XMEMSET(d, 0, sizeof(sp_digit) * 64);
|
|
||||||
XFREE(d, NULL, DYNAMIC_TYPE_RSA);
|
|
||||||
}
|
|
||||||
|
|
||||||
return err;
|
|
||||||
#else
|
|
||||||
#ifndef WOLFSSL_RSA_PUBLIC_ONLY
|
#ifndef WOLFSSL_RSA_PUBLIC_ONLY
|
||||||
/* Conditionally add a and b using the mask m.
|
/* Conditionally add a and b using the mask m.
|
||||||
* m is -1 to add and 0 when not.
|
* m is -1 to add and 0 when not.
|
||||||
@ -4480,6 +4423,63 @@ int sp_RsaPrivate_2048(const byte* in, word32 inLen, mp_int* dm,
|
|||||||
mp_int* pm, mp_int* qm, mp_int* dpm, mp_int* dqm, mp_int* qim, mp_int* mm,
|
mp_int* pm, mp_int* qm, mp_int* dpm, mp_int* dqm, mp_int* qim, mp_int* mm,
|
||||||
byte* out, word32* outLen)
|
byte* out, word32* outLen)
|
||||||
{
|
{
|
||||||
|
#if defined(SP_RSA_PRIVATE_EXP_D) || defined(RSA_LOW_MEM)
|
||||||
|
sp_digit* a;
|
||||||
|
sp_digit* d = NULL;
|
||||||
|
sp_digit* m;
|
||||||
|
sp_digit* r;
|
||||||
|
int err = MP_OKAY;
|
||||||
|
|
||||||
|
(void)pm;
|
||||||
|
(void)qm;
|
||||||
|
(void)dpm;
|
||||||
|
(void)dqm;
|
||||||
|
(void)qim;
|
||||||
|
|
||||||
|
if (*outLen < 256U) {
|
||||||
|
err = MP_TO_E;
|
||||||
|
}
|
||||||
|
if (err == MP_OKAY) {
|
||||||
|
if (mp_count_bits(dm) > 2048) {
|
||||||
|
err = MP_READ_E;
|
||||||
|
}
|
||||||
|
if (inLen > 256) {
|
||||||
|
err = MP_READ_E;
|
||||||
|
}
|
||||||
|
if (mp_count_bits(mm) != 2048) {
|
||||||
|
err = MP_READ_E;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (err == MP_OKAY) {
|
||||||
|
d = (sp_digit*)XMALLOC(sizeof(sp_digit) * 64 * 4, NULL,
|
||||||
|
DYNAMIC_TYPE_RSA);
|
||||||
|
if (d == NULL) {
|
||||||
|
err = MEMORY_E;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (err == MP_OKAY) {
|
||||||
|
a = d + 64;
|
||||||
|
m = a + 128;
|
||||||
|
r = a;
|
||||||
|
|
||||||
|
sp_2048_from_bin(a, 64, in, inLen);
|
||||||
|
sp_2048_from_mp(d, 64, dm);
|
||||||
|
sp_2048_from_mp(m, 64, mm);
|
||||||
|
err = sp_2048_mod_exp_64(r, a, d, 2048, m, 0);
|
||||||
|
}
|
||||||
|
if (err == MP_OKAY) {
|
||||||
|
sp_2048_to_bin(r, out);
|
||||||
|
*outLen = 256;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (d != NULL) {
|
||||||
|
XMEMSET(d, 0, sizeof(sp_digit) * 64);
|
||||||
|
XFREE(d, NULL, DYNAMIC_TYPE_RSA);
|
||||||
|
}
|
||||||
|
|
||||||
|
return err;
|
||||||
|
#else
|
||||||
#if (!defined(WOLFSSL_SP_SMALL) && !defined(WOLFSSL_SMALL_STACK)) || defined(WOLFSSL_SP_NO_MALLOC)
|
#if (!defined(WOLFSSL_SP_SMALL) && !defined(WOLFSSL_SMALL_STACK)) || defined(WOLFSSL_SP_NO_MALLOC)
|
||||||
sp_digit a[64 * 2];
|
sp_digit a[64 * 2];
|
||||||
sp_digit p[32], q[32], dp[32];
|
sp_digit p[32], q[32], dp[32];
|
||||||
@ -4575,11 +4575,10 @@ int sp_RsaPrivate_2048(const byte* in, word32 inLen, mp_int* dm,
|
|||||||
XMEMSET(q, 0, sizeof(q));
|
XMEMSET(q, 0, sizeof(q));
|
||||||
XMEMSET(dp, 0, sizeof(dp));
|
XMEMSET(dp, 0, sizeof(dp));
|
||||||
#endif
|
#endif
|
||||||
|
#endif /* SP_RSA_PRIVATE_EXP_D || RSA_LOW_MEM */
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
#endif /* WOLFSSL_RSA_PUBLIC_ONLY */
|
#endif /* WOLFSSL_RSA_PUBLIC_ONLY */
|
||||||
#endif /* SP_RSA_PRIVATE_EXP_D || RSA_LOW_MEM */
|
|
||||||
#endif /* WOLFSSL_HAVE_SP_RSA */
|
#endif /* WOLFSSL_HAVE_SP_RSA */
|
||||||
#if defined(WOLFSSL_HAVE_SP_DH) || (defined(WOLFSSL_HAVE_SP_RSA) && \
|
#if defined(WOLFSSL_HAVE_SP_DH) || (defined(WOLFSSL_HAVE_SP_RSA) && \
|
||||||
!defined(WOLFSSL_RSA_PUBLIC_ONLY))
|
!defined(WOLFSSL_RSA_PUBLIC_ONLY))
|
||||||
@ -10163,63 +10162,6 @@ int sp_RsaPublic_3072(const byte* in, word32 inLen, mp_int* em, mp_int* mm,
|
|||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined(SP_RSA_PRIVATE_EXP_D) || defined(RSA_LOW_MEM)
|
|
||||||
sp_digit* a;
|
|
||||||
sp_digit* d = NULL;
|
|
||||||
sp_digit* m;
|
|
||||||
sp_digit* r;
|
|
||||||
int err = MP_OKAY;
|
|
||||||
|
|
||||||
(void)pm;
|
|
||||||
(void)qm;
|
|
||||||
(void)dpm;
|
|
||||||
(void)dqm;
|
|
||||||
(void)qim;
|
|
||||||
|
|
||||||
if (*outLen < 384U) {
|
|
||||||
err = MP_TO_E;
|
|
||||||
}
|
|
||||||
if (err == MP_OKAY) {
|
|
||||||
if (mp_count_bits(dm) > 3072) {
|
|
||||||
err = MP_READ_E;
|
|
||||||
}
|
|
||||||
if (inLen > 384) {
|
|
||||||
err = MP_READ_E;
|
|
||||||
}
|
|
||||||
if (mp_count_bits(mm) != 3072) {
|
|
||||||
err = MP_READ_E;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (err == MP_OKAY) {
|
|
||||||
d = (sp_digit*)XMALLOC(sizeof(sp_digit) * 96 * 4, NULL,
|
|
||||||
DYNAMIC_TYPE_RSA);
|
|
||||||
if (d == NULL) {
|
|
||||||
err = MEMORY_E;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (err == MP_OKAY) {
|
|
||||||
a = d + 96;
|
|
||||||
m = a + 192;
|
|
||||||
r = a;
|
|
||||||
|
|
||||||
sp_3072_from_bin(a, 96, in, inLen);
|
|
||||||
sp_3072_from_mp(d, 96, dm);
|
|
||||||
sp_3072_from_mp(m, 96, mm);
|
|
||||||
err = sp_3072_mod_exp_96(r, a, d, 3072, m, 0);
|
|
||||||
}
|
|
||||||
if (err == MP_OKAY) {
|
|
||||||
sp_3072_to_bin(r, out);
|
|
||||||
*outLen = 384;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (d != NULL) {
|
|
||||||
XMEMSET(d, 0, sizeof(sp_digit) * 96);
|
|
||||||
XFREE(d, NULL, DYNAMIC_TYPE_RSA);
|
|
||||||
}
|
|
||||||
|
|
||||||
return err;
|
|
||||||
#else
|
|
||||||
#ifndef WOLFSSL_RSA_PUBLIC_ONLY
|
#ifndef WOLFSSL_RSA_PUBLIC_ONLY
|
||||||
/* Conditionally add a and b using the mask m.
|
/* Conditionally add a and b using the mask m.
|
||||||
* m is -1 to add and 0 when not.
|
* m is -1 to add and 0 when not.
|
||||||
@ -10281,6 +10223,63 @@ int sp_RsaPrivate_3072(const byte* in, word32 inLen, mp_int* dm,
|
|||||||
mp_int* pm, mp_int* qm, mp_int* dpm, mp_int* dqm, mp_int* qim, mp_int* mm,
|
mp_int* pm, mp_int* qm, mp_int* dpm, mp_int* dqm, mp_int* qim, mp_int* mm,
|
||||||
byte* out, word32* outLen)
|
byte* out, word32* outLen)
|
||||||
{
|
{
|
||||||
|
#if defined(SP_RSA_PRIVATE_EXP_D) || defined(RSA_LOW_MEM)
|
||||||
|
sp_digit* a;
|
||||||
|
sp_digit* d = NULL;
|
||||||
|
sp_digit* m;
|
||||||
|
sp_digit* r;
|
||||||
|
int err = MP_OKAY;
|
||||||
|
|
||||||
|
(void)pm;
|
||||||
|
(void)qm;
|
||||||
|
(void)dpm;
|
||||||
|
(void)dqm;
|
||||||
|
(void)qim;
|
||||||
|
|
||||||
|
if (*outLen < 384U) {
|
||||||
|
err = MP_TO_E;
|
||||||
|
}
|
||||||
|
if (err == MP_OKAY) {
|
||||||
|
if (mp_count_bits(dm) > 3072) {
|
||||||
|
err = MP_READ_E;
|
||||||
|
}
|
||||||
|
if (inLen > 384) {
|
||||||
|
err = MP_READ_E;
|
||||||
|
}
|
||||||
|
if (mp_count_bits(mm) != 3072) {
|
||||||
|
err = MP_READ_E;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (err == MP_OKAY) {
|
||||||
|
d = (sp_digit*)XMALLOC(sizeof(sp_digit) * 96 * 4, NULL,
|
||||||
|
DYNAMIC_TYPE_RSA);
|
||||||
|
if (d == NULL) {
|
||||||
|
err = MEMORY_E;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (err == MP_OKAY) {
|
||||||
|
a = d + 96;
|
||||||
|
m = a + 192;
|
||||||
|
r = a;
|
||||||
|
|
||||||
|
sp_3072_from_bin(a, 96, in, inLen);
|
||||||
|
sp_3072_from_mp(d, 96, dm);
|
||||||
|
sp_3072_from_mp(m, 96, mm);
|
||||||
|
err = sp_3072_mod_exp_96(r, a, d, 3072, m, 0);
|
||||||
|
}
|
||||||
|
if (err == MP_OKAY) {
|
||||||
|
sp_3072_to_bin(r, out);
|
||||||
|
*outLen = 384;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (d != NULL) {
|
||||||
|
XMEMSET(d, 0, sizeof(sp_digit) * 96);
|
||||||
|
XFREE(d, NULL, DYNAMIC_TYPE_RSA);
|
||||||
|
}
|
||||||
|
|
||||||
|
return err;
|
||||||
|
#else
|
||||||
#if (!defined(WOLFSSL_SP_SMALL) && !defined(WOLFSSL_SMALL_STACK)) || defined(WOLFSSL_SP_NO_MALLOC)
|
#if (!defined(WOLFSSL_SP_SMALL) && !defined(WOLFSSL_SMALL_STACK)) || defined(WOLFSSL_SP_NO_MALLOC)
|
||||||
sp_digit a[96 * 2];
|
sp_digit a[96 * 2];
|
||||||
sp_digit p[48], q[48], dp[48];
|
sp_digit p[48], q[48], dp[48];
|
||||||
@ -10376,11 +10375,10 @@ int sp_RsaPrivate_3072(const byte* in, word32 inLen, mp_int* dm,
|
|||||||
XMEMSET(q, 0, sizeof(q));
|
XMEMSET(q, 0, sizeof(q));
|
||||||
XMEMSET(dp, 0, sizeof(dp));
|
XMEMSET(dp, 0, sizeof(dp));
|
||||||
#endif
|
#endif
|
||||||
|
#endif /* SP_RSA_PRIVATE_EXP_D || RSA_LOW_MEM */
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
#endif /* WOLFSSL_RSA_PUBLIC_ONLY */
|
#endif /* WOLFSSL_RSA_PUBLIC_ONLY */
|
||||||
#endif /* SP_RSA_PRIVATE_EXP_D || RSA_LOW_MEM */
|
|
||||||
#endif /* WOLFSSL_HAVE_SP_RSA */
|
#endif /* WOLFSSL_HAVE_SP_RSA */
|
||||||
#if defined(WOLFSSL_HAVE_SP_DH) || (defined(WOLFSSL_HAVE_SP_RSA) && \
|
#if defined(WOLFSSL_HAVE_SP_DH) || (defined(WOLFSSL_HAVE_SP_RSA) && \
|
||||||
!defined(WOLFSSL_RSA_PUBLIC_ONLY))
|
!defined(WOLFSSL_RSA_PUBLIC_ONLY))
|
||||||
@ -14623,63 +14621,6 @@ int sp_RsaPublic_4096(const byte* in, word32 inLen, mp_int* em, mp_int* mm,
|
|||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined(SP_RSA_PRIVATE_EXP_D) || defined(RSA_LOW_MEM)
|
|
||||||
sp_digit* a;
|
|
||||||
sp_digit* d = NULL;
|
|
||||||
sp_digit* m;
|
|
||||||
sp_digit* r;
|
|
||||||
int err = MP_OKAY;
|
|
||||||
|
|
||||||
(void)pm;
|
|
||||||
(void)qm;
|
|
||||||
(void)dpm;
|
|
||||||
(void)dqm;
|
|
||||||
(void)qim;
|
|
||||||
|
|
||||||
if (*outLen < 512U) {
|
|
||||||
err = MP_TO_E;
|
|
||||||
}
|
|
||||||
if (err == MP_OKAY) {
|
|
||||||
if (mp_count_bits(dm) > 4096) {
|
|
||||||
err = MP_READ_E;
|
|
||||||
}
|
|
||||||
if (inLen > 512) {
|
|
||||||
err = MP_READ_E;
|
|
||||||
}
|
|
||||||
if (mp_count_bits(mm) != 4096) {
|
|
||||||
err = MP_READ_E;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (err == MP_OKAY) {
|
|
||||||
d = (sp_digit*)XMALLOC(sizeof(sp_digit) * 128 * 4, NULL,
|
|
||||||
DYNAMIC_TYPE_RSA);
|
|
||||||
if (d == NULL) {
|
|
||||||
err = MEMORY_E;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (err == MP_OKAY) {
|
|
||||||
a = d + 128;
|
|
||||||
m = a + 256;
|
|
||||||
r = a;
|
|
||||||
|
|
||||||
sp_4096_from_bin(a, 128, in, inLen);
|
|
||||||
sp_4096_from_mp(d, 128, dm);
|
|
||||||
sp_4096_from_mp(m, 128, mm);
|
|
||||||
err = sp_4096_mod_exp_128(r, a, d, 4096, m, 0);
|
|
||||||
}
|
|
||||||
if (err == MP_OKAY) {
|
|
||||||
sp_4096_to_bin(r, out);
|
|
||||||
*outLen = 512;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (d != NULL) {
|
|
||||||
XMEMSET(d, 0, sizeof(sp_digit) * 128);
|
|
||||||
XFREE(d, NULL, DYNAMIC_TYPE_RSA);
|
|
||||||
}
|
|
||||||
|
|
||||||
return err;
|
|
||||||
#else
|
|
||||||
#ifndef WOLFSSL_RSA_PUBLIC_ONLY
|
#ifndef WOLFSSL_RSA_PUBLIC_ONLY
|
||||||
/* Conditionally add a and b using the mask m.
|
/* Conditionally add a and b using the mask m.
|
||||||
* m is -1 to add and 0 when not.
|
* m is -1 to add and 0 when not.
|
||||||
@ -14742,6 +14683,63 @@ int sp_RsaPrivate_4096(const byte* in, word32 inLen, mp_int* dm,
|
|||||||
mp_int* pm, mp_int* qm, mp_int* dpm, mp_int* dqm, mp_int* qim, mp_int* mm,
|
mp_int* pm, mp_int* qm, mp_int* dpm, mp_int* dqm, mp_int* qim, mp_int* mm,
|
||||||
byte* out, word32* outLen)
|
byte* out, word32* outLen)
|
||||||
{
|
{
|
||||||
|
#if defined(SP_RSA_PRIVATE_EXP_D) || defined(RSA_LOW_MEM)
|
||||||
|
sp_digit* a;
|
||||||
|
sp_digit* d = NULL;
|
||||||
|
sp_digit* m;
|
||||||
|
sp_digit* r;
|
||||||
|
int err = MP_OKAY;
|
||||||
|
|
||||||
|
(void)pm;
|
||||||
|
(void)qm;
|
||||||
|
(void)dpm;
|
||||||
|
(void)dqm;
|
||||||
|
(void)qim;
|
||||||
|
|
||||||
|
if (*outLen < 512U) {
|
||||||
|
err = MP_TO_E;
|
||||||
|
}
|
||||||
|
if (err == MP_OKAY) {
|
||||||
|
if (mp_count_bits(dm) > 4096) {
|
||||||
|
err = MP_READ_E;
|
||||||
|
}
|
||||||
|
if (inLen > 512) {
|
||||||
|
err = MP_READ_E;
|
||||||
|
}
|
||||||
|
if (mp_count_bits(mm) != 4096) {
|
||||||
|
err = MP_READ_E;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (err == MP_OKAY) {
|
||||||
|
d = (sp_digit*)XMALLOC(sizeof(sp_digit) * 128 * 4, NULL,
|
||||||
|
DYNAMIC_TYPE_RSA);
|
||||||
|
if (d == NULL) {
|
||||||
|
err = MEMORY_E;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (err == MP_OKAY) {
|
||||||
|
a = d + 128;
|
||||||
|
m = a + 256;
|
||||||
|
r = a;
|
||||||
|
|
||||||
|
sp_4096_from_bin(a, 128, in, inLen);
|
||||||
|
sp_4096_from_mp(d, 128, dm);
|
||||||
|
sp_4096_from_mp(m, 128, mm);
|
||||||
|
err = sp_4096_mod_exp_128(r, a, d, 4096, m, 0);
|
||||||
|
}
|
||||||
|
if (err == MP_OKAY) {
|
||||||
|
sp_4096_to_bin(r, out);
|
||||||
|
*outLen = 512;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (d != NULL) {
|
||||||
|
XMEMSET(d, 0, sizeof(sp_digit) * 128);
|
||||||
|
XFREE(d, NULL, DYNAMIC_TYPE_RSA);
|
||||||
|
}
|
||||||
|
|
||||||
|
return err;
|
||||||
|
#else
|
||||||
#if (!defined(WOLFSSL_SP_SMALL) && !defined(WOLFSSL_SMALL_STACK)) || defined(WOLFSSL_SP_NO_MALLOC)
|
#if (!defined(WOLFSSL_SP_SMALL) && !defined(WOLFSSL_SMALL_STACK)) || defined(WOLFSSL_SP_NO_MALLOC)
|
||||||
sp_digit a[128 * 2];
|
sp_digit a[128 * 2];
|
||||||
sp_digit p[64], q[64], dp[64];
|
sp_digit p[64], q[64], dp[64];
|
||||||
@ -14837,11 +14835,10 @@ int sp_RsaPrivate_4096(const byte* in, word32 inLen, mp_int* dm,
|
|||||||
XMEMSET(q, 0, sizeof(q));
|
XMEMSET(q, 0, sizeof(q));
|
||||||
XMEMSET(dp, 0, sizeof(dp));
|
XMEMSET(dp, 0, sizeof(dp));
|
||||||
#endif
|
#endif
|
||||||
|
#endif /* SP_RSA_PRIVATE_EXP_D || RSA_LOW_MEM */
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
#endif /* WOLFSSL_RSA_PUBLIC_ONLY */
|
#endif /* WOLFSSL_RSA_PUBLIC_ONLY */
|
||||||
#endif /* SP_RSA_PRIVATE_EXP_D || RSA_LOW_MEM */
|
|
||||||
#endif /* WOLFSSL_HAVE_SP_RSA */
|
#endif /* WOLFSSL_HAVE_SP_RSA */
|
||||||
#if defined(WOLFSSL_HAVE_SP_DH) || (defined(WOLFSSL_HAVE_SP_RSA) && \
|
#if defined(WOLFSSL_HAVE_SP_DH) || (defined(WOLFSSL_HAVE_SP_RSA) && \
|
||||||
!defined(WOLFSSL_RSA_PUBLIC_ONLY))
|
!defined(WOLFSSL_RSA_PUBLIC_ONLY))
|
||||||
|
@ -4116,63 +4116,6 @@ int sp_RsaPublic_2048(const byte* in, word32 inLen, mp_int* em, mp_int* mm,
|
|||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined(SP_RSA_PRIVATE_EXP_D) || defined(RSA_LOW_MEM)
|
|
||||||
sp_digit* a;
|
|
||||||
sp_digit* d = NULL;
|
|
||||||
sp_digit* m;
|
|
||||||
sp_digit* r;
|
|
||||||
int err = MP_OKAY;
|
|
||||||
|
|
||||||
(void)pm;
|
|
||||||
(void)qm;
|
|
||||||
(void)dpm;
|
|
||||||
(void)dqm;
|
|
||||||
(void)qim;
|
|
||||||
|
|
||||||
if (*outLen < 256U) {
|
|
||||||
err = MP_TO_E;
|
|
||||||
}
|
|
||||||
if (err == MP_OKAY) {
|
|
||||||
if (mp_count_bits(dm) > 2048) {
|
|
||||||
err = MP_READ_E;
|
|
||||||
}
|
|
||||||
if (inLen > 256) {
|
|
||||||
err = MP_READ_E;
|
|
||||||
}
|
|
||||||
if (mp_count_bits(mm) != 2048) {
|
|
||||||
err = MP_READ_E;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (err == MP_OKAY) {
|
|
||||||
d = (sp_digit*)XMALLOC(sizeof(sp_digit) * 64 * 4, NULL,
|
|
||||||
DYNAMIC_TYPE_RSA);
|
|
||||||
if (d == NULL) {
|
|
||||||
err = MEMORY_E;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (err == MP_OKAY) {
|
|
||||||
a = d + 64;
|
|
||||||
m = a + 128;
|
|
||||||
r = a;
|
|
||||||
|
|
||||||
sp_2048_from_bin(a, 64, in, inLen);
|
|
||||||
sp_2048_from_mp(d, 64, dm);
|
|
||||||
sp_2048_from_mp(m, 64, mm);
|
|
||||||
err = sp_2048_mod_exp_64(r, a, d, 2048, m, 0);
|
|
||||||
}
|
|
||||||
if (err == MP_OKAY) {
|
|
||||||
sp_2048_to_bin(r, out);
|
|
||||||
*outLen = 256;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (d != NULL) {
|
|
||||||
XMEMSET(d, 0, sizeof(sp_digit) * 64);
|
|
||||||
XFREE(d, NULL, DYNAMIC_TYPE_RSA);
|
|
||||||
}
|
|
||||||
|
|
||||||
return err;
|
|
||||||
#else
|
|
||||||
#ifndef WOLFSSL_RSA_PUBLIC_ONLY
|
#ifndef WOLFSSL_RSA_PUBLIC_ONLY
|
||||||
/* Conditionally add a and b using the mask m.
|
/* Conditionally add a and b using the mask m.
|
||||||
* m is -1 to add and 0 when not.
|
* m is -1 to add and 0 when not.
|
||||||
@ -4232,6 +4175,63 @@ int sp_RsaPrivate_2048(const byte* in, word32 inLen, mp_int* dm,
|
|||||||
mp_int* pm, mp_int* qm, mp_int* dpm, mp_int* dqm, mp_int* qim, mp_int* mm,
|
mp_int* pm, mp_int* qm, mp_int* dpm, mp_int* dqm, mp_int* qim, mp_int* mm,
|
||||||
byte* out, word32* outLen)
|
byte* out, word32* outLen)
|
||||||
{
|
{
|
||||||
|
#if defined(SP_RSA_PRIVATE_EXP_D) || defined(RSA_LOW_MEM)
|
||||||
|
sp_digit* a;
|
||||||
|
sp_digit* d = NULL;
|
||||||
|
sp_digit* m;
|
||||||
|
sp_digit* r;
|
||||||
|
int err = MP_OKAY;
|
||||||
|
|
||||||
|
(void)pm;
|
||||||
|
(void)qm;
|
||||||
|
(void)dpm;
|
||||||
|
(void)dqm;
|
||||||
|
(void)qim;
|
||||||
|
|
||||||
|
if (*outLen < 256U) {
|
||||||
|
err = MP_TO_E;
|
||||||
|
}
|
||||||
|
if (err == MP_OKAY) {
|
||||||
|
if (mp_count_bits(dm) > 2048) {
|
||||||
|
err = MP_READ_E;
|
||||||
|
}
|
||||||
|
if (inLen > 256) {
|
||||||
|
err = MP_READ_E;
|
||||||
|
}
|
||||||
|
if (mp_count_bits(mm) != 2048) {
|
||||||
|
err = MP_READ_E;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (err == MP_OKAY) {
|
||||||
|
d = (sp_digit*)XMALLOC(sizeof(sp_digit) * 64 * 4, NULL,
|
||||||
|
DYNAMIC_TYPE_RSA);
|
||||||
|
if (d == NULL) {
|
||||||
|
err = MEMORY_E;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (err == MP_OKAY) {
|
||||||
|
a = d + 64;
|
||||||
|
m = a + 128;
|
||||||
|
r = a;
|
||||||
|
|
||||||
|
sp_2048_from_bin(a, 64, in, inLen);
|
||||||
|
sp_2048_from_mp(d, 64, dm);
|
||||||
|
sp_2048_from_mp(m, 64, mm);
|
||||||
|
err = sp_2048_mod_exp_64(r, a, d, 2048, m, 0);
|
||||||
|
}
|
||||||
|
if (err == MP_OKAY) {
|
||||||
|
sp_2048_to_bin(r, out);
|
||||||
|
*outLen = 256;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (d != NULL) {
|
||||||
|
XMEMSET(d, 0, sizeof(sp_digit) * 64);
|
||||||
|
XFREE(d, NULL, DYNAMIC_TYPE_RSA);
|
||||||
|
}
|
||||||
|
|
||||||
|
return err;
|
||||||
|
#else
|
||||||
#if (!defined(WOLFSSL_SP_SMALL) && !defined(WOLFSSL_SMALL_STACK)) || defined(WOLFSSL_SP_NO_MALLOC)
|
#if (!defined(WOLFSSL_SP_SMALL) && !defined(WOLFSSL_SMALL_STACK)) || defined(WOLFSSL_SP_NO_MALLOC)
|
||||||
sp_digit a[64 * 2];
|
sp_digit a[64 * 2];
|
||||||
sp_digit p[32], q[32], dp[32];
|
sp_digit p[32], q[32], dp[32];
|
||||||
@ -4327,11 +4327,10 @@ int sp_RsaPrivate_2048(const byte* in, word32 inLen, mp_int* dm,
|
|||||||
XMEMSET(q, 0, sizeof(q));
|
XMEMSET(q, 0, sizeof(q));
|
||||||
XMEMSET(dp, 0, sizeof(dp));
|
XMEMSET(dp, 0, sizeof(dp));
|
||||||
#endif
|
#endif
|
||||||
|
#endif /* SP_RSA_PRIVATE_EXP_D || RSA_LOW_MEM */
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
#endif /* WOLFSSL_RSA_PUBLIC_ONLY */
|
#endif /* WOLFSSL_RSA_PUBLIC_ONLY */
|
||||||
#endif /* SP_RSA_PRIVATE_EXP_D || RSA_LOW_MEM */
|
|
||||||
#endif /* WOLFSSL_HAVE_SP_RSA */
|
#endif /* WOLFSSL_HAVE_SP_RSA */
|
||||||
#if defined(WOLFSSL_HAVE_SP_DH) || (defined(WOLFSSL_HAVE_SP_RSA) && \
|
#if defined(WOLFSSL_HAVE_SP_DH) || (defined(WOLFSSL_HAVE_SP_RSA) && \
|
||||||
!defined(WOLFSSL_RSA_PUBLIC_ONLY))
|
!defined(WOLFSSL_RSA_PUBLIC_ONLY))
|
||||||
@ -8766,63 +8765,6 @@ int sp_RsaPublic_3072(const byte* in, word32 inLen, mp_int* em, mp_int* mm,
|
|||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined(SP_RSA_PRIVATE_EXP_D) || defined(RSA_LOW_MEM)
|
|
||||||
sp_digit* a;
|
|
||||||
sp_digit* d = NULL;
|
|
||||||
sp_digit* m;
|
|
||||||
sp_digit* r;
|
|
||||||
int err = MP_OKAY;
|
|
||||||
|
|
||||||
(void)pm;
|
|
||||||
(void)qm;
|
|
||||||
(void)dpm;
|
|
||||||
(void)dqm;
|
|
||||||
(void)qim;
|
|
||||||
|
|
||||||
if (*outLen < 384U) {
|
|
||||||
err = MP_TO_E;
|
|
||||||
}
|
|
||||||
if (err == MP_OKAY) {
|
|
||||||
if (mp_count_bits(dm) > 3072) {
|
|
||||||
err = MP_READ_E;
|
|
||||||
}
|
|
||||||
if (inLen > 384) {
|
|
||||||
err = MP_READ_E;
|
|
||||||
}
|
|
||||||
if (mp_count_bits(mm) != 3072) {
|
|
||||||
err = MP_READ_E;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (err == MP_OKAY) {
|
|
||||||
d = (sp_digit*)XMALLOC(sizeof(sp_digit) * 96 * 4, NULL,
|
|
||||||
DYNAMIC_TYPE_RSA);
|
|
||||||
if (d == NULL) {
|
|
||||||
err = MEMORY_E;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (err == MP_OKAY) {
|
|
||||||
a = d + 96;
|
|
||||||
m = a + 192;
|
|
||||||
r = a;
|
|
||||||
|
|
||||||
sp_3072_from_bin(a, 96, in, inLen);
|
|
||||||
sp_3072_from_mp(d, 96, dm);
|
|
||||||
sp_3072_from_mp(m, 96, mm);
|
|
||||||
err = sp_3072_mod_exp_96(r, a, d, 3072, m, 0);
|
|
||||||
}
|
|
||||||
if (err == MP_OKAY) {
|
|
||||||
sp_3072_to_bin(r, out);
|
|
||||||
*outLen = 384;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (d != NULL) {
|
|
||||||
XMEMSET(d, 0, sizeof(sp_digit) * 96);
|
|
||||||
XFREE(d, NULL, DYNAMIC_TYPE_RSA);
|
|
||||||
}
|
|
||||||
|
|
||||||
return err;
|
|
||||||
#else
|
|
||||||
#ifndef WOLFSSL_RSA_PUBLIC_ONLY
|
#ifndef WOLFSSL_RSA_PUBLIC_ONLY
|
||||||
/* Conditionally add a and b using the mask m.
|
/* Conditionally add a and b using the mask m.
|
||||||
* m is -1 to add and 0 when not.
|
* m is -1 to add and 0 when not.
|
||||||
@ -8882,6 +8824,63 @@ int sp_RsaPrivate_3072(const byte* in, word32 inLen, mp_int* dm,
|
|||||||
mp_int* pm, mp_int* qm, mp_int* dpm, mp_int* dqm, mp_int* qim, mp_int* mm,
|
mp_int* pm, mp_int* qm, mp_int* dpm, mp_int* dqm, mp_int* qim, mp_int* mm,
|
||||||
byte* out, word32* outLen)
|
byte* out, word32* outLen)
|
||||||
{
|
{
|
||||||
|
#if defined(SP_RSA_PRIVATE_EXP_D) || defined(RSA_LOW_MEM)
|
||||||
|
sp_digit* a;
|
||||||
|
sp_digit* d = NULL;
|
||||||
|
sp_digit* m;
|
||||||
|
sp_digit* r;
|
||||||
|
int err = MP_OKAY;
|
||||||
|
|
||||||
|
(void)pm;
|
||||||
|
(void)qm;
|
||||||
|
(void)dpm;
|
||||||
|
(void)dqm;
|
||||||
|
(void)qim;
|
||||||
|
|
||||||
|
if (*outLen < 384U) {
|
||||||
|
err = MP_TO_E;
|
||||||
|
}
|
||||||
|
if (err == MP_OKAY) {
|
||||||
|
if (mp_count_bits(dm) > 3072) {
|
||||||
|
err = MP_READ_E;
|
||||||
|
}
|
||||||
|
if (inLen > 384) {
|
||||||
|
err = MP_READ_E;
|
||||||
|
}
|
||||||
|
if (mp_count_bits(mm) != 3072) {
|
||||||
|
err = MP_READ_E;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (err == MP_OKAY) {
|
||||||
|
d = (sp_digit*)XMALLOC(sizeof(sp_digit) * 96 * 4, NULL,
|
||||||
|
DYNAMIC_TYPE_RSA);
|
||||||
|
if (d == NULL) {
|
||||||
|
err = MEMORY_E;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (err == MP_OKAY) {
|
||||||
|
a = d + 96;
|
||||||
|
m = a + 192;
|
||||||
|
r = a;
|
||||||
|
|
||||||
|
sp_3072_from_bin(a, 96, in, inLen);
|
||||||
|
sp_3072_from_mp(d, 96, dm);
|
||||||
|
sp_3072_from_mp(m, 96, mm);
|
||||||
|
err = sp_3072_mod_exp_96(r, a, d, 3072, m, 0);
|
||||||
|
}
|
||||||
|
if (err == MP_OKAY) {
|
||||||
|
sp_3072_to_bin(r, out);
|
||||||
|
*outLen = 384;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (d != NULL) {
|
||||||
|
XMEMSET(d, 0, sizeof(sp_digit) * 96);
|
||||||
|
XFREE(d, NULL, DYNAMIC_TYPE_RSA);
|
||||||
|
}
|
||||||
|
|
||||||
|
return err;
|
||||||
|
#else
|
||||||
#if (!defined(WOLFSSL_SP_SMALL) && !defined(WOLFSSL_SMALL_STACK)) || defined(WOLFSSL_SP_NO_MALLOC)
|
#if (!defined(WOLFSSL_SP_SMALL) && !defined(WOLFSSL_SMALL_STACK)) || defined(WOLFSSL_SP_NO_MALLOC)
|
||||||
sp_digit a[96 * 2];
|
sp_digit a[96 * 2];
|
||||||
sp_digit p[48], q[48], dp[48];
|
sp_digit p[48], q[48], dp[48];
|
||||||
@ -8977,11 +8976,10 @@ int sp_RsaPrivate_3072(const byte* in, word32 inLen, mp_int* dm,
|
|||||||
XMEMSET(q, 0, sizeof(q));
|
XMEMSET(q, 0, sizeof(q));
|
||||||
XMEMSET(dp, 0, sizeof(dp));
|
XMEMSET(dp, 0, sizeof(dp));
|
||||||
#endif
|
#endif
|
||||||
|
#endif /* SP_RSA_PRIVATE_EXP_D || RSA_LOW_MEM */
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
#endif /* WOLFSSL_RSA_PUBLIC_ONLY */
|
#endif /* WOLFSSL_RSA_PUBLIC_ONLY */
|
||||||
#endif /* SP_RSA_PRIVATE_EXP_D || RSA_LOW_MEM */
|
|
||||||
#endif /* WOLFSSL_HAVE_SP_RSA */
|
#endif /* WOLFSSL_HAVE_SP_RSA */
|
||||||
#if defined(WOLFSSL_HAVE_SP_DH) || (defined(WOLFSSL_HAVE_SP_RSA) && \
|
#if defined(WOLFSSL_HAVE_SP_DH) || (defined(WOLFSSL_HAVE_SP_RSA) && \
|
||||||
!defined(WOLFSSL_RSA_PUBLIC_ONLY))
|
!defined(WOLFSSL_RSA_PUBLIC_ONLY))
|
||||||
@ -12362,63 +12360,6 @@ int sp_RsaPublic_4096(const byte* in, word32 inLen, mp_int* em, mp_int* mm,
|
|||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined(SP_RSA_PRIVATE_EXP_D) || defined(RSA_LOW_MEM)
|
|
||||||
sp_digit* a;
|
|
||||||
sp_digit* d = NULL;
|
|
||||||
sp_digit* m;
|
|
||||||
sp_digit* r;
|
|
||||||
int err = MP_OKAY;
|
|
||||||
|
|
||||||
(void)pm;
|
|
||||||
(void)qm;
|
|
||||||
(void)dpm;
|
|
||||||
(void)dqm;
|
|
||||||
(void)qim;
|
|
||||||
|
|
||||||
if (*outLen < 512U) {
|
|
||||||
err = MP_TO_E;
|
|
||||||
}
|
|
||||||
if (err == MP_OKAY) {
|
|
||||||
if (mp_count_bits(dm) > 4096) {
|
|
||||||
err = MP_READ_E;
|
|
||||||
}
|
|
||||||
if (inLen > 512) {
|
|
||||||
err = MP_READ_E;
|
|
||||||
}
|
|
||||||
if (mp_count_bits(mm) != 4096) {
|
|
||||||
err = MP_READ_E;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (err == MP_OKAY) {
|
|
||||||
d = (sp_digit*)XMALLOC(sizeof(sp_digit) * 128 * 4, NULL,
|
|
||||||
DYNAMIC_TYPE_RSA);
|
|
||||||
if (d == NULL) {
|
|
||||||
err = MEMORY_E;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (err == MP_OKAY) {
|
|
||||||
a = d + 128;
|
|
||||||
m = a + 256;
|
|
||||||
r = a;
|
|
||||||
|
|
||||||
sp_4096_from_bin(a, 128, in, inLen);
|
|
||||||
sp_4096_from_mp(d, 128, dm);
|
|
||||||
sp_4096_from_mp(m, 128, mm);
|
|
||||||
err = sp_4096_mod_exp_128(r, a, d, 4096, m, 0);
|
|
||||||
}
|
|
||||||
if (err == MP_OKAY) {
|
|
||||||
sp_4096_to_bin(r, out);
|
|
||||||
*outLen = 512;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (d != NULL) {
|
|
||||||
XMEMSET(d, 0, sizeof(sp_digit) * 128);
|
|
||||||
XFREE(d, NULL, DYNAMIC_TYPE_RSA);
|
|
||||||
}
|
|
||||||
|
|
||||||
return err;
|
|
||||||
#else
|
|
||||||
#ifndef WOLFSSL_RSA_PUBLIC_ONLY
|
#ifndef WOLFSSL_RSA_PUBLIC_ONLY
|
||||||
/* Conditionally add a and b using the mask m.
|
/* Conditionally add a and b using the mask m.
|
||||||
* m is -1 to add and 0 when not.
|
* m is -1 to add and 0 when not.
|
||||||
@ -12479,6 +12420,63 @@ int sp_RsaPrivate_4096(const byte* in, word32 inLen, mp_int* dm,
|
|||||||
mp_int* pm, mp_int* qm, mp_int* dpm, mp_int* dqm, mp_int* qim, mp_int* mm,
|
mp_int* pm, mp_int* qm, mp_int* dpm, mp_int* dqm, mp_int* qim, mp_int* mm,
|
||||||
byte* out, word32* outLen)
|
byte* out, word32* outLen)
|
||||||
{
|
{
|
||||||
|
#if defined(SP_RSA_PRIVATE_EXP_D) || defined(RSA_LOW_MEM)
|
||||||
|
sp_digit* a;
|
||||||
|
sp_digit* d = NULL;
|
||||||
|
sp_digit* m;
|
||||||
|
sp_digit* r;
|
||||||
|
int err = MP_OKAY;
|
||||||
|
|
||||||
|
(void)pm;
|
||||||
|
(void)qm;
|
||||||
|
(void)dpm;
|
||||||
|
(void)dqm;
|
||||||
|
(void)qim;
|
||||||
|
|
||||||
|
if (*outLen < 512U) {
|
||||||
|
err = MP_TO_E;
|
||||||
|
}
|
||||||
|
if (err == MP_OKAY) {
|
||||||
|
if (mp_count_bits(dm) > 4096) {
|
||||||
|
err = MP_READ_E;
|
||||||
|
}
|
||||||
|
if (inLen > 512) {
|
||||||
|
err = MP_READ_E;
|
||||||
|
}
|
||||||
|
if (mp_count_bits(mm) != 4096) {
|
||||||
|
err = MP_READ_E;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (err == MP_OKAY) {
|
||||||
|
d = (sp_digit*)XMALLOC(sizeof(sp_digit) * 128 * 4, NULL,
|
||||||
|
DYNAMIC_TYPE_RSA);
|
||||||
|
if (d == NULL) {
|
||||||
|
err = MEMORY_E;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (err == MP_OKAY) {
|
||||||
|
a = d + 128;
|
||||||
|
m = a + 256;
|
||||||
|
r = a;
|
||||||
|
|
||||||
|
sp_4096_from_bin(a, 128, in, inLen);
|
||||||
|
sp_4096_from_mp(d, 128, dm);
|
||||||
|
sp_4096_from_mp(m, 128, mm);
|
||||||
|
err = sp_4096_mod_exp_128(r, a, d, 4096, m, 0);
|
||||||
|
}
|
||||||
|
if (err == MP_OKAY) {
|
||||||
|
sp_4096_to_bin(r, out);
|
||||||
|
*outLen = 512;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (d != NULL) {
|
||||||
|
XMEMSET(d, 0, sizeof(sp_digit) * 128);
|
||||||
|
XFREE(d, NULL, DYNAMIC_TYPE_RSA);
|
||||||
|
}
|
||||||
|
|
||||||
|
return err;
|
||||||
|
#else
|
||||||
#if (!defined(WOLFSSL_SP_SMALL) && !defined(WOLFSSL_SMALL_STACK)) || defined(WOLFSSL_SP_NO_MALLOC)
|
#if (!defined(WOLFSSL_SP_SMALL) && !defined(WOLFSSL_SMALL_STACK)) || defined(WOLFSSL_SP_NO_MALLOC)
|
||||||
sp_digit a[128 * 2];
|
sp_digit a[128 * 2];
|
||||||
sp_digit p[64], q[64], dp[64];
|
sp_digit p[64], q[64], dp[64];
|
||||||
@ -12574,11 +12572,10 @@ int sp_RsaPrivate_4096(const byte* in, word32 inLen, mp_int* dm,
|
|||||||
XMEMSET(q, 0, sizeof(q));
|
XMEMSET(q, 0, sizeof(q));
|
||||||
XMEMSET(dp, 0, sizeof(dp));
|
XMEMSET(dp, 0, sizeof(dp));
|
||||||
#endif
|
#endif
|
||||||
|
#endif /* SP_RSA_PRIVATE_EXP_D || RSA_LOW_MEM */
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
#endif /* WOLFSSL_RSA_PUBLIC_ONLY */
|
#endif /* WOLFSSL_RSA_PUBLIC_ONLY */
|
||||||
#endif /* SP_RSA_PRIVATE_EXP_D || RSA_LOW_MEM */
|
|
||||||
#endif /* WOLFSSL_HAVE_SP_RSA */
|
#endif /* WOLFSSL_HAVE_SP_RSA */
|
||||||
#if defined(WOLFSSL_HAVE_SP_DH) || (defined(WOLFSSL_HAVE_SP_RSA) && \
|
#if defined(WOLFSSL_HAVE_SP_DH) || (defined(WOLFSSL_HAVE_SP_RSA) && \
|
||||||
!defined(WOLFSSL_RSA_PUBLIC_ONLY))
|
!defined(WOLFSSL_RSA_PUBLIC_ONLY))
|
||||||
|
Reference in New Issue
Block a user