Remove potentially vartime (due to cache side-channel attacks) table access in dalek-ff-group and minimal-ed448
Some checks failed
Full Stack Tests / build (push) Has been cancelled
Coordinator Tests / build (push) Has been cancelled
crypto/ Tests / test-crypto (push) Has been cancelled
networks/ Tests / test-networks (push) Has been cancelled
Message Queue Tests / build (push) Has been cancelled
no-std build / build (push) Has been cancelled
Lint / clippy (macos-13) (push) Has been cancelled
Lint / clippy (macos-14) (push) Has been cancelled
Lint / clippy (ubuntu-latest) (push) Has been cancelled
Lint / clippy (windows-latest) (push) Has been cancelled
Lint / deny (push) Has been cancelled
Lint / fmt (push) Has been cancelled
Lint / machete (push) Has been cancelled
Deploy Rust docs and Jekyll site to Pages / build (push) Has been cancelled
Processor Tests / build (push) Has been cancelled
Reproducible Runtime / build (push) Has been cancelled
Tests / test-infra (push) Has been cancelled
Tests / test-substrate (push) Has been cancelled
Tests / test-serai-client (push) Has been cancelled
Deploy Rust docs and Jekyll site to Pages / deploy (push) Has been cancelled

This commit is contained in:
Luke Parker 2024-10-27 08:51:19 -04:00
parent f3d20e60b3
commit d0201cf2e5
No known key found for this signature in database
5 changed files with 41 additions and 5 deletions

View file

@ -5,4 +5,4 @@ a full copy of the AGPL-3.0 License is included in the root of this repository
as a reference text. This copy should be provided with any distribution of a as a reference text. This copy should be provided with any distribution of a
crate licensed under the AGPL-3.0, as per its terms. crate licensed under the AGPL-3.0, as per its terms.
The GitHub actions (`.github/actions`) are licensed under the MIT license. The GitHub actions/workflows (`.github`) are licensed under the MIT license.

View file

@ -244,7 +244,16 @@ impl FieldElement {
res *= res; res *= res;
} }
} }
res *= table[usize::from(bits)];
let mut scale_by = FieldElement::ONE;
#[allow(clippy::needless_range_loop)]
for i in 0 .. 16 {
#[allow(clippy::cast_possible_truncation)] // Safe since 0 .. 16
{
scale_by = <_>::conditional_select(&scale_by, &table[i], bits.ct_eq(&(i as u8)));
}
}
res *= scale_by;
bits = 0; bits = 0;
} }
} }

View file

@ -208,7 +208,16 @@ impl Scalar {
res *= res; res *= res;
} }
} }
res *= table[usize::from(bits)];
let mut scale_by = Scalar::ONE;
#[allow(clippy::needless_range_loop)]
for i in 0 .. 16 {
#[allow(clippy::cast_possible_truncation)] // Safe since 0 .. 16
{
scale_by = <_>::conditional_select(&scale_by, &table[i], bits.ct_eq(&(i as u8)));
}
}
res *= scale_by;
bits = 0; bits = 0;
} }
} }

View file

@ -161,7 +161,16 @@ macro_rules! field {
res *= res; res *= res;
} }
} }
res *= table[usize::from(bits)];
let mut scale_by = $FieldName(Residue::ONE);
#[allow(clippy::needless_range_loop)]
for i in 0 .. 16 {
#[allow(clippy::cast_possible_truncation)] // Safe since 0 .. 16
{
scale_by = <_>::conditional_select(&scale_by, &table[i], bits.ct_eq(&(i as u8)));
}
}
res *= scale_by;
bits = 0; bits = 0;
} }
} }

View file

@ -242,7 +242,16 @@ impl Mul<Scalar> for Point {
res = res.double(); res = res.double();
} }
} }
res += table[usize::from(bits)];
let mut add_by = Point::identity();
#[allow(clippy::needless_range_loop)]
for i in 0 .. 16 {
#[allow(clippy::cast_possible_truncation)] // Safe since 0 .. 16
{
add_by = <_>::conditional_select(&add_by, &table[i], bits.ct_eq(&(i as u8)));
}
}
res += add_by;
bits = 0; bits = 0;
} }
} }