#[cfg(any(test, feature = "test-utils"))]
use lexe_crypto::rng::FastRng;
use lexe_crypto::rng::{RngExt, SysRng};
use lightning::sign::EntropySource;
#[repr(transparent)]
pub struct SysRngDerefHack(InnerSysrng);
impl SysRngDerefHack {
#[allow(clippy::new_without_default)]
pub fn new() -> Self {
Self(InnerSysrng)
}
}
impl std::ops::Deref for SysRngDerefHack {
type Target = InnerSysrng;
fn deref(&self) -> &Self::Target {
&self.0
}
}
#[doc(hidden)] pub struct InnerSysrng;
impl EntropySource for InnerSysrng {
fn get_secure_random_bytes(&self) -> [u8; 32] {
SysRng::new().gen_bytes()
}
}
#[cfg(any(test, feature = "test-utils"))]
#[repr(transparent)]
pub struct FastRngDerefHack(InnerFastRng);
#[cfg(any(test, feature = "test-utils"))]
impl FastRngDerefHack {
pub fn from_u64(seed: u64) -> Self {
Self(InnerFastRng(FastRng::from_u64(seed)))
}
pub fn from_rng(rng: &mut FastRng) -> Self {
let rng = FastRng::from_u64(rng.gen_u64());
Self(InnerFastRng(rng))
}
}
#[cfg(any(test, feature = "test-utils"))]
impl std::ops::Deref for FastRngDerefHack {
type Target = InnerFastRng;
fn deref(&self) -> &Self::Target {
&self.0
}
}
#[cfg(any(test, feature = "test-utils"))]
#[doc(hidden)] pub struct InnerFastRng(FastRng);
#[cfg(any(test, feature = "test-utils"))]
impl EntropySource for InnerFastRng {
fn get_secure_random_bytes(&self) -> [u8; 32] {
self.0.clone().gen_bytes()
}
}