diff --git a/src/traits.rs b/src/traits.rs index 12a605e12..dee2e3f1b 100644 --- a/src/traits.rs +++ b/src/traits.rs @@ -7,8 +7,8 @@ pub use num_traits::{ use crate::{Limb, NonZero}; use core::fmt::Debug; use core::ops::{ - BitAnd, BitAndAssign, BitOr, BitOrAssign, BitXor, BitXorAssign, Div, DivAssign, Not, Rem, Shl, - ShlAssign, Shr, ShrAssign, + Add, BitAnd, BitAndAssign, BitOr, BitOrAssign, BitXor, BitXorAssign, Div, DivAssign, Mul, Not, + Rem, Shl, ShlAssign, Shr, ShrAssign, Sub, }; use subtle::{ Choice, ConditionallySelectable, ConstantTimeEq, ConstantTimeGreater, ConstantTimeLess, @@ -30,16 +30,21 @@ pub trait Bounded { /// Integer trait: represents common functionality of integer types provided by this crate. pub trait Integer: 'static - + AddMod + + Add + + for<'a> Add<&'a Self, Output = Self> + + AddMod + AsRef<[Limb]> - + BitAndAssign - + BitOrAssign - + BitXorAssign + BitAnd - + BitOr - + BitXor + + for<'a> BitAnd<&'a Self, Output = Self> + + BitAndAssign + for<'a> BitAndAssign<&'a Self> + + BitOr + + for<'a> BitOr<&'a Self, Output = Self> + + BitOrAssign + for<'a> BitOrAssign<&'a Self> + + BitXor + + for<'a> BitXor<&'a Self, Output = Self> + + BitXorAssign + for<'a> BitXorAssign<&'a Self> + CheckedAdd + CheckedSub @@ -53,17 +58,19 @@ pub trait Integer: + Debug + Default + Div, Output = Self> - + DivAssign> + for<'a> Div<&'a NonZero, Output = Self> + + DivAssign> + for<'a> DivAssign<&'a NonZero> + Eq + From + From + From + From - + MulMod - + NegMod - + Not + + Mul + + for<'a> Mul<&'a Self, Output = Self> + + MulMod + + NegMod + + Not + Ord + Rem, Output = Self> + for<'a> Rem<&'a NonZero, Output = Self> @@ -73,7 +80,9 @@ pub trait Integer: + ShlAssign + Shr + ShrAssign - + SubMod + + Sub + + for<'a> Sub<&'a Self, Output = Self> + + SubMod + Sync + WrappingAdd + WrappingSub @@ -345,7 +354,7 @@ pub trait Encoding: Sized { /// Support for optimized squaring pub trait Square: Sized where - for<'a> &'a Self: core::ops::Mul<&'a Self, Output = Self>, + for<'a> &'a Self: Mul<&'a Self, Output = Self>, { /// Computes the same as `self.mul(self)`, but may be more efficient. fn square(&self) -> Self {