zkstd/traits/
sign.rs

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    // affine point
20    type Affine: TwistedEdwardsAffine<Extended = Self::Extended, Range = Self::Range, Scalar = Self::Scalar>
21        + PartialEq
22        + Eq
23        + SigUtils<32>;
24
25    // extend point
26    type Extended: TwistedEdwardsExtended<Affine = Self::Affine, Range = Self::Range, Scalar = Self::Scalar>
27        + PartialEq
28        + Eq
29        + Ord
30        + SigUtils<32>;
31}