mirror of https://github.com/zcash/halo2.git
sha256: Fix / silence lints
This commit is contained in:
parent
2f21135e68
commit
a688c8b03d
|
@ -21,6 +21,7 @@ use criterion::{criterion_group, criterion_main, Criterion};
|
|||
|
||||
use crate::{BlockWord, Sha256, Table16Chip, Table16Config, BLOCK_SIZE};
|
||||
|
||||
#[allow(dead_code)]
|
||||
fn bench(name: &str, k: u32, c: &mut Criterion) {
|
||||
struct MyCircuit {}
|
||||
|
||||
|
@ -72,7 +73,7 @@ fn bench(name: &str, k: u32, c: &mut Criterion) {
|
|||
|
||||
// Initialize the polynomial commitment parameters
|
||||
let params_path = Path::new("./benches/sha256_assets/sha256_params");
|
||||
if let Err(_) = File::open(¶ms_path) {
|
||||
if File::open(¶ms_path).is_err() {
|
||||
let params: Params<EqAffine> = Params::new(k);
|
||||
let mut buf = Vec::new();
|
||||
|
||||
|
@ -91,7 +92,7 @@ fn bench(name: &str, k: u32, c: &mut Criterion) {
|
|||
|
||||
// Initialize the proving key
|
||||
let vk_path = Path::new("./benches/sha256_assets/sha256_vk");
|
||||
if let Err(_) = File::open(&vk_path) {
|
||||
if File::open(&vk_path).is_err() {
|
||||
let vk = keygen_vk(¶ms, &empty_circuit).expect("keygen_vk should not fail");
|
||||
let mut buf = Vec::new();
|
||||
|
||||
|
@ -126,7 +127,7 @@ fn bench(name: &str, k: u32, c: &mut Criterion) {
|
|||
|
||||
// Create a proof
|
||||
let proof_path = Path::new("./benches/sha256_assets/sha256_proof");
|
||||
if let Err(_) = File::open(&proof_path) {
|
||||
if File::open(&proof_path).is_err() {
|
||||
let mut transcript = Blake2bWrite::init(vec![]);
|
||||
create_proof(¶ms, &pk, &[circuit], &[], &mut transcript)
|
||||
.expect("proof generation should not fail");
|
||||
|
@ -152,6 +153,7 @@ fn bench(name: &str, k: u32, c: &mut Criterion) {
|
|||
});
|
||||
}
|
||||
|
||||
#[allow(dead_code)]
|
||||
fn criterion_benchmark(c: &mut Criterion) {
|
||||
bench("sha256", 16, c);
|
||||
// bench("sha256", 20, c);
|
||||
|
|
|
@ -167,7 +167,7 @@ impl<F: FieldExt> Table16Chip<F> {
|
|||
);
|
||||
|
||||
let message_schedule =
|
||||
MessageSchedule::configure(meta, lookup_inputs, message_schedule, extras, perm.clone());
|
||||
MessageSchedule::configure(meta, lookup_inputs, message_schedule, extras, perm);
|
||||
|
||||
Table16Config {
|
||||
lookup_table,
|
||||
|
@ -240,6 +240,8 @@ impl<F: FieldExt> Sha256Instructions for Table16Chip<F> {
|
|||
/// Common assignment patterns used by Table16 regions.
|
||||
trait Table16Assignment<F: FieldExt> {
|
||||
// Assign cells for general spread computation used in sigma, ch, ch_neg, maj gates
|
||||
#[allow(clippy::too_many_arguments)]
|
||||
#[allow(clippy::type_complexity)]
|
||||
fn assign_spread_outputs(
|
||||
&self,
|
||||
region: &mut Region<'_, Table16Chip<F>>,
|
||||
|
@ -280,6 +282,7 @@ trait Table16Assignment<F: FieldExt> {
|
|||
}
|
||||
|
||||
// Assign outputs of sigma gates
|
||||
#[allow(clippy::too_many_arguments)]
|
||||
fn assign_sigma_outputs(
|
||||
&self,
|
||||
region: &mut Region<'_, Table16Chip<F>>,
|
||||
|
|
|
@ -180,6 +180,8 @@ pub struct State {
|
|||
}
|
||||
|
||||
impl State {
|
||||
#[allow(clippy::many_single_char_names)]
|
||||
#[allow(clippy::too_many_arguments)]
|
||||
pub fn new(
|
||||
a: StateWord,
|
||||
b: StateWord,
|
||||
|
@ -749,6 +751,7 @@ impl Compression {
|
|||
Ok(digest)
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
pub(super) fn empty_configure<F: FieldExt>(
|
||||
meta: &mut ConstraintSystem<F>,
|
||||
lookup: SpreadInputs,
|
||||
|
|
|
@ -10,6 +10,7 @@ impl<F: FieldExt> CompressionGate<F> {
|
|||
|
||||
// Decompose `A,B,C,D` words
|
||||
// (2, 11, 9, 10)-bit chunks
|
||||
#[allow(clippy::too_many_arguments)]
|
||||
pub fn s_decompose_abcd(
|
||||
s_decompose_abcd: Expression<F>,
|
||||
a: Expression<F>,
|
||||
|
@ -67,6 +68,7 @@ impl<F: FieldExt> CompressionGate<F> {
|
|||
|
||||
// Decompose `E,F,G,H` words
|
||||
// (6, 5, 14, 7)-bit chunks
|
||||
#[allow(clippy::too_many_arguments)]
|
||||
pub fn s_decompose_efgh(
|
||||
s_decompose_efgh: Expression<F>,
|
||||
a_lo: Expression<F>,
|
||||
|
@ -124,6 +126,7 @@ impl<F: FieldExt> CompressionGate<F> {
|
|||
|
||||
// s_upper_sigma_0 on abcd words
|
||||
// (2, 11, 9, 10)-bit chunks
|
||||
#[allow(clippy::too_many_arguments)]
|
||||
pub fn s_upper_sigma_0(
|
||||
s_upper_sigma_0: Expression<F>,
|
||||
spread_r0_even: Expression<F>,
|
||||
|
@ -165,6 +168,7 @@ impl<F: FieldExt> CompressionGate<F> {
|
|||
|
||||
// s_upper_sigma_1 on efgh words
|
||||
// (6, 5, 14, 7)-bit chunks
|
||||
#[allow(clippy::too_many_arguments)]
|
||||
pub fn s_upper_sigma_1(
|
||||
s_upper_sigma_1: Expression<F>,
|
||||
spread_r0_even: Expression<F>,
|
||||
|
@ -206,6 +210,7 @@ impl<F: FieldExt> CompressionGate<F> {
|
|||
}
|
||||
|
||||
// First part of choice gate on (E, F, G), E ∧ F
|
||||
#[allow(clippy::too_many_arguments)]
|
||||
pub fn s_ch(
|
||||
s_ch: Expression<F>,
|
||||
spread_p0_even: Expression<F>,
|
||||
|
@ -229,6 +234,7 @@ impl<F: FieldExt> CompressionGate<F> {
|
|||
}
|
||||
|
||||
// Second part of Choice gate on (E, F, G), ¬E ∧ G
|
||||
#[allow(clippy::too_many_arguments)]
|
||||
pub fn s_ch_neg(
|
||||
s_ch_neg: Expression<F>,
|
||||
spread_q0_even: Expression<F>,
|
||||
|
@ -260,6 +266,7 @@ impl<F: FieldExt> CompressionGate<F> {
|
|||
}
|
||||
|
||||
// Majority gate on (A, B, C)
|
||||
#[allow(clippy::too_many_arguments)]
|
||||
pub fn s_maj(
|
||||
s_maj: Expression<F>,
|
||||
spread_m_0_even: Expression<F>,
|
||||
|
@ -302,6 +309,7 @@ impl<F: FieldExt> CompressionGate<F> {
|
|||
}
|
||||
|
||||
// s_h_prime to get H' = H + Ch(E, F, G) + s_upper_sigma_1(E) + K + W
|
||||
#[allow(clippy::too_many_arguments)]
|
||||
pub fn s_h_prime(
|
||||
s_h_prime: Expression<F>,
|
||||
h_prime_lo: Expression<F>,
|
||||
|
@ -335,6 +343,7 @@ impl<F: FieldExt> CompressionGate<F> {
|
|||
}
|
||||
|
||||
// s_a_new to get A_new = H' + Maj(A, B, C) + s_upper_sigma_0(A)
|
||||
#[allow(clippy::too_many_arguments)]
|
||||
pub fn s_a_new(
|
||||
s_a_new: Expression<F>,
|
||||
a_new_lo: Expression<F>,
|
||||
|
@ -359,6 +368,7 @@ impl<F: FieldExt> CompressionGate<F> {
|
|||
}
|
||||
|
||||
// s_e_new to get E_new = H' + D
|
||||
#[allow(clippy::too_many_arguments)]
|
||||
pub fn s_e_new(
|
||||
s_e_new: Expression<F>,
|
||||
e_new_lo: Expression<F>,
|
||||
|
@ -385,6 +395,7 @@ impl<F: FieldExt> CompressionGate<F> {
|
|||
}
|
||||
|
||||
// s_digest on final round
|
||||
#[allow(clippy::too_many_arguments)]
|
||||
pub fn s_digest(
|
||||
s_digest: Expression<F>,
|
||||
lo_0: Expression<F>,
|
||||
|
|
|
@ -12,6 +12,7 @@ use halo2::{
|
|||
};
|
||||
|
||||
// Test vector 'abc'
|
||||
#[cfg(test)]
|
||||
pub const COMPRESSION_OUTPUT: [u32; 8] = [
|
||||
0b10111010011110000001011010111111,
|
||||
0b10001111000000011100111111101010,
|
||||
|
@ -767,6 +768,7 @@ impl Compression {
|
|||
}
|
||||
|
||||
// s_h_prime to get H' = H + Ch(E, F, G) + s_upper_sigma_1(E) + K + W
|
||||
#[allow(clippy::too_many_arguments)]
|
||||
pub(super) fn assign_h_prime<F: FieldExt>(
|
||||
&self,
|
||||
region: &mut Region<'_, Table16Chip<F>>,
|
||||
|
@ -1051,6 +1053,7 @@ impl Compression {
|
|||
}
|
||||
|
||||
// Assign hi and lo halves for both dense and spread versions of a word
|
||||
#[allow(clippy::type_complexity)]
|
||||
pub fn assign_word_halves<F: FieldExt>(
|
||||
&self,
|
||||
region: &mut Region<'_, Table16Chip<F>>,
|
||||
|
@ -1081,6 +1084,7 @@ pub fn val_from_dense_halves(dense_halves: (CellValue16, CellValue16)) -> u32 {
|
|||
dense_halves.0.value.unwrap() as u32 + (1 << 16) * dense_halves.1.value.unwrap() as u32
|
||||
}
|
||||
|
||||
#[allow(clippy::many_single_char_names)]
|
||||
pub fn match_state(
|
||||
state: State,
|
||||
) -> (
|
||||
|
|
|
@ -7,6 +7,7 @@ use halo2::{
|
|||
};
|
||||
|
||||
impl Compression {
|
||||
#[allow(clippy::many_single_char_names)]
|
||||
pub fn assign_digest<F: FieldExt>(
|
||||
&self,
|
||||
region: &mut Region<'_, Table16Chip<F>>,
|
||||
|
|
|
@ -3,6 +3,7 @@ use super::{compression_util::*, Compression, State};
|
|||
use halo2::{arithmetic::FieldExt, circuit::Region, plonk::Error};
|
||||
|
||||
impl Compression {
|
||||
#[allow(clippy::many_single_char_names)]
|
||||
pub fn initialize_iv<F: FieldExt>(
|
||||
&self,
|
||||
region: &mut Region<'_, Table16Chip<F>>,
|
||||
|
@ -48,6 +49,7 @@ impl Compression {
|
|||
))
|
||||
}
|
||||
|
||||
#[allow(clippy::many_single_char_names)]
|
||||
pub fn initialize_state<F: FieldExt>(
|
||||
&self,
|
||||
region: &mut Region<'_, Table16Chip<F>>,
|
||||
|
|
|
@ -5,6 +5,7 @@ use super::{compression_util::*, Compression, State};
|
|||
use halo2::{arithmetic::FieldExt, circuit::Region, plonk::Error};
|
||||
|
||||
impl Compression {
|
||||
#[allow(clippy::many_single_char_names)]
|
||||
pub fn assign_round<F: FieldExt>(
|
||||
&self,
|
||||
region: &mut Region<'_, Table16Chip<F>>,
|
||||
|
|
|
@ -17,9 +17,11 @@ mod subregion2;
|
|||
mod subregion3;
|
||||
|
||||
use schedule_gates::ScheduleGate;
|
||||
pub use schedule_util::get_msg_schedule_test_input;
|
||||
use schedule_util::*;
|
||||
|
||||
#[cfg(test)]
|
||||
pub use schedule_util::get_msg_schedule_test_input;
|
||||
|
||||
#[derive(Clone, Debug)]
|
||||
pub(super) struct MessageWord {
|
||||
var: Cell,
|
||||
|
@ -65,6 +67,7 @@ impl MessageSchedule {
|
|||
/// `extras` contains columns that the message schedule will only use for internal
|
||||
/// gates, and will not place any constraints on (such as lookup constraints) outside
|
||||
/// itself.
|
||||
#[allow(clippy::many_single_char_names)]
|
||||
pub(super) fn configure<F: FieldExt>(
|
||||
meta: &mut ConstraintSystem<F>,
|
||||
lookup: SpreadInputs,
|
||||
|
@ -303,6 +306,7 @@ impl MessageSchedule {
|
|||
}
|
||||
}
|
||||
|
||||
#[allow(clippy::type_complexity)]
|
||||
pub(super) fn process<F: FieldExt>(
|
||||
&self,
|
||||
layouter: &mut impl Layouter<Table16Chip<F>>,
|
||||
|
@ -399,12 +403,12 @@ impl MessageSchedule {
|
|||
}
|
||||
|
||||
// Assign W[0..16]
|
||||
for i in 0..16 {
|
||||
for (i, word) in input.iter().enumerate() {
|
||||
let (var, halves) =
|
||||
self.assign_word_and_halves(&mut region, input[i].value.unwrap(), i)?;
|
||||
self.assign_word_and_halves(&mut region, word.value.unwrap(), i)?;
|
||||
w.push(MessageWord {
|
||||
var,
|
||||
value: input[i].value,
|
||||
value: word.value,
|
||||
});
|
||||
w_halves.push(halves);
|
||||
}
|
||||
|
@ -437,6 +441,7 @@ impl MessageSchedule {
|
|||
}
|
||||
|
||||
/// Empty configuration without gates. Useful for fast testing
|
||||
#[cfg(test)]
|
||||
pub(super) fn empty_configure<F: FieldExt>(
|
||||
meta: &mut ConstraintSystem<F>,
|
||||
lookup: SpreadInputs,
|
||||
|
|
|
@ -5,6 +5,7 @@ pub struct ScheduleGate<F: FieldExt>(pub Expression<F>);
|
|||
|
||||
impl<F: FieldExt> ScheduleGate<F> {
|
||||
/// s_word for W_16 to W_63
|
||||
#[allow(clippy::too_many_arguments)]
|
||||
pub fn s_word(
|
||||
s_word: Expression<F>,
|
||||
sigma_0_lo: Expression<F>,
|
||||
|
@ -42,6 +43,7 @@ impl<F: FieldExt> ScheduleGate<F> {
|
|||
|
||||
/// s_decompose_1 for W_1 to W_13
|
||||
/// (3, 4, 11, 14)-bit chunks
|
||||
#[allow(clippy::too_many_arguments)]
|
||||
pub fn s_decompose_1(
|
||||
s_decompose_1: Expression<F>,
|
||||
a: Expression<F>,
|
||||
|
@ -64,6 +66,8 @@ impl<F: FieldExt> ScheduleGate<F> {
|
|||
|
||||
/// s_decompose_2 for W_14 to W_48
|
||||
/// (3, 4, 3, 7, 1, 1, 13)-bit chunks
|
||||
#[allow(clippy::many_single_char_names)]
|
||||
#[allow(clippy::too_many_arguments)]
|
||||
pub fn s_decompose_2(
|
||||
s_decompose_2: Expression<F>,
|
||||
a: Expression<F>,
|
||||
|
@ -92,6 +96,7 @@ impl<F: FieldExt> ScheduleGate<F> {
|
|||
|
||||
/// s_decompose_3 for W_49 to W_61
|
||||
/// (10, 7, 2, 13)-bit chunks
|
||||
#[allow(clippy::too_many_arguments)]
|
||||
pub fn s_decompose_3(
|
||||
s_decompose_3: Expression<F>,
|
||||
a: Expression<F>,
|
||||
|
@ -132,6 +137,7 @@ impl<F: FieldExt> ScheduleGate<F> {
|
|||
|
||||
/// sigma_0 v1 on W_1 to W_13
|
||||
/// (3, 4, 11, 14)-bit chunks
|
||||
#[allow(clippy::too_many_arguments)]
|
||||
pub fn s_lower_sigma_0(
|
||||
s_lower_sigma_0: Expression<F>,
|
||||
spread_r0_even: Expression<F>,
|
||||
|
@ -180,6 +186,7 @@ impl<F: FieldExt> ScheduleGate<F> {
|
|||
|
||||
/// sigma_1 v1 on W_49 to W_61
|
||||
/// (10, 7, 2, 13)-bit chunks
|
||||
#[allow(clippy::too_many_arguments)]
|
||||
pub fn s_lower_sigma_1(
|
||||
s_lower_sigma_1: Expression<F>,
|
||||
spread_r0_even: Expression<F>,
|
||||
|
@ -218,12 +225,12 @@ impl<F: FieldExt> ScheduleGate<F> {
|
|||
+ spread_b_lo.clone() * F::from_u64(1 << 50)
|
||||
+ spread_b_mid.clone() * F::from_u64(1 << 54)
|
||||
+ spread_b_hi.clone() * F::from_u64(1 << 58);
|
||||
let xor_2 = spread_d.clone()
|
||||
+ spread_a.clone() * F::from_u64(1 << 26)
|
||||
+ spread_b_lo.clone() * F::from_u64(1 << 46)
|
||||
+ spread_b_mid.clone() * F::from_u64(1 << 50)
|
||||
+ spread_b_hi.clone() * F::from_u64(1 << 54)
|
||||
+ spread_c.clone() * F::from_u64(1 << 60);
|
||||
let xor_2 = spread_d
|
||||
+ spread_a * F::from_u64(1 << 26)
|
||||
+ spread_b_lo * F::from_u64(1 << 46)
|
||||
+ spread_b_mid * F::from_u64(1 << 50)
|
||||
+ spread_b_hi * F::from_u64(1 << 54)
|
||||
+ spread_c * F::from_u64(1 << 60);
|
||||
let xor = xor_0 + xor_1 + xor_2;
|
||||
|
||||
ScheduleGate(
|
||||
|
@ -234,6 +241,7 @@ impl<F: FieldExt> ScheduleGate<F> {
|
|||
|
||||
/// sigma_0 v2 on W_14 to W_48
|
||||
/// (3, 4, 3, 7, 1, 1, 13)-bit chunks
|
||||
#[allow(clippy::too_many_arguments)]
|
||||
pub fn s_lower_sigma_0_v2(
|
||||
s_lower_sigma_0_v2: Expression<F>,
|
||||
spread_r0_even: Expression<F>,
|
||||
|
@ -296,6 +304,7 @@ impl<F: FieldExt> ScheduleGate<F> {
|
|||
|
||||
/// sigma_1 v2 on W_14 to W_48
|
||||
/// (3, 4, 3, 7, 1, 1, 13)-bit chunks
|
||||
#[allow(clippy::too_many_arguments)]
|
||||
pub fn s_lower_sigma_1_v2(
|
||||
s_lower_sigma_1_v2: Expression<F>,
|
||||
spread_r0_even: Expression<F>,
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
use super::super::{super::BLOCK_SIZE, BlockWord, CellValue16, Table16Chip, ROUNDS};
|
||||
use super::super::{CellValue16, Table16Chip};
|
||||
use super::MessageSchedule;
|
||||
use halo2::{
|
||||
arithmetic::FieldExt,
|
||||
|
@ -6,6 +6,9 @@ use halo2::{
|
|||
plonk::Error,
|
||||
};
|
||||
|
||||
#[cfg(test)]
|
||||
use super::super::{super::BLOCK_SIZE, BlockWord, ROUNDS};
|
||||
|
||||
// Rows needed for each gate
|
||||
pub const DECOMPOSE_0_ROWS: usize = 2;
|
||||
pub const DECOMPOSE_1_ROWS: usize = 2;
|
||||
|
@ -36,11 +39,11 @@ pub fn get_word_row(word_idx: usize) -> usize {
|
|||
assert!(word_idx <= 63);
|
||||
if word_idx == 0 {
|
||||
0
|
||||
} else if word_idx >= 1 && word_idx <= 13 {
|
||||
} else if (1..=13).contains(&word_idx) {
|
||||
SUBREGION_0_ROWS + SUBREGION_1_WORD * (word_idx - 1) as usize
|
||||
} else if word_idx >= 14 && word_idx <= 48 {
|
||||
SUBREGION_0_ROWS + SUBREGION_1_ROWS + SUBREGION_2_WORD * (word_idx - 14) + 1 as usize
|
||||
} else if word_idx >= 49 && word_idx <= 61 {
|
||||
} else if (14..=48).contains(&word_idx) {
|
||||
SUBREGION_0_ROWS + SUBREGION_1_ROWS + SUBREGION_2_WORD * (word_idx - 14) + 1
|
||||
} else if (49..=61).contains(&word_idx) {
|
||||
SUBREGION_0_ROWS
|
||||
+ SUBREGION_1_ROWS
|
||||
+ SUBREGION_2_ROWS
|
||||
|
@ -55,6 +58,7 @@ pub fn get_word_row(word_idx: usize) -> usize {
|
|||
}
|
||||
|
||||
/// Test vector: "abc"
|
||||
#[cfg(test)]
|
||||
pub fn get_msg_schedule_test_input() -> [BlockWord; BLOCK_SIZE] {
|
||||
[
|
||||
BlockWord::new(0b01100001011000100110001110000000),
|
||||
|
@ -76,6 +80,7 @@ pub fn get_msg_schedule_test_input() -> [BlockWord; BLOCK_SIZE] {
|
|||
]
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
pub const MSG_SCHEDULE_TEST_OUTPUT: [u32; ROUNDS] = [
|
||||
0b01100001011000100110001110000000,
|
||||
0b00000000000000000000000000000000,
|
||||
|
|
|
@ -79,12 +79,12 @@ impl MessageSchedule {
|
|||
|
||||
Ok(Subregion1Word {
|
||||
index,
|
||||
a: CellValue32::new(a, pieces[0].into()),
|
||||
b: CellValue32::new(b, pieces[1].into()),
|
||||
a: CellValue32::new(a, pieces[0]),
|
||||
b: CellValue32::new(b, pieces[1]),
|
||||
c: CellValue32::new(spread_c.dense.var, spread_c.dense.value.unwrap().into()),
|
||||
d: CellValue32::new(spread_d.dense.var, spread_d.dense.value.unwrap().into()),
|
||||
spread_c: CellValue32::new(spread_c.spread.var, spread_c.spread.value.unwrap().into()),
|
||||
spread_d: CellValue32::new(spread_d.spread.var, spread_d.spread.value.unwrap().into()),
|
||||
spread_c: CellValue32::new(spread_c.spread.var, spread_c.spread.value.unwrap()),
|
||||
spread_d: CellValue32::new(spread_d.spread.var, spread_d.spread.value.unwrap()),
|
||||
})
|
||||
}
|
||||
|
||||
|
|
|
@ -162,7 +162,7 @@ impl MessageSchedule {
|
|||
|
||||
for i in 27..49 {
|
||||
tmp_lower_sigma_0_v2_results =
|
||||
new_word(i, tmp_lower_sigma_0_v2_results[i + 2 - 15 - 14].clone())?;
|
||||
new_word(i, tmp_lower_sigma_0_v2_results[i + 2 - 15 - 14])?;
|
||||
}
|
||||
|
||||
// Return lower_sigma_0_v2 output for W_[36..49]
|
||||
|
@ -209,18 +209,19 @@ impl MessageSchedule {
|
|||
|
||||
Ok(Subregion2Word {
|
||||
index,
|
||||
a: CellValue32::new(a, pieces[0].into()),
|
||||
a: CellValue32::new(a, pieces[0]),
|
||||
b: CellValue32::new(spread_b.dense.var, spread_b.dense.value.unwrap().into()),
|
||||
c: CellValue32::new(c, pieces[2].into()),
|
||||
c: CellValue32::new(c, pieces[2]),
|
||||
d: CellValue32::new(spread_d.dense.var, spread_d.dense.value.unwrap().into()),
|
||||
e: CellValue32::new(e, pieces[4].into()),
|
||||
f: CellValue32::new(f, pieces[5].into()),
|
||||
e: CellValue32::new(e, pieces[4]),
|
||||
f: CellValue32::new(f, pieces[5]),
|
||||
g: CellValue32::new(spread_g.dense.var, spread_g.dense.value.unwrap().into()),
|
||||
spread_d: CellValue32::new(spread_d.spread.var, spread_d.spread.value.unwrap().into()),
|
||||
spread_g: CellValue32::new(spread_g.spread.var, spread_g.spread.value.unwrap().into()),
|
||||
spread_d: CellValue32::new(spread_d.spread.var, spread_d.spread.value.unwrap()),
|
||||
spread_g: CellValue32::new(spread_g.spread.var, spread_g.spread.value.unwrap()),
|
||||
})
|
||||
}
|
||||
|
||||
#[allow(clippy::type_complexity)]
|
||||
fn assign_lower_sigma_v2_pieces<F: FieldExt>(
|
||||
&self,
|
||||
region: &mut Region<'_, Table16Chip<F>>,
|
||||
|
@ -384,7 +385,7 @@ impl MessageSchedule {
|
|||
let row = get_word_row(subregion2_word.index) + SIGMA_0_V2_ROWS + 3;
|
||||
|
||||
let (spread_a, spread_b_lo, spread_b_hi, spread_c, spread_d, e, f, spread_g) =
|
||||
self.assign_lower_sigma_v2_pieces(region, row, subregion2_word.clone())?;
|
||||
self.assign_lower_sigma_v2_pieces(region, row, subregion2_word)?;
|
||||
|
||||
// (3, 4, 3, 7, 1, 1, 13)
|
||||
|
||||
|
|
|
@ -8,9 +8,11 @@ use halo2::{arithmetic::FieldExt, circuit::Region, plonk::Error};
|
|||
// (10, 7, 2, 13)-bit chunks
|
||||
pub struct Subregion3Word {
|
||||
index: usize,
|
||||
#[allow(dead_code)]
|
||||
a: CellValue32,
|
||||
b: CellValue32,
|
||||
c: CellValue32,
|
||||
#[allow(dead_code)]
|
||||
d: CellValue32,
|
||||
spread_a: CellValue32,
|
||||
spread_d: CellValue32,
|
||||
|
@ -177,11 +179,11 @@ impl MessageSchedule {
|
|||
Ok(Subregion3Word {
|
||||
index,
|
||||
a: CellValue32::new(spread_a.dense.var, spread_a.dense.value.unwrap().into()),
|
||||
b: CellValue32::new(b, pieces[1].into()),
|
||||
c: CellValue32::new(c, pieces[2].into()),
|
||||
b: CellValue32::new(b, pieces[1]),
|
||||
c: CellValue32::new(c, pieces[2]),
|
||||
d: CellValue32::new(spread_d.dense.var, spread_d.dense.value.unwrap().into()),
|
||||
spread_a: CellValue32::new(spread_a.spread.var, spread_a.spread.value.unwrap().into()),
|
||||
spread_d: CellValue32::new(spread_d.spread.var, spread_d.spread.value.unwrap().into()),
|
||||
spread_a: CellValue32::new(spread_a.spread.var, spread_a.spread.value.unwrap()),
|
||||
spread_d: CellValue32::new(spread_d.spread.var, spread_d.spread.value.unwrap()),
|
||||
})
|
||||
}
|
||||
|
||||
|
|
|
@ -76,8 +76,8 @@ impl SpreadVar {
|
|||
})
|
||||
}
|
||||
|
||||
pub(super) fn without_lookup<'r, C: Chip>(
|
||||
region: &mut Region<'r, C>,
|
||||
pub(super) fn without_lookup<C: Chip>(
|
||||
region: &mut Region<'_, C>,
|
||||
dense_col: Column<Advice>,
|
||||
dense_row: usize,
|
||||
spread_col: Column<Advice>,
|
||||
|
|
|
@ -48,14 +48,14 @@ pub fn compress_u32(word: u32) -> u16 {
|
|||
// Chops a 32-bit word into pieces of given length. The lengths are specified
|
||||
// starting from the little end.
|
||||
pub fn chop_u32(word: u32, lengths: &[u8]) -> Vec<u32> {
|
||||
assert_eq!(lengths.iter().sum::<u8>(), 32 as u8);
|
||||
assert_eq!(lengths.iter().sum::<u8>(), 32u8);
|
||||
let mut pieces: Vec<u32> = Vec::with_capacity(lengths.len());
|
||||
for i in 0..lengths.len() {
|
||||
assert!(lengths[i] > 0);
|
||||
// lengths[i] bitstring of all 1's
|
||||
let mask: u32 = (1 << lengths[i]) as u32 - 1;
|
||||
// Shift mask by bits already shifted
|
||||
let offset: u8 = lengths[0..i].into_iter().sum();
|
||||
let offset: u8 = lengths[0..i].iter().sum();
|
||||
let mask: u32 = mask << offset;
|
||||
pieces.push((word & mask) >> offset as u32);
|
||||
}
|
||||
|
@ -65,14 +65,14 @@ pub fn chop_u32(word: u32, lengths: &[u8]) -> Vec<u32> {
|
|||
// Chops a 64-bit word into pieces of given length. The lengths are specified
|
||||
// starting from the little end.
|
||||
pub fn chop_u64(word: u64, lengths: &[u8]) -> Vec<u64> {
|
||||
assert_eq!(lengths.iter().sum::<u8>(), 64 as u8);
|
||||
assert_eq!(lengths.iter().sum::<u8>(), 64u8);
|
||||
let mut pieces: Vec<u64> = Vec::with_capacity(lengths.len());
|
||||
for i in 0..lengths.len() {
|
||||
assert!(lengths[i] > 0);
|
||||
// lengths[i] bitstring of all 1's
|
||||
let mask: u64 = ((1 as u64) << lengths[i]) - 1;
|
||||
let mask: u64 = (1u64 << lengths[i]) - 1;
|
||||
// Shift mask by bits already shifted
|
||||
let offset: u8 = lengths[0..i].into_iter().sum();
|
||||
let offset: u8 = lengths[0..i].iter().sum();
|
||||
let mask: u64 = mask << offset;
|
||||
pieces.push((word & mask) >> offset as u64);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue