mirror of
https://github.com/saymrwulf/curve25519-dalek-source.git
synced 2026-09-04 20:24:10 +00:00
Add length checks to serde-bincode tests.
This ensures that the serde Serialize and Deserialize implementations use fixed-length Serde tuples, rather than variable-length byte arrays. This flaw in data modeling was pointed out by Trevor Perrin.
This commit is contained in:
parent
620d17ef40
commit
29ce0d4fe9
3 changed files with 27 additions and 2 deletions
|
|
@ -1410,10 +1410,18 @@ mod test {
|
|||
let enc_compressed = bincode::serialize(&constants::ED25519_BASEPOINT_COMPRESSED).unwrap();
|
||||
assert_eq!(encoded, enc_compressed);
|
||||
|
||||
// Check that the encoding is 32 bytes exactly
|
||||
assert_eq!(encoded.len(), 32);
|
||||
|
||||
let dec_uncompressed: EdwardsPoint = bincode::deserialize(&encoded).unwrap();
|
||||
let dec_compressed: CompressedEdwardsY = bincode::deserialize(&encoded).unwrap();
|
||||
|
||||
assert_eq!(dec_uncompressed, constants::ED25519_BASEPOINT_POINT);
|
||||
assert_eq!(dec_compressed, constants::ED25519_BASEPOINT_COMPRESSED);
|
||||
|
||||
// Check that the encoding itself matches the usual one
|
||||
let raw_bytes = constants::ED25519_BASEPOINT_COMPRESSED.as_bytes();
|
||||
let bp: EdwardsPoint = bincode::deserialize(raw_bytes).unwrap();
|
||||
assert_eq!(bp, constants::ED25519_BASEPOINT_POINT);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1092,11 +1092,19 @@ mod test {
|
|||
let enc_compressed = bincode::serialize(&constants::RISTRETTO_BASEPOINT_COMPRESSED).unwrap();
|
||||
assert_eq!(encoded, enc_compressed);
|
||||
|
||||
// Check that the encoding is 32 bytes exactly
|
||||
assert_eq!(encoded.len(), 32);
|
||||
|
||||
let dec_uncompressed: RistrettoPoint = bincode::deserialize(&encoded).unwrap();
|
||||
let dec_compressed: CompressedRistretto = bincode::deserialize(&encoded).unwrap();
|
||||
|
||||
assert_eq!(dec_uncompressed, constants::RISTRETTO_BASEPOINT_POINT);
|
||||
assert_eq!(dec_compressed, constants::RISTRETTO_BASEPOINT_COMPRESSED);
|
||||
|
||||
// Check that the encoding itself matches the usual one
|
||||
let raw_bytes = constants::RISTRETTO_BASEPOINT_COMPRESSED.as_bytes();
|
||||
let bp: RistrettoPoint = bincode::deserialize(raw_bytes).unwrap();
|
||||
assert_eq!(bp, constants::RISTRETTO_BASEPOINT_POINT);
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
|
|
|||
|
|
@ -1649,9 +1649,18 @@ mod test {
|
|||
#[cfg(feature = "serde")]
|
||||
fn serde_bincode_scalar_roundtrip() {
|
||||
use bincode;
|
||||
let output = bincode::serialize(&X).unwrap();
|
||||
let parsed: Scalar = bincode::deserialize(&output).unwrap();
|
||||
let encoded = bincode::serialize(&X).unwrap();
|
||||
let parsed: Scalar = bincode::deserialize(&encoded).unwrap();
|
||||
assert_eq!(parsed, X);
|
||||
|
||||
// Check that the encoding is 32 bytes exactly
|
||||
assert_eq!(encoded.len(), 32);
|
||||
|
||||
// Check that the encoding itself matches the usual one
|
||||
assert_eq!(
|
||||
X,
|
||||
bincode::deserialize(X.as_bytes()).unwrap(),
|
||||
);
|
||||
}
|
||||
|
||||
#[cfg(debug_assertions)]
|
||||
|
|
|
|||
Loading…
Reference in a new issue