Browse Source

feat: canonical range check deserialize Digest

al-gkr-basic-workflow
Al-Kindi-0 2 years ago
parent
commit
84f7a73666
1 changed files with 12 additions and 7 deletions
  1. +12
    -7
      crypto/src/hash/rpo/digest.rs

+ 12
- 7
crypto/src/hash/rpo/digest.rs

@ -1,7 +1,6 @@
use super::DIGEST_SIZE; use super::DIGEST_SIZE;
use crate::{Digest, Felt, StarkField};
use crate::{Digest, Felt, StarkField, ZERO};
use core::ops::Deref; use core::ops::Deref;
use winterfell::{ByteReader, ByteWriter, Deserializable, DeserializationError, Serializable}; use winterfell::{ByteReader, ByteWriter, Deserializable, DeserializationError, Serializable};
// DIGEST TRAIT IMPLEMENTATIONS // DIGEST TRAIT IMPLEMENTATIONS
@ -54,12 +53,18 @@ impl Serializable for RpoDigest256 {
impl Deserializable for RpoDigest256 { impl Deserializable for RpoDigest256 {
fn read_from<R: ByteReader>(source: &mut R) -> Result<Self, DeserializationError> { fn read_from<R: ByteReader>(source: &mut R) -> Result<Self, DeserializationError> {
let e1 = Felt::new(source.read_u64()?);
let e2 = Felt::new(source.read_u64()?);
let e3 = Felt::new(source.read_u64()?);
let e4 = Felt::new(source.read_u64()?);
let mut inner: [Felt; DIGEST_SIZE] = [ZERO; DIGEST_SIZE];
for inner in inner.iter_mut() {
let e = source.read_u64()?;
if e >= Felt::MODULUS {
return Err(DeserializationError::InvalidValue(
"Value not in the appropriate range".to_owned(),
));
}
*inner = Felt::new(e);
}
Ok(Self([e1, e2, e3, e4]))
Ok(Self(inner))
} }
} }

Loading…
Cancel
Save