in math/src/field/f64/mod.rs [466:492]
fn try_from(bytes: &[u8]) -> Result<Self, Self::Error> {
if bytes.len() < ELEMENT_BYTES {
return Err(DeserializationError::InvalidValue(format!(
"not enough bytes for a full field element; expected {} bytes, but was {} bytes",
ELEMENT_BYTES,
bytes.len(),
)));
}
if bytes.len() > ELEMENT_BYTES {
return Err(DeserializationError::InvalidValue(format!(
"too many bytes for a field element; expected {} bytes, but was {} bytes",
ELEMENT_BYTES,
bytes.len(),
)));
}
let value = bytes
.try_into()
.map(u64::from_le_bytes)
.map_err(|error| DeserializationError::UnknownError(format!("{}", error)))?;
if value >= M {
return Err(DeserializationError::InvalidValue(format!(
"invalid field element: value {} is greater than or equal to the field modulus",
value
)));
}
Ok(BaseElement::new(value))
}