sha256: Simplify single-constraint gates

`Option<T>` implements `IntoIterator<Item = T>`, so we don't need to
wrap it in an explicit iterator.
This commit is contained in:
Jack Grigg 2021-12-03 03:21:33 +00:00
parent f2d1f1d56a
commit 7d15fa3db5
2 changed files with 16 additions and 16 deletions

View File

@ -166,7 +166,7 @@ impl<F: FieldExt> CompressionGate<F> {
spread_c_mid: Expression<F>,
spread_c_hi: Expression<F>,
spread_d: Expression<F>,
) -> impl Iterator<Item = (&'static str, Expression<F>)> {
) -> Option<(&'static str, Expression<F>)> {
let spread_witness = spread_r0_even
+ spread_r0_odd * F::from(2)
+ (spread_r1_even + spread_r1_odd * F::from(2)) * F::from(1 << 32);
@ -191,7 +191,7 @@ impl<F: FieldExt> CompressionGate<F> {
let xor = xor_0 + xor_1 + xor_2;
let check = spread_witness + (xor * -F::one());
std::iter::empty().chain(Some(("s_upper_sigma_0", s_upper_sigma_0 * check)))
Some(("s_upper_sigma_0", s_upper_sigma_0 * check))
}
// s_upper_sigma_1 on efgh words
@ -209,7 +209,7 @@ impl<F: FieldExt> CompressionGate<F> {
spread_b_hi: Expression<F>,
spread_c: Expression<F>,
spread_d: Expression<F>,
) -> impl Iterator<Item = (&'static str, Expression<F>)> {
) -> Option<(&'static str, Expression<F>)> {
let spread_witness = spread_r0_even
+ spread_r0_odd * F::from(2)
+ (spread_r1_even + spread_r1_odd * F::from(2)) * F::from(1 << 32);
@ -235,7 +235,7 @@ impl<F: FieldExt> CompressionGate<F> {
let xor = xor_0 + xor_1 + xor_2;
let check = spread_witness + (xor * -F::one());
std::iter::empty().chain(Some(("s_upper_sigma_1", s_upper_sigma_1 * check)))
Some(("s_upper_sigma_1", s_upper_sigma_1 * check))
}
// First part of choice gate on (E, F, G), E ∧ F
@ -250,7 +250,7 @@ impl<F: FieldExt> CompressionGate<F> {
spread_e_hi: Expression<F>,
spread_f_lo: Expression<F>,
spread_f_hi: Expression<F>,
) -> impl Iterator<Item = (&'static str, Expression<F>)> {
) -> Option<(&'static str, Expression<F>)> {
let lhs_lo = spread_e_lo + spread_f_lo;
let lhs_hi = spread_e_hi + spread_f_hi;
let lhs = lhs_lo + lhs_hi * F::from(1 << 32);
@ -261,7 +261,7 @@ impl<F: FieldExt> CompressionGate<F> {
let check = lhs + rhs * -F::one();
std::iter::empty().chain(Some(("s_ch", s_ch * check)))
Some(("s_ch", s_ch * check))
}
// Second part of Choice gate on (E, F, G), ¬E ∧ G
@ -320,7 +320,7 @@ impl<F: FieldExt> CompressionGate<F> {
spread_b_hi: Expression<F>,
spread_c_lo: Expression<F>,
spread_c_hi: Expression<F>,
) -> impl Iterator<Item = (&'static str, Expression<F>)> {
) -> Option<(&'static str, Expression<F>)> {
let maj_even = spread_m_0_even + spread_m_1_even * F::from(1 << 32);
let maj_odd = spread_m_0_odd + spread_m_1_odd * F::from(1 << 32);
let maj = maj_even + maj_odd * F::from(2);
@ -330,7 +330,7 @@ impl<F: FieldExt> CompressionGate<F> {
let c = spread_c_lo + spread_c_hi * F::from(1 << 32);
let sum = a + b + c;
std::iter::empty().chain(Some(("maj", s_maj * (sum - maj))))
Some(("maj", s_maj * (sum - maj)))
}
// s_h_prime to get H' = H + Ch(E, F, G) + s_upper_sigma_1(E) + K + W
@ -352,7 +352,7 @@ impl<F: FieldExt> CompressionGate<F> {
k_hi: Expression<F>,
w_lo: Expression<F>,
w_hi: Expression<F>,
) -> impl Iterator<Item = (&'static str, Expression<F>)> {
) -> Option<(&'static str, Expression<F>)> {
let lo = h_lo + ch_lo + ch_neg_lo + sigma_e_lo + k_lo + w_lo;
let hi = h_hi + ch_hi + ch_neg_hi + sigma_e_hi + k_hi + w_hi;
@ -361,7 +361,7 @@ impl<F: FieldExt> CompressionGate<F> {
let check = sum - (h_prime_carry * F::from(1 << 32)) - h_prime;
std::iter::empty().chain(Some(("s_h_prime", s_h_prime * check)))
Some(("s_h_prime", s_h_prime * check))
}
// s_a_new to get A_new = H' + Maj(A, B, C) + s_upper_sigma_0(A)
@ -377,7 +377,7 @@ impl<F: FieldExt> CompressionGate<F> {
maj_abc_hi: Expression<F>,
h_prime_lo: Expression<F>,
h_prime_hi: Expression<F>,
) -> impl Iterator<Item = (&'static str, Expression<F>)> {
) -> Option<(&'static str, Expression<F>)> {
let lo = sigma_a_lo + maj_abc_lo + h_prime_lo;
let hi = sigma_a_hi + maj_abc_hi + h_prime_hi;
let sum = lo + hi * F::from(1 << 16);
@ -385,7 +385,7 @@ impl<F: FieldExt> CompressionGate<F> {
let check = sum - (a_new_carry * F::from(1 << 32)) - a_new;
std::iter::empty().chain(Some(("s_a_new", s_a_new * check)))
Some(("s_a_new", s_a_new * check))
}
// s_e_new to get E_new = H' + D
@ -399,7 +399,7 @@ impl<F: FieldExt> CompressionGate<F> {
d_hi: Expression<F>,
h_prime_lo: Expression<F>,
h_prime_hi: Expression<F>,
) -> impl Iterator<Item = (&'static str, Expression<F>)> {
) -> Option<(&'static str, Expression<F>)> {
let lo = h_prime_lo + d_lo;
let hi = h_prime_hi + d_hi;
let sum = lo + hi * F::from(1 << 16);
@ -407,7 +407,7 @@ impl<F: FieldExt> CompressionGate<F> {
let check = sum - (e_new_carry * F::from(1 << 32)) - e_new;
std::iter::empty().chain(Some(("s_e_new", s_e_new * check)))
Some(("s_e_new", s_e_new * check))
}
// s_digest on final round

View File

@ -40,9 +40,9 @@ impl<F: FieldExt> ScheduleGate<F> {
lo: Expression<F>,
hi: Expression<F>,
word: Expression<F>,
) -> impl Iterator<Item = (&'static str, Expression<F>)> {
) -> Option<(&'static str, Expression<F>)> {
let check = lo + hi * F::from(1 << 16) - word;
std::iter::empty().chain(Some(("s_decompose_0", s_decompose_0 * check)))
Some(("s_decompose_0", s_decompose_0 * check))
}
/// s_decompose_1 for W_1 to W_13