Skip to content

Commit fc45c48

Browse files
authored
Merge pull request #212 from anoma/fix/delta-witness-serde-deserialize
Fix DeltaWitness serde Deserialize to match Serialize
2 parents 62c9c6b + fbc2718 commit fc45c48

1 file changed

Lines changed: 45 additions & 11 deletions

File tree

arm/src/delta_proof.rs

Lines changed: 45 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -209,25 +209,59 @@ impl<'de> Deserialize<'de> for DeltaWitness {
209209
where
210210
D: serde::Deserializer<'de>,
211211
{
212-
let bytes = <[u8; 32]>::deserialize(deserializer)?;
212+
let bytes: Vec<u8> = Vec::deserialize(deserializer)?;
213+
if bytes.len() != 32 {
214+
return Err(serde::de::Error::custom(
215+
"Invalid byte length for DeltaWitness",
216+
));
217+
}
213218
DeltaWitness::from_bytes(&bytes).map_err(|e| {
214219
serde::de::Error::custom(format!("Failed to deserialize DeltaWitness: {:?}", e))
215220
})
216221
}
217222
}
218223

219-
#[test]
220-
fn test_delta_proof() {
224+
#[cfg(test)]
225+
mod tests {
226+
use super::*;
221227
use k256::elliptic_curve::rand_core::OsRng;
222228

223-
let mut rng = OsRng;
224-
let signing_key = SigningKey::random(&mut rng);
225-
let verifying_key = VerifyingKey::from(&signing_key);
229+
#[test]
230+
fn test_delta_proof() {
231+
let mut rng = OsRng;
232+
let signing_key = SigningKey::random(&mut rng);
233+
let verifying_key = VerifyingKey::from(&signing_key);
234+
235+
let message = b"Hello, world!";
236+
let witness = DeltaWitness { signing_key };
237+
let proof = DeltaProof::prove(message, &witness).unwrap();
238+
let instance = DeltaInstance { verifying_key };
226239

227-
let message = b"Hello, world!";
228-
let witness = DeltaWitness { signing_key };
229-
let proof = DeltaProof::prove(message, &witness).unwrap();
230-
let instance = DeltaInstance { verifying_key };
240+
DeltaProof::verify(message, &proof, instance).unwrap();
241+
}
231242

232-
DeltaProof::verify(message, &proof, instance).unwrap();
243+
/// DeltaProof: serialize then deserialize via bincode must round-trip.
244+
#[test]
245+
fn delta_proof_bincode_roundtrip() {
246+
let mut rng = OsRng;
247+
let signing_key = SigningKey::random(&mut rng);
248+
let witness = DeltaWitness { signing_key };
249+
let proof = DeltaProof::prove(b"roundtrip", &witness).unwrap();
250+
251+
let encoded = bincode::serialize(&proof).unwrap();
252+
let decoded: DeltaProof = bincode::deserialize(&encoded).unwrap();
253+
assert_eq!(proof, decoded);
254+
}
255+
256+
/// DeltaWitness: serialize then deserialize via bincode must round-trip.
257+
#[test]
258+
fn delta_witness_bincode_roundtrip() {
259+
let mut rng = OsRng;
260+
let signing_key = SigningKey::random(&mut rng);
261+
let witness = DeltaWitness { signing_key };
262+
263+
let encoded = bincode::serialize(&witness).unwrap();
264+
let decoded: DeltaWitness = bincode::deserialize(&encoded).unwrap();
265+
assert_eq!(witness, decoded);
266+
}
233267
}

0 commit comments

Comments
 (0)