mirror of
https://github.com/wolfSSL/wolfssl.git
synced 2025-08-02 04:04:39 +02:00
rshb check range of n
This commit is contained in:
@@ -562,6 +562,17 @@ void mp_rshb (mp_int *c, int x)
|
|||||||
mp_digit r, rr;
|
mp_digit r, rr;
|
||||||
mp_digit D = x;
|
mp_digit D = x;
|
||||||
|
|
||||||
|
/* shifting by a negative number not supported */
|
||||||
|
if (x < 0) return;
|
||||||
|
|
||||||
|
/* shift digits first if needed */
|
||||||
|
if (x >= DIGIT_BIT) {
|
||||||
|
mp_rshd(c, x / DIGIT_BIT);
|
||||||
|
/* recalculate number of bits to shift */
|
||||||
|
D = x % DIGIT_BIT;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* zero shifted is always zero */
|
||||||
if (mp_iszero(c)) return;
|
if (mp_iszero(c)) return;
|
||||||
|
|
||||||
/* mask */
|
/* mask */
|
||||||
|
@@ -46,7 +46,7 @@
|
|||||||
* WOLFSSL_SP_4096: Enable RSA/RH 4096-bit support
|
* WOLFSSL_SP_4096: Enable RSA/RH 4096-bit support
|
||||||
* WOLFSSL_SP_384 Enable ECC 384-bit SECP384R1 support
|
* WOLFSSL_SP_384 Enable ECC 384-bit SECP384R1 support
|
||||||
* WOLFSSL_SP_NO_256 Disable ECC 256-bit SECP256R1 support
|
* WOLFSSL_SP_NO_256 Disable ECC 256-bit SECP256R1 support
|
||||||
* WOLFSSL_SP_CACHE_RESISTANT Enable cache resistantant code
|
* WOLFSSL_SP_CACHE_RESISTANT Enable cache resistantant code
|
||||||
* WOLFSSL_SP_ASM Enable assembly speedups (detect platform)
|
* WOLFSSL_SP_ASM Enable assembly speedups (detect platform)
|
||||||
* WOLFSSL_SP_X86_64_ASM Enable Intel x86 assembly speedups like AVX/AVX2
|
* WOLFSSL_SP_X86_64_ASM Enable Intel x86 assembly speedups like AVX/AVX2
|
||||||
* WOLFSSL_SP_ARM32_ASM Enable Aarch32 assembly speedups
|
* WOLFSSL_SP_ARM32_ASM Enable Aarch32 assembly speedups
|
||||||
@@ -658,21 +658,28 @@ int sp_sub(sp_int* a, sp_int* b, sp_int* r)
|
|||||||
*/
|
*/
|
||||||
void sp_rshb(sp_int* a, int n, sp_int* r)
|
void sp_rshb(sp_int* a, int n, sp_int* r)
|
||||||
{
|
{
|
||||||
int i;
|
int i = n / SP_WORD_SIZE;
|
||||||
int j;
|
int j;
|
||||||
int s = n % SP_WORD_SIZE;
|
|
||||||
|
|
||||||
if (s == 0) {
|
if (i >= a->used) {
|
||||||
for (i = n / SP_WORD_SIZE, j = 0; i < a->used-1; i++, j++)
|
r->dp[0] = 0;
|
||||||
r->dp[j] = a->dp[i];
|
r->used = 0;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
for (i = n / SP_WORD_SIZE, j = 0; i < a->used-1; i++, j++)
|
n %= SP_WORD_SIZE;
|
||||||
r->dp[j] = (a->dp[i] >> s) | (a->dp[i+1] << (SP_WORD_SIZE - s));
|
if (n == 0) {
|
||||||
|
for (j = 0; i < a->used; i++, j++)
|
||||||
|
r->dp[j] = a->dp[i];
|
||||||
|
r->used = j;
|
||||||
|
}
|
||||||
|
if (n > 0) {
|
||||||
|
for (j = 0; i < a->used-1; i++, j++)
|
||||||
|
r->dp[j] = (a->dp[i] >> n) | (a->dp[i+1] << (SP_WORD_SIZE - n));
|
||||||
|
r->dp[j] = a->dp[i] >> n;
|
||||||
|
r->used = j + 1;
|
||||||
|
sp_clamp(r);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
r->dp[j] = a->dp[i] >> s;
|
|
||||||
r->used = j + 1;
|
|
||||||
sp_clamp(r);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Multiply a by digit n and put result into r shifting up o digits.
|
/* Multiply a by digit n and put result into r shifting up o digits.
|
||||||
|
@@ -3415,6 +3415,17 @@ void fp_rshb(fp_int *c, int x)
|
|||||||
fp_digit r, rr;
|
fp_digit r, rr;
|
||||||
fp_digit D = x;
|
fp_digit D = x;
|
||||||
|
|
||||||
|
/* shifting by a negative number not supported */
|
||||||
|
if (x < 0) return;
|
||||||
|
|
||||||
|
/* shift digits first if needed */
|
||||||
|
if (x >= DIGIT_BIT) {
|
||||||
|
fp_rshd(c, x / DIGIT_BIT);
|
||||||
|
/* recalculate number of bits to shift */
|
||||||
|
D = x % DIGIT_BIT;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* zero shifted is always zero */
|
||||||
if (fp_iszero(c)) return;
|
if (fp_iszero(c)) return;
|
||||||
|
|
||||||
/* mask */
|
/* mask */
|
||||||
|
Reference in New Issue
Block a user