diff --git a/coins/monero/src/serialize.rs b/coins/monero/src/serialize.rs index d7c3ec50..b8088a9e 100644 --- a/coins/monero/src/serialize.rs +++ b/coins/monero/src/serialize.rs @@ -85,9 +85,11 @@ pub fn read_scalar(r: &mut R) -> io::Result { } pub fn read_point(r: &mut R) -> io::Result { - CompressedEdwardsY(read_32(r)?) + let bytes = read_32(r)?; + CompressedEdwardsY(bytes) .decompress() - .filter(|point| point.is_torsion_free()) + // Ban torsioned points, and points which are either unreduced or -0 + .filter(|point| point.is_torsion_free() && (point.compress().to_bytes() == bytes)) .ok_or_else(|| io::Error::new(io::ErrorKind::Other, "invalid point")) }