feat: canonical range check deserialize Digest
This commit is contained in:
parent
1d5d11efaf
commit
84f7a73666
1 changed files with 12 additions and 7 deletions
|
@ -1,7 +1,6 @@
|
|||
use super::DIGEST_SIZE;
|
||||
use crate::{Digest, Felt, StarkField};
|
||||
use crate::{Digest, Felt, StarkField, ZERO};
|
||||
use core::ops::Deref;
|
||||
|
||||
use winterfell::{ByteReader, ByteWriter, Deserializable, DeserializationError, Serializable};
|
||||
|
||||
// DIGEST TRAIT IMPLEMENTATIONS
|
||||
|
@ -54,12 +53,18 @@ impl Serializable for RpoDigest256 {
|
|||
|
||||
impl Deserializable for RpoDigest256 {
|
||||
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…
Add table
Reference in a new issue