lambdaworks_crypto/hash/pedersen/
parameters.rs

1use lambdaworks_math::elliptic_curve::short_weierstrass::traits::IsShortWeierstrass;
2use lambdaworks_math::elliptic_curve::short_weierstrass::{
3    curves::stark_curve::StarkCurve, point::ShortWeierstrassProjectivePoint as Point,
4};
5use lambdaworks_math::elliptic_curve::traits::IsEllipticCurve;
6use lambdaworks_math::field::fields::fft_friendly::stark_252_prime_field::Stark252PrimeField;
7use lambdaworks_math::field::traits::IsPrimeField;
8
9use crate::hash::pedersen::constants::*;
10
11pub trait PedersenParameters {
12    type F: IsPrimeField + Clone;
13    type EC: IsEllipticCurve<BaseField = Self::F> + IsShortWeierstrass + Clone;
14
15    const CURVE_CONST_BITS: usize;
16    const TABLE_SIZE: usize;
17    const SHIFT_POINT: Point<Self::EC>;
18    const POINTS_P1: [Point<Self::EC>; 930];
19    const POINTS_P2: [Point<Self::EC>; 15];
20    const POINTS_P3: [Point<Self::EC>; 930];
21    const POINTS_P4: [Point<Self::EC>; 15];
22}
23
24pub struct PedersenStarkCurve;
25
26impl Default for PedersenStarkCurve {
27    fn default() -> Self {
28        Self::new()
29    }
30}
31
32impl PedersenStarkCurve {
33    pub fn new() -> Self {
34        Self {}
35    }
36}
37
38impl PedersenParameters for PedersenStarkCurve {
39    type F = Stark252PrimeField;
40    type EC = StarkCurve;
41
42    const CURVE_CONST_BITS: usize = 4;
43    const TABLE_SIZE: usize = (1 << Self::CURVE_CONST_BITS) - 1;
44    const SHIFT_POINT: Point<Self::EC> = shift_point();
45    const POINTS_P1: [Point<Self::EC>; 930] = points_p1();
46    const POINTS_P2: [Point<Self::EC>; 15] = points_p2();
47    const POINTS_P3: [Point<Self::EC>; 930] = points_p3();
48    const POINTS_P4: [Point<Self::EC>; 15] = points_p4();
49}