1- use num_bigint:: BigUint ;
2- use num_traits:: One ;
31use rand:: { CryptoRng , Error , RngCore } ;
42use sha2:: { Digest , Sha256 } ;
53
@@ -16,41 +14,6 @@ impl TestDRNG {
1614 seed_bytes. copy_from_slice ( & result) ;
1715 Self { seed : seed_bytes }
1816 }
19-
20- pub fn _randint ( & mut self , l : u64 , h : u64 ) -> u64 {
21- assert ! ( l <= h) ;
22- let range = h - l + 1 ;
23- let bits = 64 - range. leading_zeros ( ) ;
24- let bytes_needed = bits. div_ceil ( 8 ) as usize ;
25-
26- loop {
27- let mut buf = vec ! [ 0u8 ; bytes_needed] ;
28- self . fill_bytes ( & mut buf) ;
29- let mut val = 0u64 ;
30- for b in buf {
31- val = ( val << 8 ) | b as u64 ;
32- }
33- if val < ( 1u64 << bits) {
34- return l + ( val % range) ;
35- }
36- }
37- }
38-
39- pub fn _randint_big ( & mut self , l : & BigUint , h : & BigUint ) -> BigUint {
40- assert ! ( l <= h) ;
41- let range = h - l + BigUint :: one ( ) ;
42- let bits = range. bits ( ) ;
43- let bytes_needed = bits. div_ceil ( 8 ) as usize ;
44-
45- loop {
46- let mut buf = vec ! [ 0u8 ; bytes_needed] ;
47- self . fill_bytes ( & mut buf) ;
48- let val = BigUint :: from_bytes_be ( & buf) ;
49- if val. bits ( ) <= bits {
50- return l + ( val % & range) ;
51- }
52- }
53- }
5417}
5518
5619impl RngCore for TestDRNG {
0 commit comments