From a47d40c8497a8fd6375bd940d46354992cb4159e Mon Sep 17 00:00:00 2001 From: iquerejeta Date: Fri, 27 Dec 2024 15:44:43 +0100 Subject: [PATCH] Minor changes to run midnight_circuits --- Cargo.toml | 1 + src/poly/kzg/params.rs | 7 +++++ src/transcript/implementors.rs | 48 +++++++++++++++++++++++++++++++++- 3 files changed, 55 insertions(+), 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index 393a017f1..fccd6f7b7 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -43,6 +43,7 @@ backtrace = { version = "0.3", optional = true } ff = "0.13" group = "0.13" halo2curves = { version = "0.7.0", default-features = false } +blstrs = { git = "https://github.com/davidnevadoc/blstrs", rev = "8ca6da7" } rand_core = { version = "0.6", default-features = false } tracing = "0.1" blake2b_simd = "1" # MSRV 1.66.0 diff --git a/src/poly/kzg/params.rs b/src/poly/kzg/params.rs index 454c10aca..f4aafd0b3 100644 --- a/src/poly/kzg/params.rs +++ b/src/poly/kzg/params.rs @@ -30,6 +30,13 @@ impl Params for ParamsKZG { } impl ParamsKZG { + /// Downsize the current parameters to match a smaller `k`. + pub fn downsize(&mut self, new_k: u32) { + assert!(new_k < self.g_lagrange.len() as u32); + self.g.truncate(new_k as usize); + self.g_lagrange = g_to_lagrange(self.g.iter().map(|g| g.to_curve()).collect(), new_k); + } + /// Initializes parameters for the curve, draws toxic secret from given rng. /// MUST NOT be used in production. pub fn unsafe_setup(k: u32, rng: R) -> Self { diff --git a/src/transcript/implementors.rs b/src/transcript/implementors.rs index 7b171bb83..37d9cbcae 100644 --- a/src/transcript/implementors.rs +++ b/src/transcript/implementors.rs @@ -2,7 +2,7 @@ use crate::transcript::{ Hashable, Sampleable, TranscriptHash, BLAKE2B_PREFIX_CHALLENGE, BLAKE2B_PREFIX_COMMON, }; use blake2b_simd::{Params, State as Blake2bState}; -use ff::FromUniformBytes; +use ff::{FromUniformBytes, PrimeField}; use group::GroupEncoding; use halo2curves::bn256::{Fr, G1Affine}; @@ -52,3 +52,49 @@ impl Sampleable for Fr { Fr::from_uniform_bytes(&bytes) } } + +////////////////////////////////////////////////////////// +/// Implementation of Hashable for BLS12-381 with Blake // +////////////////////////////////////////////////////////// + +impl Hashable for blstrs::G1Affine { + fn to_input(&self) -> Vec { + self.to_bytes().as_ref().to_vec() + } +} + +impl Hashable for blstrs::Scalar { + fn to_input(&self) -> Vec { + self.to_repr().to_vec() + } +} + +impl Sampleable for blstrs::Scalar { + fn sample(out: Vec) -> Self { + assert!(out.len() <= 64); + let mut bytes = [0u8; 64]; + bytes[..out.len()].copy_from_slice(&out); + blstrs::Scalar::from_uniform_bytes(&bytes) + } +} + +impl Hashable for halo2curves::bls12381::G1Affine { + fn to_input(&self) -> Vec { + self.to_bytes().as_ref().to_vec() + } +} + +impl Hashable for halo2curves::bls12381::Fr { + fn to_input(&self) -> Vec { + self.to_repr().as_ref().to_vec() + } +} + +impl Sampleable for halo2curves::bls12381::Fr { + fn sample(out: Vec) -> Self { + assert!(out.len() <= 64); + let mut bytes = [0u8; 64]; + bytes[..out.len()].copy_from_slice(&out); + halo2curves::bls12381::Fr::from_uniform_bytes(&bytes) + } +}