arnaucube
arnaucube/miden-cryptoPublic Self-hosted repository
fix(dsa): fix deserialization logic (#266)

Michael Birch birchmd8@gmail.com
Fri, 26 Jan 2024 15:11:53 -0500
commit

3882e0f719189a0a43ee2efa7652e465c5247c5b

parent

70e39e7b3973fb8a6b4d0a066fade57a36961cc3

1 files changed, 12 insertions(+), 2 deletions(-)

jump to
M src/dsa/rpo_falcon512/signature.rs → src/dsa/rpo_falcon512/signature.rs

@@ -133,7 +133,7 @@ // make sure public key and signature can be decoded correctly

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 @@

#[cfg(all(test, feature = "std"))] mod tests { use super::{ - super::{ffi::*, Felt}, + super::{ffi::*, Felt, KeyPair}, *, }; use libc::c_void;

@@ -267,5 +267,15 @@

// Check that the coefficients are correct 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()); } }