|  |  | 
|  | /// The single place where we generate random material | 
|  | /// for our own use.  These functions never fail, | 
|  | /// they panic on error. | 
|  |  | 
|  | use ring::rand::{SystemRandom, SecureRandom}; | 
|  | use crate::msgs::codec; | 
|  |  | 
|  | /// Fill the whole slice with random material. | 
|  | pub fn fill_random(bytes: &mut [u8]) { | 
|  | SystemRandom::new() | 
|  | .fill(bytes) | 
|  | .unwrap(); | 
|  | } | 
|  |  | 
|  | /// Make a Vec<u8> of the given size | 
|  | /// containing random material. | 
|  | pub fn random_vec(len: usize) -> Vec<u8> { | 
|  | let mut v = vec![0; len]; | 
|  | fill_random(&mut v); | 
|  | v | 
|  | } | 
|  |  | 
|  | /// Return a uniformly random u32. | 
|  | pub fn random_u32() -> u32 { | 
|  | let mut buf = [0u8; 4]; | 
|  | fill_random(&mut buf); | 
|  | codec::decode_u32(&buf) | 
|  | .unwrap() | 
|  | } |