ashlang/
rings.rs

1use ring_math::polynomial_ring;
2use ring_math::Polynomial;
3use ring_math::PolynomialRingElement;
4
5use scalarff::alt_bn128::Bn128FieldElement;
6use scalarff::oxfoi::OxfoiFieldElement;
7use scalarff::scalar_ring;
8use scalarff::Curve25519FieldElement;
9use scalarff::FieldElement;
10
11polynomial_ring!(
12    Bn128PolynomialRing,
13    Bn128FieldElement,
14    {
15        let mut p = Polynomial::new(vec![Bn128FieldElement::one()]);
16        p.term(&Bn128FieldElement::one(), 64);
17        p
18    },
19    "alt_bn128 x^64+1 polynomial ring"
20);
21
22polynomial_ring!(
23    OxfoiPolynomialRing,
24    OxfoiFieldElement,
25    {
26        let mut p = Polynomial::new(vec![OxfoiFieldElement::one()]);
27        p.term(&OxfoiFieldElement::one(), 64);
28        p
29    },
30    "oxfoi x^64+1 polynomial ring"
31);
32
33polynomial_ring!(
34    Curve25519PolynomialRing,
35    Curve25519FieldElement,
36    {
37        let mut p = Polynomial::new(vec![Curve25519FieldElement::one()]);
38        p.term(&Curve25519FieldElement::one(), 64);
39        p
40    },
41    "curve25519 x^64+1 polynomial ring"
42);
43
44// creates a scalar ring struct DilithiumRingElement
45scalar_ring!(DilithiumRingElement, 8380417, "dilithium_23_bit");
46
47// creates a polynomial ring struct
48polynomial_ring!(
49    DilithiumPolynomialRingElement,
50    DilithiumRingElement,
51    {
52        // creating the ring modulus polynomial
53        // here we use x^64 + 1
54        let mut p = Polynomial::identity();
55        p.term(&DilithiumRingElement::one(), 64);
56        p
57    },
58    "dilithium x^64+1 polynomial ring"
59);