mirror of
https://github.com/arnaucube/miden-crypto.git
synced 2026-01-09 23:51:30 +01:00
feat: canonical range check deserialize Digest
This commit is contained in:
@@ -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))
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user