use crate::curve25519_field::{CurveSetupError, checked_odd_modulus};
use crate::{Q_BYTES, UnsignedModularInt};
use modmath::{CiosMontMulCt, FieldCt, Parity, WideMul};
pub fn curve25519_ct<T>() -> Result<FieldCt<T>, CurveSetupError>
where
T: UnsignedModularInt
+ Copy
+ PartialEq
+ Parity
+ WideMul
+ CiosMontMulCt
+ subtle::ConditionallySelectable
+ subtle::ConstantTimeLess,
for<'a> &'a T:
const_num_traits::WrappingAdd<Output = T> + const_num_traits::WrappingSub<Output = T>,
{
Ok(FieldCt::new_odd(checked_odd_modulus::<T>(&Q_BYTES)?))
}