mirror of
https://github.com/serai-dex/serai.git
synced 2025-12-08 04:09:23 +00:00
Remove potentially vartime (due to cache side-channel attacks) table access in dalek-ff-group and minimal-ed448
This commit is contained in:
2
LICENSE
2
LICENSE
@@ -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.
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user