diff --git a/wolfcrypt/src/sp_arm32.c b/wolfcrypt/src/sp_arm32.c index 4540dde65..b33143218 100644 --- a/wolfcrypt/src/sp_arm32.c +++ b/wolfcrypt/src/sp_arm32.c @@ -7489,63 +7489,6 @@ int sp_RsaPublic_2048(const byte* in, word32 inLen, mp_int* em, mp_int* mm, 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 /* Conditionally add a and b using the mask m. * 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, 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) sp_digit a[64 * 2]; 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(dp, 0, sizeof(dp)); #endif - +#endif /* SP_RSA_PRIVATE_EXP_D || RSA_LOW_MEM */ return err; } #endif /* WOLFSSL_RSA_PUBLIC_ONLY */ -#endif /* SP_RSA_PRIVATE_EXP_D || RSA_LOW_MEM */ #endif /* WOLFSSL_HAVE_SP_RSA */ #if defined(WOLFSSL_HAVE_SP_DH) || (defined(WOLFSSL_HAVE_SP_RSA) && \ !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; } -#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 /* Conditionally add a and b using the mask m. * 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, 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) sp_digit a[96 * 2]; 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(dp, 0, sizeof(dp)); #endif - +#endif /* SP_RSA_PRIVATE_EXP_D || RSA_LOW_MEM */ return err; } #endif /* WOLFSSL_RSA_PUBLIC_ONLY */ -#endif /* SP_RSA_PRIVATE_EXP_D || RSA_LOW_MEM */ #endif /* WOLFSSL_HAVE_SP_RSA */ #if defined(WOLFSSL_HAVE_SP_DH) || (defined(WOLFSSL_HAVE_SP_RSA) && \ !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; } -#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 /* Conditionally add a and b using the mask m. * 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, 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) sp_digit a[128 * 2]; 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(dp, 0, sizeof(dp)); #endif - +#endif /* SP_RSA_PRIVATE_EXP_D || RSA_LOW_MEM */ return err; } #endif /* WOLFSSL_RSA_PUBLIC_ONLY */ -#endif /* SP_RSA_PRIVATE_EXP_D || RSA_LOW_MEM */ #endif /* WOLFSSL_HAVE_SP_RSA */ #if defined(WOLFSSL_HAVE_SP_DH) || (defined(WOLFSSL_HAVE_SP_RSA) && \ !defined(WOLFSSL_RSA_PUBLIC_ONLY)) diff --git a/wolfcrypt/src/sp_arm64.c b/wolfcrypt/src/sp_arm64.c index ebebe2a55..370a63dbe 100644 --- a/wolfcrypt/src/sp_arm64.c +++ b/wolfcrypt/src/sp_arm64.c @@ -4991,63 +4991,6 @@ int sp_RsaPublic_2048(const byte* in, word32 inLen, mp_int* em, mp_int* mm, 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 /* Conditionally add a and b using the mask m. * 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, 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) sp_digit a[32 * 2]; 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(dp, 0, sizeof(dp)); #endif - +#endif /* SP_RSA_PRIVATE_EXP_D || RSA_LOW_MEM */ return err; } #endif /* WOLFSSL_RSA_PUBLIC_ONLY */ -#endif /* SP_RSA_PRIVATE_EXP_D || RSA_LOW_MEM */ #endif /* WOLFSSL_HAVE_SP_RSA */ #if defined(WOLFSSL_HAVE_SP_DH) || (defined(WOLFSSL_HAVE_SP_RSA) && \ !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; } -#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 /* Conditionally add a and b using the mask m. * 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, 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) sp_digit a[48 * 2]; 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(dp, 0, sizeof(dp)); #endif - +#endif /* SP_RSA_PRIVATE_EXP_D || RSA_LOW_MEM */ return err; } #endif /* WOLFSSL_RSA_PUBLIC_ONLY */ -#endif /* SP_RSA_PRIVATE_EXP_D || RSA_LOW_MEM */ #endif /* WOLFSSL_HAVE_SP_RSA */ #if defined(WOLFSSL_HAVE_SP_DH) || (defined(WOLFSSL_HAVE_SP_RSA) && \ !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; } -#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 /* Conditionally add a and b using the mask m. * 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, 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) sp_digit a[64 * 2]; 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(dp, 0, sizeof(dp)); #endif - +#endif /* SP_RSA_PRIVATE_EXP_D || RSA_LOW_MEM */ return err; } #endif /* WOLFSSL_RSA_PUBLIC_ONLY */ -#endif /* SP_RSA_PRIVATE_EXP_D || RSA_LOW_MEM */ #endif /* WOLFSSL_HAVE_SP_RSA */ #if defined(WOLFSSL_HAVE_SP_DH) || (defined(WOLFSSL_HAVE_SP_RSA) && \ !defined(WOLFSSL_RSA_PUBLIC_ONLY)) diff --git a/wolfcrypt/src/sp_armthumb.c b/wolfcrypt/src/sp_armthumb.c index 40cb431a3..2275dba3f 100644 --- a/wolfcrypt/src/sp_armthumb.c +++ b/wolfcrypt/src/sp_armthumb.c @@ -4362,63 +4362,6 @@ int sp_RsaPublic_2048(const byte* in, word32 inLen, mp_int* em, mp_int* mm, 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 /* Conditionally add a and b using the mask m. * 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, 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) sp_digit a[64 * 2]; 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(dp, 0, sizeof(dp)); #endif - +#endif /* SP_RSA_PRIVATE_EXP_D || RSA_LOW_MEM */ return err; } #endif /* WOLFSSL_RSA_PUBLIC_ONLY */ -#endif /* SP_RSA_PRIVATE_EXP_D || RSA_LOW_MEM */ #endif /* WOLFSSL_HAVE_SP_RSA */ #if defined(WOLFSSL_HAVE_SP_DH) || (defined(WOLFSSL_HAVE_SP_RSA) && \ !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; } -#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 /* Conditionally add a and b using the mask m. * 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, 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) sp_digit a[96 * 2]; 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(dp, 0, sizeof(dp)); #endif - +#endif /* SP_RSA_PRIVATE_EXP_D || RSA_LOW_MEM */ return err; } #endif /* WOLFSSL_RSA_PUBLIC_ONLY */ -#endif /* SP_RSA_PRIVATE_EXP_D || RSA_LOW_MEM */ #endif /* WOLFSSL_HAVE_SP_RSA */ #if defined(WOLFSSL_HAVE_SP_DH) || (defined(WOLFSSL_HAVE_SP_RSA) && \ !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; } -#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 /* Conditionally add a and b using the mask m. * 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, 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) sp_digit a[128 * 2]; 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(dp, 0, sizeof(dp)); #endif - +#endif /* SP_RSA_PRIVATE_EXP_D || RSA_LOW_MEM */ return err; } #endif /* WOLFSSL_RSA_PUBLIC_ONLY */ -#endif /* SP_RSA_PRIVATE_EXP_D || RSA_LOW_MEM */ #endif /* WOLFSSL_HAVE_SP_RSA */ #if defined(WOLFSSL_HAVE_SP_DH) || (defined(WOLFSSL_HAVE_SP_RSA) && \ !defined(WOLFSSL_RSA_PUBLIC_ONLY)) diff --git a/wolfcrypt/src/sp_cortexm.c b/wolfcrypt/src/sp_cortexm.c index e5214c3e3..6d8ebf0cc 100644 --- a/wolfcrypt/src/sp_cortexm.c +++ b/wolfcrypt/src/sp_cortexm.c @@ -4116,63 +4116,6 @@ int sp_RsaPublic_2048(const byte* in, word32 inLen, mp_int* em, mp_int* mm, 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 /* Conditionally add a and b using the mask m. * 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, 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) sp_digit a[64 * 2]; 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(dp, 0, sizeof(dp)); #endif - +#endif /* SP_RSA_PRIVATE_EXP_D || RSA_LOW_MEM */ return err; } #endif /* WOLFSSL_RSA_PUBLIC_ONLY */ -#endif /* SP_RSA_PRIVATE_EXP_D || RSA_LOW_MEM */ #endif /* WOLFSSL_HAVE_SP_RSA */ #if defined(WOLFSSL_HAVE_SP_DH) || (defined(WOLFSSL_HAVE_SP_RSA) && \ !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; } -#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 /* Conditionally add a and b using the mask m. * 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, 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) sp_digit a[96 * 2]; 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(dp, 0, sizeof(dp)); #endif - +#endif /* SP_RSA_PRIVATE_EXP_D || RSA_LOW_MEM */ return err; } #endif /* WOLFSSL_RSA_PUBLIC_ONLY */ -#endif /* SP_RSA_PRIVATE_EXP_D || RSA_LOW_MEM */ #endif /* WOLFSSL_HAVE_SP_RSA */ #if defined(WOLFSSL_HAVE_SP_DH) || (defined(WOLFSSL_HAVE_SP_RSA) && \ !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; } -#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 /* Conditionally add a and b using the mask m. * 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, 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) sp_digit a[128 * 2]; 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(dp, 0, sizeof(dp)); #endif - +#endif /* SP_RSA_PRIVATE_EXP_D || RSA_LOW_MEM */ return err; } #endif /* WOLFSSL_RSA_PUBLIC_ONLY */ -#endif /* SP_RSA_PRIVATE_EXP_D || RSA_LOW_MEM */ #endif /* WOLFSSL_HAVE_SP_RSA */ #if defined(WOLFSSL_HAVE_SP_DH) || (defined(WOLFSSL_HAVE_SP_RSA) && \ !defined(WOLFSSL_RSA_PUBLIC_ONLY))