decaf377/sign.rs
1use crate::Fq;
2
3pub trait Sign: core::ops::Neg<Output = Self> + Sized {
4 fn is_nonnegative(&self) -> bool;
5
6 fn is_negative(&self) -> bool {
7 !self.is_nonnegative()
8 }
9
10 fn abs(self) -> Self {
11 if self.is_nonnegative() {
12 self
13 } else {
14 -self
15 }
16 }
17}
18
19impl Sign for Fq {
20 fn is_nonnegative(&self) -> bool {
21 (self.to_le_limbs()[0] & 1) == 0
22 }
23}