1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
pub use bytes;
pub mod bech32;
pub mod ser;
pub mod sync;
pub mod hex;
pub mod tai64;
pub use byteorder;
pub mod sponge;
pub mod varint;
pub mod golomb;
pub use curve25519_dalek_organism as dalek;
pub mod hash;
pub use blake2b_simd as blake2;
pub mod tools;
mod fast_merkle_root;
pub use fast_merkle_root::fast_merkle_root;
#[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
}