use crate::curve::twedwards::extended::ExtendedPoint;
use crate::field::Scalar;
use subtle::{Choice, ConditionallySelectable};
pub(crate) fn double_and_add(point: &ExtendedPoint, s: &Scalar) -> ExtendedPoint {
let mut result = ExtendedPoint::IDENTITY;
for bit in s.bits().into_iter().rev() {
result = result.double();
let mut p = ExtendedPoint::IDENTITY;
p.conditional_assign(point, Choice::from(bit as u8));
result = result.add(&p);
}
result
}