mirror of https://github.com/zcash/orchard.git
Docfixes and minor refactors.
Co-authored-by: str4d <jack@electriccoin.co>
This commit is contained in:
parent
fe1bc97ab4
commit
79123629da
|
@ -31,7 +31,10 @@ pub struct Pow5Config<F: FieldExt, const WIDTH: usize, const RATE: usize> {
|
||||||
m_inv: Mds<F, WIDTH>,
|
m_inv: Mds<F, WIDTH>,
|
||||||
}
|
}
|
||||||
|
|
||||||
/// A Poseidon chip using an $x^5$ S-Box, with a width of 3, suitable for a 2:1 reduction.
|
/// A Poseidon chip using an $x^5$ S-Box.
|
||||||
|
///
|
||||||
|
/// The chip is implemented using a single round per row for full rounds, and two rounds
|
||||||
|
/// per row for partial rounds.
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
pub struct Pow5Chip<F: FieldExt, const WIDTH: usize, const RATE: usize> {
|
pub struct Pow5Chip<F: FieldExt, const WIDTH: usize, const RATE: usize> {
|
||||||
config: Pow5Config<F, WIDTH, RATE>,
|
config: Pow5Config<F, WIDTH, RATE>,
|
||||||
|
@ -122,12 +125,13 @@ impl<F: FieldExt, const WIDTH: usize, const RATE: usize> Pow5Chip<F, WIDTH, RATE
|
||||||
};
|
};
|
||||||
|
|
||||||
let next = |idx: usize, meta: &mut VirtualCells<F>| {
|
let next = |idx: usize, meta: &mut VirtualCells<F>| {
|
||||||
let next_0 = meta.query_advice(state[0], Rotation::next());
|
(0..WIDTH)
|
||||||
let next_0 = next_0 * m_inv[idx][0];
|
.map(|next_idx| {
|
||||||
(1..WIDTH).fold(next_0, |acc, next_idx| {
|
let next = meta.query_advice(state[next_idx], Rotation::next());
|
||||||
let next = meta.query_advice(state[next_idx], Rotation::next());
|
next * m_inv[idx][next_idx]
|
||||||
acc + next * m_inv[idx][next_idx]
|
})
|
||||||
})
|
.reduce(|acc, next| acc + next)
|
||||||
|
.expect("WIDTH > 0")
|
||||||
};
|
};
|
||||||
|
|
||||||
let partial_round_linear = |idx: usize, meta: &mut VirtualCells<F>| {
|
let partial_round_linear = |idx: usize, meta: &mut VirtualCells<F>| {
|
||||||
|
@ -481,9 +485,9 @@ impl<F: FieldExt, const WIDTH: usize> Pow5State<F, WIDTH> {
|
||||||
.iter()
|
.iter()
|
||||||
.map(|m_i| {
|
.map(|m_i| {
|
||||||
r.as_ref().map(|r| {
|
r.as_ref().map(|r| {
|
||||||
r.iter()
|
m_i.iter()
|
||||||
.enumerate()
|
.zip(r.iter())
|
||||||
.fold(F::zero(), |acc, (j, r_j)| acc + m_i[j] * r_j)
|
.fold(F::zero(), |acc, (m_ij, r_j)| acc + *m_ij * r_j)
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
.collect();
|
.collect();
|
||||||
|
@ -514,9 +518,9 @@ impl<F: FieldExt, const WIDTH: usize> Pow5State<F, WIDTH> {
|
||||||
.iter()
|
.iter()
|
||||||
.map(|m_i| {
|
.map(|m_i| {
|
||||||
r_mid.as_ref().map(|r| {
|
r_mid.as_ref().map(|r| {
|
||||||
r.iter()
|
m_i.iter()
|
||||||
.enumerate()
|
.zip(r.iter())
|
||||||
.fold(F::zero(), |acc, (j, r_j)| acc + m_i[j] * r_j)
|
.fold(F::zero(), |acc, (m_ij, r_j)| acc + *m_ij * r_j)
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
.collect();
|
.collect();
|
||||||
|
|
Loading…
Reference in New Issue