1use super::{FftField, TwistedEdwardsAffine, TwistedEdwardsExtended};
2
3use core::fmt::Debug;
4use parity_scale_codec::{Decode, EncodeLike};
5
6pub trait SigUtils<const L: usize>: Sized {
7 const LENGTH: usize = L;
8
9 fn to_bytes(self) -> [u8; L];
10
11 fn from_bytes(bytes: [u8; L]) -> Option<Self>;
12}
13
14pub trait RedDSA: Copy + Debug + Default + Ord + PartialEq {
15 type Range: FftField + Eq + PartialEq + SigUtils<32> + EncodeLike + Decode;
16
17 type Scalar: FftField + Eq + PartialEq + SigUtils<32> + Into<Self::Range>;
18
19 type Affine: TwistedEdwardsAffine<Extended = Self::Extended, Range = Self::Range, Scalar = Self::Scalar>
21 + PartialEq
22 + Eq
23 + SigUtils<32>;
24
25 type Extended: TwistedEdwardsExtended<Affine = Self::Affine, Range = Self::Range, Scalar = Self::Scalar>
27 + PartialEq
28 + Eq
29 + Ord
30 + SigUtils<32>;
31}