diff --git a/frost-core/src/identifier.rs b/frost-core/src/identifier.rs index 0ca710c3..9dc4e8fc 100644 --- a/frost-core/src/identifier.rs +++ b/frost-core/src/identifier.rs @@ -69,7 +69,7 @@ where /// Deserialize an Identifier from a serialized buffer. /// Returns an error if it attempts to deserialize zero. pub fn deserialize(bytes: &[u8]) -> Result> { - Ok(Self(SerializableScalar::deserialize(bytes)?)) + Self::new(SerializableScalar::deserialize(bytes)?.0) } } diff --git a/frost-secp256k1/src/tests/deserialize.rs b/frost-secp256k1/src/tests/deserialize.rs index a744832b..bb8d555b 100644 --- a/frost-secp256k1/src/tests/deserialize.rs +++ b/frost-secp256k1/src/tests/deserialize.rs @@ -36,3 +36,12 @@ fn check_deserialize_identity() { let r = ::Group::deserialize(&encoded_identity); assert_eq!(r, Err(GroupError::MalformedElement)); } + +// Test if deserializing the identifier 0 fails. +// https://github.com/ZcashFoundation/frost/issues/793 +#[test] +fn check_zero_identifier_deserialization() { + let arr: [u8; 32] = [0; 32]; + let r = Identifier::deserialize(&arr); + assert_eq!(r, Err(Error::FieldError(FieldError::InvalidZeroScalar))); +}