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}