fuzz: don't fuzz hashes against RustCrypto

We should probably restore this in the future, but we need to rethink
how we fuzz hashes -- right now when cfg(fuzzing) is set, we break all
the hash functions in a way that won't match any other library.

We should probably make this breakage opt-in but this will require
buy-in from rust-lightning and maybe others.
This commit is contained in:
Andrew Poelstra 2023-03-22 15:19:24 +00:00
parent 6467728202
commit 2860aae1a5
No known key found for this signature in database
GPG Key ID: C588D63CE41B97C1
9 changed files with 32 additions and 53 deletions

View File

@ -12,7 +12,6 @@ cargo-fuzz = true
honggfuzz = { version = "0.5", default-features = false } honggfuzz = { version = "0.5", default-features = false }
bitcoin = { version = "0.30.0", features = [ "serde" ] } bitcoin = { version = "0.30.0", features = [ "serde" ] }
rust-crypto = "0.2"
serde = { version = "1.0.103", features = [ "derive" ] } serde = { version = "1.0.103", features = [ "derive" ] }
serde_json = "1.0" serde_json = "1.0"
serde_cbor = "0.9" serde_cbor = "0.9"

View File

@ -33,6 +33,7 @@ listTargetNames() {
checkWindowsFiles() { checkWindowsFiles() {
incorrectFilenames=$(find . -type f -name "*,*" -o -name "*:*" -o -name "*<*" -o -name "*>*" -o -name "*|*" -o -name "*\?*" -o -name "*\**" -o -name "*\"*" | wc -l) incorrectFilenames=$(find . -type f -name "*,*" -o -name "*:*" -o -name "*<*" -o -name "*>*" -o -name "*|*" -o -name "*\?*" -o -name "*\**" -o -name "*\"*" | wc -l)
if [ "$incorrectFilenames" -gt 0 ]; then if [ "$incorrectFilenames" -gt 0 ]; then
echo "Bailing early because there is a Windows-incompatible filename in the tree."
exit 2 exit 2
fi fi
} }

View File

@ -1,5 +1,5 @@
#!/usr/bin/env bash #!/usr/bin/env bash
set -e set -ex
REPO_DIR=$(git rev-parse --show-toplevel) REPO_DIR=$(git rev-parse --show-toplevel)

View File

@ -1,17 +1,13 @@
use bitcoin::hashes::{ripemd160, Hash}; use bitcoin::hashes::{ripemd160, Hash, HashEngine};
use crypto::digest::Digest;
use crypto::ripemd160::Ripemd160;
use honggfuzz::fuzz; use honggfuzz::fuzz;
fn do_test(data: &[u8]) { fn do_test(data: &[u8]) {
let our_hash = ripemd160::Hash::hash(data); let mut engine = ripemd160::Hash::engine();
engine.input(data);
let eng_hash = ripemd160::Hash::from_engine(engine);
let mut rc_hash = [0u8; 20]; let hash = ripemd160::Hash::hash(data);
let mut rc_engine = Ripemd160::new(); assert_eq!(&hash[..], &eng_hash[..]);
rc_engine.input(data);
rc_engine.result(&mut rc_hash);
assert_eq!(&our_hash[..], &rc_hash[..]);
} }
fn main() { fn main() {

View File

@ -1,17 +1,13 @@
use bitcoin::hashes::{sha1, Hash}; use bitcoin::hashes::{sha1, Hash, HashEngine};
use crypto::digest::Digest;
use crypto::sha1::Sha1;
use honggfuzz::fuzz; use honggfuzz::fuzz;
fn do_test(data: &[u8]) { fn do_test(data: &[u8]) {
let our_hash = sha1::Hash::hash(data); let mut engine = sha1::Hash::engine();
engine.input(data);
let eng_hash = sha1::Hash::from_engine(engine);
let mut rc_hash = [0u8; 20]; let hash = sha1::Hash::hash(data);
let mut rc_sha1 = Sha1::new(); assert_eq!(&hash[..], &eng_hash[..]);
rc_sha1.input(data);
rc_sha1.result(&mut rc_hash);
assert_eq!(&our_hash[..], &rc_hash[..]);
} }
fn main() { fn main() {

View File

@ -1,17 +1,13 @@
use bitcoin::hashes::{sha256, Hash}; use bitcoin::hashes::{sha256, Hash, HashEngine};
use crypto::digest::Digest;
use crypto::sha2::Sha256;
use honggfuzz::fuzz; use honggfuzz::fuzz;
fn do_test(data: &[u8]) { fn do_test(data: &[u8]) {
let our_hash = sha256::Hash::hash(data); let mut engine = sha256::Hash::engine();
engine.input(data);
let eng_hash = sha256::Hash::from_engine(engine);
let mut rc_hash = [0u8; 32]; let hash = sha256::Hash::hash(data);
let mut rc_engine = Sha256::new(); assert_eq!(&hash[..], &eng_hash[..]);
rc_engine.input(data);
rc_engine.result(&mut rc_hash);
assert_eq!(&our_hash[..], &rc_hash[..]);
} }
fn main() { fn main() {

View File

@ -1,17 +1,13 @@
use bitcoin::hashes::{sha512, Hash}; use bitcoin::hashes::{sha512, Hash, HashEngine};
use crypto::digest::Digest;
use crypto::sha2::Sha512;
use honggfuzz::fuzz; use honggfuzz::fuzz;
fn do_test(data: &[u8]) { fn do_test(data: &[u8]) {
let our_hash = sha512::Hash::hash(data); let mut engine = sha512::Hash::engine();
engine.input(data);
let eng_hash = sha512::Hash::from_engine(engine);
let mut rc_hash = [0u8; 64]; let hash = sha512::Hash::hash(data);
let mut rc_engine = Sha512::new(); assert_eq!(&hash[..], &eng_hash[..]);
rc_engine.input(data);
rc_engine.result(&mut rc_hash);
assert_eq!(&our_hash[..], &rc_hash[..]);
} }
fn main() { fn main() {

View File

@ -1,17 +1,13 @@
use bitcoin::hashes::{sha512_256, Hash}; use bitcoin::hashes::{sha512_256, Hash, HashEngine};
use crypto::digest::Digest;
use crypto::sha2::Sha512Trunc256;
use honggfuzz::fuzz; use honggfuzz::fuzz;
fn do_test(data: &[u8]) { fn do_test(data: &[u8]) {
let our_hash = sha512_256::Hash::hash(data); let mut engine = sha512_256::Hash::engine();
engine.input(data);
let eng_hash = sha512_256::Hash::from_engine(engine);
let mut rc_hash = [0u8; 32]; let hash = sha512_256::Hash::hash(data);
let mut rc_engine = Sha512Trunc256::new(); assert_eq!(&hash[..], &eng_hash[..]);
rc_engine.input(data);
rc_engine.result(&mut rc_hash);
assert_eq!(&our_hash[..], &rc_hash[..]);
} }
fn main() { fn main() {

View File

@ -23,7 +23,6 @@ cargo-fuzz = true
honggfuzz = { version = "0.5", default-features = false } honggfuzz = { version = "0.5", default-features = false }
bitcoin = { version = "0.30.0", features = [ "serde" ] } bitcoin = { version = "0.30.0", features = [ "serde" ] }
rust-crypto = "0.2"
serde = { version = "1.0.103", features = [ "derive" ] } serde = { version = "1.0.103", features = [ "derive" ] }
serde_json = "1.0" serde_json = "1.0"
serde_cbor = "0.9" serde_cbor = "0.9"