pub use bytes;
pub mod base58;
pub mod hex;
pub mod ser;
pub mod sync;
pub mod tai64;
pub use byteorder;
pub mod sponge;
mod varint;
pub use varint::VarInt;
pub use curve25519_dalek as dalek;
pub mod hash;
pub use blake2b_simd as blake2;
mod fast_merkle_root;
pub mod tools;
pub use fast_merkle_root::fast_merkle_root;
#[macro_use] extern crate uint;
construct_uint! {
pub struct U256(4);
}
mod fisher_yates;
pub use fisher_yates::fisher_yates;
#[inline(always)]
pub fn zeroize_hack<Z: Default>(z: &mut Z) {
use core::{ptr, sync::atomic};
unsafe {
ptr::write_volatile(z, Z::default());
}
atomic::compiler_fence(atomic::Ordering::SeqCst);
}
#[cfg(all(feature = "rand_os", feature = "rand"))]
pub fn mohan_rand() -> impl rand::RngCore + rand::CryptoRng {
::rand::thread_rng()
}
#[cfg(all(feature = "rand_os", not(feature = "rand")))]
pub fn mohan_rand() -> impl rand_core::RngCore + rand_core::CryptoRng {
::rand_core::OsRng::new()
}
#[cfg(not(feature = "rand"))]
pub fn mohan_rand() -> impl rand_core::RngCore + rand_core::CryptoRng {
const PRM: &'static str = "Attempted to use functionality that requires system randomness!!";
struct PanicRng;
impl ::rand_core::RngCore for PanicRng {
fn next_u32(&mut self) -> u32 {
panic!(&PRM)
}
fn next_u64(&mut self) -> u64 {
panic!(&PRM)
}
fn fill_bytes(&mut self, _dest: &mut [u8]) {
panic!(&PRM)
}
fn try_fill_bytes(&mut self, _dest: &mut [u8]) -> Result<(), ::rand_core::Error> {
panic!(&PRM)
}
}
impl ::rand_core::CryptoRng for PanicRng {}
PanicRng
}