1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
use sp_std::vec::Vec;

#[inline(always)]
pub const fn sbb(a: u64, b: u64, brw: u64) -> (u64, u64) {
    let t = (a as u128).wrapping_sub((b as u128) + (brw >> 63) as u128);
    (t as u64, (t >> 64) as u64)
}

#[derive(Clone, Copy, Eq, PartialEq, Debug)]
pub enum Naf {
    Zero = 0,
    Plus = 1,
    Minus = 2,
}

impl From<i8> for Naf {
    fn from(value: i8) -> Self {
        match value {
            0 => Naf::Zero,
            1 => Naf::Plus,
            -1 => Naf::Minus,
            _ => unimplemented!(),
        }
    }
}

pub type Bits = Vec<u8>;

pub type Nafs = Vec<Naf>;