Don't use memmove, but use memcpy with dummy memory area.
Signed-off-by: NIIBE Yutaka <gniibe@fsij.org>
This commit is contained in:
@@ -1,3 +1,10 @@
|
|||||||
|
2020-09-09 NIIBE Yutaka <gniibe@fsij.org>
|
||||||
|
|
||||||
|
* src/modp256k1.c (modp256k1_add, modp256k1_sub): Use memcpy with
|
||||||
|
dummy memory area.
|
||||||
|
* src/modp256r1.c (modp256r1_add, modp256r1_sub)
|
||||||
|
(modp256r1_reduce): Likewise.
|
||||||
|
|
||||||
2020-09-08 NIIBE Yutaka <gniibe@fsij.org>
|
2020-09-08 NIIBE Yutaka <gniibe@fsij.org>
|
||||||
|
|
||||||
* src/modp256k1.c (modp256k1_add, modp256k1_reduce): Avoid
|
* src/modp256k1.c (modp256k1_add, modp256k1_reduce): Avoid
|
||||||
|
|||||||
@@ -71,10 +71,12 @@ modp256k1_add (bn256 *X, const bn256 *A, const bn256 *B)
|
|||||||
{
|
{
|
||||||
uint32_t cond;
|
uint32_t cond;
|
||||||
bn256 tmp[1];
|
bn256 tmp[1];
|
||||||
|
bn256 dummy[1];
|
||||||
|
|
||||||
cond = (bn256_add (X, A, B) == 0);
|
cond = (bn256_add (X, A, B) == 0);
|
||||||
cond &= bn256_sub (tmp, X, P256K1);
|
cond &= bn256_sub (tmp, X, P256K1);
|
||||||
memmove (cond?tmp:X, tmp, sizeof (bn256));
|
memcpy (cond?dummy:X, tmp, sizeof (bn256));
|
||||||
|
asm ("" : "=m" (dummy) : "m" (dummy) : "memory");
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -85,10 +87,12 @@ modp256k1_sub (bn256 *X, const bn256 *A, const bn256 *B)
|
|||||||
{
|
{
|
||||||
uint32_t borrow;
|
uint32_t borrow;
|
||||||
bn256 tmp[1];
|
bn256 tmp[1];
|
||||||
|
bn256 dummy[1];
|
||||||
|
|
||||||
borrow = bn256_sub (X, A, B);
|
borrow = bn256_sub (X, A, B);
|
||||||
bn256_add (tmp, X, P256K1);
|
bn256_add (tmp, X, P256K1);
|
||||||
memmove (borrow?X:tmp, tmp, sizeof (bn256));
|
memcpy (borrow?X:dummy, tmp, sizeof (bn256));
|
||||||
|
asm ("" : "=m" (dummy) : "m" (dummy) : "memory");
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -66,10 +66,12 @@ modp256r1_add (bn256 *X, const bn256 *A, const bn256 *B)
|
|||||||
{
|
{
|
||||||
uint32_t cond;
|
uint32_t cond;
|
||||||
bn256 tmp[1];
|
bn256 tmp[1];
|
||||||
|
bn256 dummy[1];
|
||||||
|
|
||||||
cond = (bn256_add (X, A, B) == 0);
|
cond = (bn256_add (X, A, B) == 0);
|
||||||
cond &= bn256_sub (tmp, X, P256R1);
|
cond &= bn256_sub (tmp, X, P256R1);
|
||||||
memmove (cond?tmp:X, tmp, sizeof (bn256));
|
memcpy (cond?dummy:X, tmp, sizeof (bn256));
|
||||||
|
asm ("" : "=m" (dummy) : "m" (dummy) : "memory");
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -80,10 +82,12 @@ modp256r1_sub (bn256 *X, const bn256 *A, const bn256 *B)
|
|||||||
{
|
{
|
||||||
uint32_t borrow;
|
uint32_t borrow;
|
||||||
bn256 tmp[1];
|
bn256 tmp[1];
|
||||||
|
bn256 dummy[1];
|
||||||
|
|
||||||
borrow = bn256_sub (X, A, B);
|
borrow = bn256_sub (X, A, B);
|
||||||
bn256_add (tmp, X, P256R1);
|
bn256_add (tmp, X, P256R1);
|
||||||
memmove (borrow?X:tmp, tmp, sizeof (bn256));
|
memcpy (borrow?X:dummy, tmp, sizeof (bn256));
|
||||||
|
asm ("" : "=m" (dummy) : "m" (dummy) : "memory");
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -93,6 +97,7 @@ void
|
|||||||
modp256r1_reduce (bn256 *X, const bn512 *A)
|
modp256r1_reduce (bn256 *X, const bn512 *A)
|
||||||
{
|
{
|
||||||
bn256 tmp[1], tmp0[1];
|
bn256 tmp[1], tmp0[1];
|
||||||
|
bn256 dummy[1];
|
||||||
uint32_t borrow;
|
uint32_t borrow;
|
||||||
|
|
||||||
#define S1 X
|
#define S1 X
|
||||||
@@ -114,7 +119,8 @@ modp256r1_reduce (bn256 *X, const bn512 *A)
|
|||||||
S1->word[1] = A->word[1];
|
S1->word[1] = A->word[1];
|
||||||
S1->word[0] = A->word[0];
|
S1->word[0] = A->word[0];
|
||||||
borrow = bn256_sub (tmp0, S1, P256R1);
|
borrow = bn256_sub (tmp0, S1, P256R1);
|
||||||
memmove (borrow?tmp0:S1, tmp0, sizeof (bn256));
|
memcpy (borrow?dummy:S1, tmp0, sizeof (bn256));
|
||||||
|
asm ("" : "=m" (dummy) : "m" (dummy) : "memory");
|
||||||
/* X = S1 */
|
/* X = S1 */
|
||||||
|
|
||||||
S2->word[7] = A->word[15];
|
S2->word[7] = A->word[15];
|
||||||
@@ -155,7 +161,8 @@ modp256r1_reduce (bn256 *X, const bn512 *A)
|
|||||||
S5->word[1] = A->word[10];
|
S5->word[1] = A->word[10];
|
||||||
S5->word[0] = A->word[9];
|
S5->word[0] = A->word[9];
|
||||||
borrow = bn256_sub (tmp0, S5, P256R1);
|
borrow = bn256_sub (tmp0, S5, P256R1);
|
||||||
memmove (borrow?tmp0:S5, tmp0, sizeof (bn256));
|
memcpy (borrow?dummy:S5, tmp0, sizeof (bn256));
|
||||||
|
asm ("" : "=m" (dummy) : "m" (dummy) : "memory");
|
||||||
/* X += S5 */
|
/* X += S5 */
|
||||||
modp256r1_add (X, X, S5);
|
modp256r1_add (X, X, S5);
|
||||||
|
|
||||||
@@ -166,7 +173,8 @@ modp256r1_reduce (bn256 *X, const bn512 *A)
|
|||||||
S6->word[1] = A->word[12];
|
S6->word[1] = A->word[12];
|
||||||
S6->word[0] = A->word[11];
|
S6->word[0] = A->word[11];
|
||||||
borrow = bn256_sub (tmp0, S6, P256R1);
|
borrow = bn256_sub (tmp0, S6, P256R1);
|
||||||
memmove (borrow?tmp0:S6, tmp0, sizeof (bn256));
|
memcpy (borrow?dummy:S6, tmp0, sizeof (bn256));
|
||||||
|
asm ("" : "=m" (dummy) : "m" (dummy) : "memory");
|
||||||
/* X -= S6 */
|
/* X -= S6 */
|
||||||
modp256r1_sub (X, X, S6);
|
modp256r1_sub (X, X, S6);
|
||||||
|
|
||||||
@@ -178,7 +186,8 @@ modp256r1_reduce (bn256 *X, const bn512 *A)
|
|||||||
S7->word[1] = A->word[13];
|
S7->word[1] = A->word[13];
|
||||||
S7->word[0] = A->word[12];
|
S7->word[0] = A->word[12];
|
||||||
borrow = bn256_sub (tmp0, S7, P256R1);
|
borrow = bn256_sub (tmp0, S7, P256R1);
|
||||||
memmove (borrow?tmp0:S7, tmp0, sizeof (bn256));
|
memcpy (borrow?dummy:S7, tmp0, sizeof (bn256));
|
||||||
|
asm ("" : "=m" (dummy) : "m" (dummy) : "memory");
|
||||||
/* X -= S7 */
|
/* X -= S7 */
|
||||||
modp256r1_sub (X, X, S7);
|
modp256r1_sub (X, X, S7);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user