diff --git a/src/dsa/rpo_falcon512/signature.rs b/src/dsa/rpo_falcon512/signature.rs index 55f2f64..b76db6b 100644 --- a/src/dsa/rpo_falcon512/signature.rs +++ b/src/dsa/rpo_falcon512/signature.rs @@ -133,7 +133,7 @@ impl Deserializable for Signature { let pk_polynomial = Polynomial::from_pub_key(&pk) .map_err(|err| DeserializationError::InvalidValue(err.to_string()))? .into(); - let sig_polynomial = Polynomial::from_signature(&sig[41..]) + let sig_polynomial = Polynomial::from_signature(&sig) .map_err(|err| DeserializationError::InvalidValue(err.to_string()))? .into(); @@ -193,7 +193,7 @@ fn decode_nonce(nonce: &NonceBytes) -> NonceElements { #[cfg(all(test, feature = "std"))] mod tests { use super::{ - super::{ffi::*, Felt}, + super::{ffi::*, Felt, KeyPair}, *, }; use libc::c_void; @@ -268,4 +268,14 @@ mod tests { let nonce = decode_nonce(&nonce); assert_eq!(res, hash_to_point(msg_felts, &nonce).inner()); } + + #[test] + fn test_serialization_round_trip() { + let key = KeyPair::new().unwrap(); + let signature = key.sign(Word::default()).unwrap(); + let serialized = signature.to_bytes(); + let deserialized = Signature::read_from_bytes(&serialized).unwrap(); + assert_eq!(signature.sig_poly(), deserialized.sig_poly()); + assert_eq!(signature.pub_key_poly(), deserialized.pub_key_poly()); + } }