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}