ed448_goldilocks/curve/scalar_mul/
double_and_add.rs1use crate::curve::twedwards::extended::ExtendedPoint;
2use crate::curve::twedwards::extensible::ExtensiblePoint;
3use subtle::{Choice, ConditionallySelectable};
4
5pub(crate) fn double_and_add(point: &ExtendedPoint, s_bits: [bool; 448]) -> ExtensiblePoint {
7 let mut result = ExtensiblePoint::IDENTITY;
8
9 for bit in s_bits.into_iter().rev() {
12 result = result.double();
13
14 let mut p = ExtendedPoint::IDENTITY;
15 p.conditional_assign(point, Choice::from(bit as u8));
16 result = result.to_extended().add_extended(&p);
17 }
18
19 result
20}