lambdaworks_crypto/hash/pedersen/
parameters.rs1use 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}