X-Git-Url: http://git.bitcoin.ninja/index.cgi?a=blobdiff_plain;f=lightning%2Fsrc%2Flib.rs;h=1adf3786b76d48a571665e73e2e8a551276a73f8;hb=47954e95dff860d2a578f7d9f35f3599ac314926;hp=9bc158328701562954555286e18b0093ea14084b;hpb=a0917e50e88d849302ec2651c4255789ad5c940c;p=rust-lightning diff --git a/lightning/src/lib.rs b/lightning/src/lib.rs index 9bc15832..1adf3786 100644 --- a/lightning/src/lib.rs +++ b/lightning/src/lib.rs @@ -165,113 +165,12 @@ mod io_extras { } mod prelude { - #[cfg(feature = "hashbrown")] - extern crate hashbrown; - #[cfg(feature = "ahash")] - extern crate ahash; - pub use alloc::{vec, vec::Vec, string::String, collections::VecDeque, boxed::Box}; pub use alloc::borrow::ToOwned; pub use alloc::string::ToString; - // For no-std builds, we need to use hashbrown, however, by default, it doesn't randomize the - // hashing and is vulnerable to HashDoS attacks. Thus, when not fuzzing, we use its default - // ahash hashing algorithm but randomize, opting to not randomize when fuzzing to avoid false - // positive branch coverage. - - #[cfg(not(feature = "hashbrown"))] - mod std_hashtables { - pub(crate) use std::collections::{HashMap, HashSet, hash_map}; - - pub(crate) type OccupiedHashMapEntry<'a, K, V> = - std::collections::hash_map::OccupiedEntry<'a, K, V>; - pub(crate) type VacantHashMapEntry<'a, K, V> = - std::collections::hash_map::VacantEntry<'a, K, V>; - } - #[cfg(not(feature = "hashbrown"))] - pub(crate) use std_hashtables::*; - - #[cfg(feature = "hashbrown")] - pub(crate) use self::hashbrown::hash_map; - - #[cfg(all(feature = "hashbrown", fuzzing))] - mod nonrandomized_hashbrown { - pub(crate) use hashbrown::{HashMap, HashSet}; - - pub(crate) type OccupiedHashMapEntry<'a, K, V> = - hashbrown::hash_map::OccupiedEntry<'a, K, V, hashbrown::hash_map::DefaultHashBuilder>; - pub(crate) type VacantHashMapEntry<'a, K, V> = - hashbrown::hash_map::VacantEntry<'a, K, V, hashbrown::hash_map::DefaultHashBuilder>; - } - #[cfg(all(feature = "hashbrown", fuzzing))] - pub(crate) use nonrandomized_hashbrown::*; - - - #[cfg(all(feature = "hashbrown", not(fuzzing)))] - mod randomized_hashtables { - use super::*; - use ahash::RandomState; - - pub(crate) type HashMap = hashbrown::HashMap; - pub(crate) type HashSet = hashbrown::HashSet; - - pub(crate) type OccupiedHashMapEntry<'a, K, V> = - hashbrown::hash_map::OccupiedEntry<'a, K, V, RandomState>; - pub(crate) type VacantHashMapEntry<'a, K, V> = - hashbrown::hash_map::VacantEntry<'a, K, V, RandomState>; - - pub(crate) fn new_hash_map() -> HashMap { - HashMap::with_hasher(RandomState::new()) - } - pub(crate) fn hash_map_with_capacity(cap: usize) -> HashMap { - HashMap::with_capacity_and_hasher(cap, RandomState::new()) - } - pub(crate) fn hash_map_from_iter>(iter: I) -> HashMap { - let iter = iter.into_iter(); - let min_size = iter.size_hint().0; - let mut res = HashMap::with_capacity_and_hasher(min_size, RandomState::new()); - res.extend(iter); - res - } - - pub(crate) fn new_hash_set() -> HashSet { - HashSet::with_hasher(RandomState::new()) - } - pub(crate) fn hash_set_with_capacity(cap: usize) -> HashSet { - HashSet::with_capacity_and_hasher(cap, RandomState::new()) - } - pub(crate) fn hash_set_from_iter>(iter: I) -> HashSet { - let iter = iter.into_iter(); - let min_size = iter.size_hint().0; - let mut res = HashSet::with_capacity_and_hasher(min_size, RandomState::new()); - res.extend(iter); - res - } - } - - #[cfg(any(not(feature = "hashbrown"), fuzzing))] - mod randomized_hashtables { - use super::*; - - pub(crate) fn new_hash_map() -> HashMap { HashMap::new() } - pub(crate) fn hash_map_with_capacity(cap: usize) -> HashMap { - HashMap::with_capacity(cap) - } - pub(crate) fn hash_map_from_iter>(iter: I) -> HashMap { - HashMap::from_iter(iter) - } - - pub(crate) fn new_hash_set() -> HashSet { HashSet::new() } - pub(crate) fn hash_set_with_capacity(cap: usize) -> HashSet { - HashSet::with_capacity(cap) - } - pub(crate) fn hash_set_from_iter>(iter: I) -> HashSet { - HashSet::from_iter(iter) - } - } - - pub(crate) use randomized_hashtables::*; + pub(crate) use crate::util::hash_tables::*; } #[cfg(all(not(ldk_bench), feature = "backtrace", feature = "std", test))]