poseidon377/
r1cs.rs

1use ark_relations::r1cs::{ConstraintSystemRef, SynthesisError};
2use decaf377::r1cs::FqVar;
3use poseidon_permutation::r1cs::InstanceVar;
4
5use crate::Fq;
6
7pub fn hash_1(
8    cs: ConstraintSystemRef<Fq>,
9    domain_separator: &FqVar,
10    value: FqVar,
11) -> Result<FqVar, SynthesisError> {
12    Ok(InstanceVar::n_to_1_fixed_hash(
13        crate::RATE_1_PARAMS.clone(),
14        cs.clone(),
15        [domain_separator.clone(), value],
16    ))
17}
18
19pub fn hash_2(
20    cs: ConstraintSystemRef<Fq>,
21    domain_separator: &FqVar,
22    value: (FqVar, FqVar),
23) -> Result<FqVar, SynthesisError> {
24    Ok(InstanceVar::n_to_1_fixed_hash(
25        crate::RATE_2_PARAMS.clone(),
26        cs.clone(),
27        [domain_separator.clone(), value.0, value.1],
28    ))
29}
30
31pub fn hash_3(
32    cs: ConstraintSystemRef<Fq>,
33    domain_separator: &FqVar,
34    value: (FqVar, FqVar, FqVar),
35) -> Result<FqVar, SynthesisError> {
36    Ok(InstanceVar::n_to_1_fixed_hash(
37        crate::RATE_3_PARAMS.clone(),
38        cs.clone(),
39        [domain_separator.clone(), value.0, value.1, value.2],
40    ))
41}
42
43pub fn hash_4(
44    cs: ConstraintSystemRef<Fq>,
45    domain_separator: &FqVar,
46    value: (FqVar, FqVar, FqVar, FqVar),
47) -> Result<FqVar, SynthesisError> {
48    Ok(InstanceVar::n_to_1_fixed_hash(
49        crate::RATE_4_PARAMS.clone(),
50        cs.clone(),
51        [domain_separator.clone(), value.0, value.1, value.2, value.3],
52    ))
53}
54
55pub fn hash_5(
56    cs: ConstraintSystemRef<Fq>,
57    domain_separator: &FqVar,
58    value: (FqVar, FqVar, FqVar, FqVar, FqVar),
59) -> Result<FqVar, SynthesisError> {
60    Ok(InstanceVar::n_to_1_fixed_hash(
61        crate::RATE_5_PARAMS.clone(),
62        cs.clone(),
63        [
64            domain_separator.clone(),
65            value.0,
66            value.1,
67            value.2,
68            value.3,
69            value.4,
70        ],
71    ))
72}
73
74pub fn hash_6(
75    cs: ConstraintSystemRef<Fq>,
76    domain_separator: &FqVar,
77    value: (FqVar, FqVar, FqVar, FqVar, FqVar, FqVar),
78) -> Result<FqVar, SynthesisError> {
79    Ok(InstanceVar::n_to_1_fixed_hash(
80        crate::RATE_6_PARAMS.clone(),
81        cs.clone(),
82        [
83            domain_separator.clone(),
84            value.0,
85            value.1,
86            value.2,
87            value.3,
88            value.4,
89            value.5,
90        ],
91    ))
92}
93
94pub fn hash_7(
95    cs: ConstraintSystemRef<Fq>,
96    domain_separator: &FqVar,
97    value: (FqVar, FqVar, FqVar, FqVar, FqVar, FqVar, FqVar),
98) -> Result<FqVar, SynthesisError> {
99    Ok(InstanceVar::n_to_1_fixed_hash(
100        crate::RATE_7_PARAMS.clone(),
101        cs.clone(),
102        [
103            domain_separator.clone(),
104            value.0,
105            value.1,
106            value.2,
107            value.3,
108            value.4,
109            value.5,
110            value.6,
111        ],
112    ))
113}