More Ed25519 cleanup (#2315)

* Cleanup Ed25519
This commit is contained in:
Airtz
2025-07-20 19:57:37 +02:00
committed by GitHub
parent 506e63284b
commit d422fb699f

View File

@@ -348,10 +348,10 @@ fn void F25519Int.reduce_carry(&s, uint carry)
carry *= 19; carry *= 19;
for (usz i; i < F25519Int.len; i++) foreach (i, &v : s)
{ {
carry += (*s)[i]; carry += *v;
(*s)[i] = (char)carry; *v = (char)carry;
carry >>= 8; carry >>= 8;
} }
} }
@@ -368,9 +368,9 @@ fn void F25519Int.normalize(&s)
// Substract p // Substract p
F25519Int sub @noinit; F25519Int sub @noinit;
ushort c = 19; ushort c = 19;
for (usz i; i + 1 < F25519Int.len; i++) foreach (i, v : (*s)[:^1])
{ {
c += (*s)[i]; c += v;
sub[i] = (char)c; sub[i] = (char)c;
c >>= 8; c >>= 8;
} }
@@ -389,7 +389,7 @@ fn void F25519Int.normalize(&s)
fn char eq(F25519Int* a, F25519Int* b) fn char eq(F25519Int* a, F25519Int* b)
{ {
char e; char e;
for (usz i; i < F25519Int.len; i++) e |= (*a)[i] ^ (*b)[i]; foreach (i, v : a) e |= v ^ (*b)[i];
e |= (e >> 4); e |= (e >> 4);
e |= (e >> 2); e |= (e >> 2);
@@ -408,7 +408,7 @@ fn F25519Int f25519_select(F25519Int* zero, F25519Int* one, char condition)
{ {
F25519Int r @noinit; F25519Int r @noinit;
for (usz i; i < F25519Int.len; i++) r[i] = (*zero)[i] ^ (-condition & ((*one)[i] ^ (*zero)[i])); foreach (i, z : zero) r[i] = z ^ (-condition & ((*one)[i] ^ z));
return r; return r;
} }
@@ -426,7 +426,7 @@ fn F25519Int F25519Int.add(&s, F25519Int* n) @operator(+)
F25519Int r @noinit; F25519Int r @noinit;
ushort c; ushort c;
foreach (i, v : *s) foreach (i, v : s)
{ {
c >>= 8; c >>= 8;
c += v + (*n)[i]; c += v + (*n)[i];
@@ -452,9 +452,9 @@ fn F25519Int F25519Int.sub(&s, F25519Int* n) @operator(-)
F25519Int r @noinit; F25519Int r @noinit;
uint c = (char)~(2 * 19 - 1); uint c = (char)~(2 * 19 - 1);
for (usz i; i + 1 < F25519Int.len; i++) foreach (i, v : (*s)[:^1])
{ {
c += 0b11111111_00000000 + (*s)[i] - (*n)[i]; c += 0b11111111_00000000 + v - (*n)[i];
r[i] = (char)c; r[i] = (char)c;
c >>= 8; c >>= 8;
} }
@@ -477,7 +477,7 @@ fn F25519Int F25519Int.neg(&s) @operator(-)
F25519Int r @noinit; F25519Int r @noinit;
uint c = (char)~(2 * 19 - 1); uint c = (char)~(2 * 19 - 1);
foreach (i, v : ((char*)s)[:F25519Int.len - 1]) foreach (i, v : (*s)[:^1])
{ {
c += 0b11111111_00000000 - v; c += 0b11111111_00000000 - v;
r[i] = (char)c; r[i] = (char)c;
@@ -491,7 +491,6 @@ fn F25519Int F25519Int.neg(&s) @operator(-)
return r; return r;
} }
macro F25519Int F25519Int.@mul(&s, F25519Int #n) @operator(*) => s.mul(@addr(#n)); macro F25519Int F25519Int.@mul(&s, F25519Int #n) @operator(*) => s.mul(@addr(#n));
<* <*
@@ -529,7 +528,7 @@ fn F25519Int F25519Int.mul_s(&s, uint n)
F25519Int r @noinit; F25519Int r @noinit;
uint c; uint c;
foreach (i, v : *s) foreach (i, v : s)
{ {
c >>= 8; c >>= 8;
c += v * n; c += v * n;
@@ -551,7 +550,7 @@ fn F25519Int F25519Int.inv(&s)
//Compute s^(p-2) //Compute s^(p-2)
F25519Int r = *s; F25519Int r = *s;
for (usz i; i < 255 - 1 - 5; i++) r = r * r * *s; for (usz i; i < 255 - 1 - 5; i++) r = r * r * s;
r *= r; r *= r;
r = r * r * s; r = r * r * s;
@@ -571,9 +570,9 @@ fn F25519Int F25519Int.pow_2523(&s) @local
{ {
F25519Int r = *s; F25519Int r = *s;
for (usz i; i < 252 - 1 - 2; i++) r = r * r * *s; for (usz i; i < 252 - 1 - 2; i++) r = r * r * s;
r = r * r; r *= r;
r = r * r * s; r = r * r * s;
return r; return r;
@@ -589,7 +588,7 @@ fn F25519Int F25519Int.sqrt(&s)
F25519Int twice = s.mul_s(2); F25519Int twice = s.mul_s(2);
F25519Int pow = twice.pow_2523(); F25519Int pow = twice.pow_2523();
return ((twice * pow * pow) - ONE) * s * pow; return (twice * pow * pow - ONE) * s * pow;
} }
@@ -607,7 +606,7 @@ typedef FBaseInt = inline char[32];
const FBaseInt ORDER = x"edd3f55c1a631258 d69cf7a2def9de14 0000000000000000 0000000000000010"; const FBaseInt ORDER = x"edd3f55c1a631258 d69cf7a2def9de14 0000000000000000 0000000000000010";
<* <*
FBaseInterpret bytes as a normalized element. Interpret bytes as a normalized element.
@param [in] bytes @param [in] bytes
*> *>
@@ -648,7 +647,7 @@ fn FBaseInt fbase_select(FBaseInt* zero, FBaseInt* one, char condition)
{ {
FBaseInt r @noinit; FBaseInt r @noinit;
for (usz i; i < FBaseInt.len; i++) r[i] = (*zero)[i] ^ (-condition & ((*one)[i] ^ (*zero)[i])); foreach (i, z : zero) r[i] = z ^ (-condition & ((*one)[i] ^ z));
return r; return r;
} }
@@ -666,9 +665,9 @@ fn FBaseInt FBaseInt.add(&s, FBaseInt* n) @operator(+)
FBaseInt r @noinit; FBaseInt r @noinit;
ushort c; ushort c;
for (usz i; i < FBaseInt.len; i++) foreach (i, v : s)
{ {
c += (*s)[i] + (*n)[i]; c += v + (*n)[i];
r[i] = (char)c; r[i] = (char)c;
c >>= 8; c >>= 8;
} }
@@ -686,9 +685,9 @@ fn FBaseInt FBaseInt.sub_l(&s, FBaseInt* n)
{ {
FBaseInt sub @noinit; FBaseInt sub @noinit;
ushort c; ushort c;
for (usz i; i < FBaseInt.len; i++) foreach (i, v : s)
{ {
c = (*s)[i] - (*n)[i] - c; c = v - (*n)[i] - c;
sub[i] = (char)c; sub[i] = (char)c;
c = (c >> 8) & 1; c = (c >> 8) & 1;
} }
@@ -706,9 +705,9 @@ fn FBaseInt FBaseInt.shl(&s, usz n) @operator(<<)
FBaseInt r @noinit; FBaseInt r @noinit;
ushort c; ushort c;
for (usz i; i < FBaseInt.len; i++) foreach (i, v : s)
{ {
c |= (*s)[i] << n; c |= v << n;
r[i] = (char)c; r[i] = (char)c;
c >>= 8; c >>= 8;
} }