sinsemilla::merkle.rs: Add MerkleChip

This commit is contained in:
therealyingtong 2021-06-05 00:54:10 +08:00
parent d090da0159
commit 68878d88b1
2 changed files with 54 additions and 1 deletions

View File

@ -12,7 +12,7 @@ use crate::{
};
use std::{convert::TryInto, iter};
// mod chip;
mod chip;
/// Instructions to check the validity of a Merkle path of a given `PATH_LENGTH`.
/// The hash function used is a Sinsemilla instance with `K`-bit words.

View File

@ -0,0 +1,53 @@
use halo2::{
circuit::{Chip, Layouter},
plonk::{Advice, Column, ConstraintSystem, Error, Expression, Fixed, Permutation},
poly::Rotation,
};
use pasta_curves::{arithmetic::FieldExt, pallas};
use super::super::{
chip::{SinsemillaChip, SinsemillaConfig},
SinsemillaInstructions,
};
use super::MerkleInstructions;
use crate::{
circuit::gadget::utilities::{
cond_swap::{CondSwapChip, CondSwapConfig, CondSwapInstructions},
copy,
lookup_range_check::LookupRangeCheckConfig,
CellValue, UtilitiesInstructions, Var,
},
constants::MERKLE_DEPTH_ORCHARD,
primitives::sinsemilla,
};
use ff::{PrimeField, PrimeFieldBits};
use std::{array, convert::TryInto};
#[derive(Clone, Debug)]
pub struct MerkleConfig {
advices: [Column<Advice>; 5],
l_star_plus1: Column<Fixed>,
perm: Permutation,
lookup_config: LookupRangeCheckConfig<pallas::Base, { sinsemilla::K }>,
pub(super) cond_swap_config: CondSwapConfig,
pub(super) sinsemilla_config: SinsemillaConfig,
}
#[derive(Clone, Debug)]
pub struct MerkleChip {
config: MerkleConfig,
}
impl Chip<pallas::Base> for MerkleChip {
type Config = MerkleConfig;
type Loaded = ();
fn config(&self) -> &Self::Config {
&self.config
}
fn loaded(&self) -> &Self::Loaded {
&()
}
}