@@ -142,6 +142,7 @@ impl ReadRng {
142
142
let mutex = unsafe { READ_RNG_FILE . as_ref ( ) . unwrap ( ) } ;
143
143
let mut guard = mutex. lock ( ) . unwrap ( ) ;
144
144
if ( * guard) . is_none ( ) {
145
+ info ! ( "OsRng: opening random device {}" , path. as_ref( ) . display( ) ) ;
145
146
let file = File :: open ( path) . map_err ( |err| Error :: with_cause (
146
147
ErrorKind :: Unavailable ,
147
148
"error opening random device" ,
@@ -154,6 +155,7 @@ impl ReadRng {
154
155
}
155
156
156
157
fn try_fill_bytes ( & mut self , dest : & mut [ u8 ] ) -> Result < ( ) , Error > {
158
+ trace ! ( "OsRng: reading {} bytes from random device" , dest. len( ) ) ;
157
159
if dest. len ( ) == 0 { return Ok ( ( ) ) ; }
158
160
159
161
// Since we have an instance of Self, we can assume that our memory was
@@ -223,6 +225,7 @@ mod imp {
223
225
fn getrandom ( _buf : & mut [ u8 ] ) -> libc:: c_long { -1 }
224
226
225
227
fn getrandom_try_fill ( v : & mut [ u8 ] ) -> Result < ( ) , Error > {
228
+ trace ! ( "OsRng: reading {} bytes via getrandom" , v. len( ) ) ;
226
229
let mut read = 0 ;
227
230
let len = v. len ( ) ;
228
231
while read < len {
@@ -265,6 +268,7 @@ mod imp {
265
268
static AVAILABLE : AtomicBool = ATOMIC_BOOL_INIT ;
266
269
267
270
CHECKER . call_once ( || {
271
+ debug ! ( "OsRng: testing getrandom" ) ;
268
272
let mut buf: [ u8 ; 0 ] = [ ] ;
269
273
let result = getrandom ( & mut buf) ;
270
274
let available = if result == -1 {
@@ -274,6 +278,7 @@ mod imp {
274
278
true
275
279
} ;
276
280
AVAILABLE . store ( available, Ordering :: Relaxed ) ;
281
+ info ! ( "OsRng: using {}" , if available { "getrandom" } else { "/dev/urandom" } ) ;
277
282
} ) ;
278
283
279
284
AVAILABLE . load ( Ordering :: Relaxed )
@@ -332,6 +337,7 @@ mod imp {
332
337
}
333
338
334
339
pub fn try_fill_bytes ( & mut self , v : & mut [ u8 ] ) -> Result < ( ) , Error > {
340
+ trace ! ( "OsRng: reading {} bytes via cloadabi::random_get" , v. len( ) ) ;
335
341
if unsafe { cloudabi:: random_get ( v) } == cloudabi:: errno:: SUCCESS {
336
342
Ok ( ( ) )
337
343
} else {
@@ -372,6 +378,7 @@ mod imp {
372
378
Ok ( OsRng )
373
379
}
374
380
pub fn try_fill_bytes ( & mut self , v : & mut [ u8 ] ) -> Result < ( ) , Error > {
381
+ trace ! ( "OsRng: reading {} bytes via SecRandomCopyBytes" , v. len( ) ) ;
375
382
let ret = unsafe {
376
383
SecRandomCopyBytes ( kSecRandomDefault, v. len ( ) as size_t , v. as_mut_ptr ( ) )
377
384
} ;
@@ -407,6 +414,7 @@ mod imp {
407
414
// kern.arandom permits a maximum buffer size of 256 bytes
408
415
for s in v. chunks_mut ( 256 ) {
409
416
let mut s_len = s. len ( ) ;
417
+ trace ! ( "OsRng: reading {} bytes via kern.arandom" , v. len( ) ) ;
410
418
let ret = unsafe {
411
419
libc:: sysctl ( mib. as_ptr ( ) , mib. len ( ) as libc:: c_uint ,
412
420
s. as_mut_ptr ( ) as * mut _ , & mut s_len,
@@ -441,6 +449,7 @@ mod imp {
441
449
pub fn try_fill_bytes ( & mut self , v : & mut [ u8 ] ) -> Result < ( ) , Error > {
442
450
// getentropy(2) permits a maximum buffer size of 256 bytes
443
451
for s in v. chunks_mut ( 256 ) {
452
+ trace ! ( "OsRng: reading {} bytes via getentropy" , s. len( ) ) ;
444
453
let ret = unsafe {
445
454
libc:: getentropy ( s. as_mut_ptr ( ) as * mut libc:: c_void , s. len ( ) )
446
455
} ;
@@ -494,6 +503,7 @@ mod imp {
494
503
}
495
504
pub fn try_fill_bytes ( & mut self , v : & mut [ u8 ] ) -> Result < ( ) , Error > {
496
505
for s in v. chunks_mut ( fuchsia_zircon:: sys:: ZX_CPRNG_DRAW_MAX_LEN ) {
506
+ trace ! ( "OsRng: reading {} bytes via cprng_draw" , s. len( ) ) ;
497
507
let mut filled = 0 ;
498
508
while filled < s. len ( ) {
499
509
match fuchsia_zircon:: cprng_draw ( & mut s[ filled..] ) {
@@ -535,6 +545,7 @@ mod imp {
535
545
// RtlGenRandom takes an ULONG (u32) for the length so we need to
536
546
// split up the buffer.
537
547
for slice in v. chunks_mut ( <ULONG >:: max_value ( ) as usize ) {
548
+ trace ! ( "OsRng: reading {} bytes via RtlGenRandom" , slice. len( ) ) ;
538
549
let ret = unsafe {
539
550
RtlGenRandom ( slice. as_mut_ptr ( ) as PVOID , slice. len ( ) as ULONG )
540
551
} ;
0 commit comments