Skip to content
Snippets Groups Projects

support proper 32-byte RNG seeds

Merged STEVAN Antoine requested to merge rng into main
1 file
+ 1
1
Compare changes
  • Side-by-side
  • Inline
+ 16
5
use clap::Parser;
use rand::{rngs::StdRng, Rng, SeedableRng};
fn parse_hex_string(s: &str) -> Result<[u8; 32], String> {
if s.len() != 64 {
return Err("Input string must be exactly 64 characters long".to_string());
}
match hex::decode(s) {
// `bytes` will be a `Vec<u8>` of size `32`, so it's safe to `unwrap`
// the conversion to `[u8: 32]`
Ok(bytes) => Ok(bytes.try_into().unwrap()),
Err(e) => Err(format!("Failed to decode hex string: {}", e)),
}
}
#[derive(Parser)]
#[command(version, about, long_about = None)]
struct Cli {
#[arg(short)]
n: usize,
#[arg(long)]
prng_seed: u8,
#[arg(long, value_parser = parse_hex_string)]
prng_seed: [u8; 32],
}
fn main() {
let cli = Cli::parse();
let mut seed: [u8; 32] = [0; 32];
seed[0] = cli.prng_seed;
let mut rng = StdRng::from_seed(seed);
let mut rng = StdRng::from_seed(cli.prng_seed);
for _ in 0..cli.n {
println!("{}", rng.gen::<u8>());
Loading