From 846bbfaa2e9df414584f1483772bdba3b83782da Mon Sep 17 00:00:00 2001 From: olegfomenko Date: Fri, 10 Jan 2025 04:14:47 +0200 Subject: [PATCH] fixed HashChallenger: adding trait implementations for CanObserve and FieldChallenger --- challenger/src/hash_challenger.rs | 41 +++++++++++++++++++++++++++---- challenger/src/lib.rs | 2 +- 2 files changed, 37 insertions(+), 6 deletions(-) diff --git a/challenger/src/hash_challenger.rs b/challenger/src/hash_challenger.rs index a40d3cb82..c2535b9fb 100644 --- a/challenger/src/hash_challenger.rs +++ b/challenger/src/hash_challenger.rs @@ -1,9 +1,9 @@ use alloc::vec; use alloc::vec::Vec; +use p3_field::Field; +use p3_symmetric::{CryptographicHasher, CryptographicPermutation}; -use p3_symmetric::CryptographicHasher; - -use crate::{CanObserve, CanSample}; +use crate::{CanObserve, CanSample, CanSampleBits, FieldChallenger}; #[derive(Clone, Debug)] pub struct HashChallenger @@ -54,7 +54,7 @@ where } impl CanObserve<[T; N]> - for HashChallenger +for HashChallenger where T: Clone, H: CryptographicHasher, @@ -81,6 +81,37 @@ where } } +impl CanObserve> for HashChallenger +where + T: Clone, + H: CryptographicHasher, +{ + fn observe(&mut self, values: Vec) { + for v in values { + self.observe(v); + } + } +} + +impl CanObserve>> for HashChallenger +where + T: Clone, + H: CryptographicHasher, +{ + fn observe(&mut self, values: Vec>) { + for v in values { + self.observe(v); + } + } +} + +impl FieldChallenger for HashChallenger +where + T: Field, + H: CryptographicHasher + Sync, +{ +} + #[cfg(test)] mod tests { use p3_field::FieldAlgebra; @@ -168,4 +199,4 @@ mod tests { [F::from_canonical_u8(new_expected_sum)] ) } -} +} \ No newline at end of file diff --git a/challenger/src/lib.rs b/challenger/src/lib.rs index 43ccbb140..75ba863a2 100644 --- a/challenger/src/lib.rs +++ b/challenger/src/lib.rs @@ -50,7 +50,7 @@ pub trait CanSampleBits { } pub trait FieldChallenger: - CanObserve + CanSample + CanSampleBits + Sync +CanObserve + CanSample + Sync { fn observe_ext_element>(&mut self, ext: EF) { self.observe_slice(ext.as_base_slice());