PR feedback

This commit is contained in:
wborgeaud 2021-08-11 08:33:58 +02:00
parent 9f004c9664
commit 9c01e1d942
4 changed files with 19 additions and 13 deletions

View File

@ -210,8 +210,12 @@ impl<F: Extendable<D>, const D: usize> CircuitBuilder<F, D> {
) -> ExtensionTarget<D> {
assert!(D > 1, "Not implemented for D=1.");
let config = self.config.clone();
let degree_log = common_data.config.cap_height + proof.evals_proofs[0].1.siblings.len()
- config.rate_bits;
let degree_log = common_data.degree_bits;
debug_assert_eq!(
degree_log,
common_data.config.cap_height + proof.evals_proofs[0].1.siblings.len()
- config.rate_bits
);
let subgroup_x = self.convert_to_ext(subgroup_x);
let vanish_zeta = self.sub_extension(subgroup_x, zeta);
let mut alpha = ReducingFactorTarget::new(alpha);
@ -292,7 +296,6 @@ impl<F: Extendable<D>, const D: usize> CircuitBuilder<F, D> {
let mut x_index_bits = self.low_bits(x_index, n_log, 64);
let cap_index = self.le_sum(
x_index_bits[x_index_bits.len() - common_data.config.fri_config.cap_height..]
.to_vec()
.into_iter(),
);
let mut domain_size = n;

View File

@ -189,8 +189,11 @@ fn fri_combine_initial<F: Field + Extendable<D>, const D: usize>(
) -> F::Extension {
let config = &common_data.config;
assert!(D > 1, "Not implemented for D=1.");
let degree_log =
common_data.config.cap_height + proof.evals_proofs[0].1.siblings.len() - config.rate_bits;
let degree_log = common_data.degree_bits;
debug_assert_eq!(
degree_log,
common_data.config.cap_height + proof.evals_proofs[0].1.siblings.len() - config.rate_bits
);
let subgroup_x = F::Extension::from_basefield(subgroup_x);
let mut alpha = ReducingFactor::new(alpha);
let mut sum = F::Extension::ZERO;

View File

@ -1,3 +1,5 @@
use std::convert::TryInto;
use anyhow::{ensure, Result};
use serde::{Deserialize, Serialize};
@ -111,15 +113,13 @@ impl<F: Extendable<D>, const D: usize> CircuitBuilder<F, D> {
}
let index = self.le_sum(leaf_index_bits[proof.siblings.len()..].to_vec().into_iter());
let mut state_ext = [zero; D];
state_ext[..D].copy_from_slice(&state.elements[..D]);
let state_ext = state.elements[..].try_into().expect("requires D = 4");
let state_ext = ExtensionTarget(state_ext);
let cap_ext = merkle_cap
.0
.iter()
.map(|h| {
let mut tmp = [zero; D];
tmp[..D].copy_from_slice(&h.elements[..D]);
let tmp = h.elements[..].try_into().expect("requires D = 4");
ExtensionTarget(tmp)
})
.collect();
@ -178,15 +178,13 @@ impl<F: Extendable<D>, const D: usize> CircuitBuilder<F, D> {
)
}
let mut state_ext = [zero; D];
state_ext[..D].copy_from_slice(&state.elements[..D]);
let state_ext = state.elements[..].try_into().expect("requires D = 4");
let state_ext = ExtensionTarget(state_ext);
let cap_ext = merkle_cap
.0
.iter()
.map(|h| {
let mut tmp = [zero; D];
tmp[..D].copy_from_slice(&h.elements[..D]);
let tmp = h.elements[..].try_into().expect("requires D = 4");
ExtensionTarget(tmp)
})
.collect();

View File

@ -7,6 +7,8 @@ use crate::hash::hashing::{compress, hash_or_noop};
use crate::hash::merkle_proofs::MerkleProof;
use crate::util::{log2_strict, reverse_bits, reverse_index_bits_in_place};
/// The Merkle cap of height `h` of a Merkle tree is the `h`-th layer (from the root) of the tree.
/// It can be used in place of the root to verify Merkle paths, which are `h` elements shorter.
#[derive(Clone, Debug, Serialize, Deserialize)]
#[serde(bound = "")]
pub struct MerkleCap<F: Field>(pub Vec<HashOut<F>>);