File tree 4 files changed +48
-0
lines changed
4 files changed +48
-0
lines changed Original file line number Diff line number Diff line change @@ -75,3 +75,6 @@ autocfg = "0.1"
75
75
76
76
[package .metadata .docs .rs ]
77
77
all-features = true
78
+
79
+ [patch .crates-io ]
80
+ rand_core = { path = " rand_core" , version = " 0.3" , default-features = false }
Original file line number Diff line number Diff line change @@ -34,3 +34,6 @@ fuchsia-zircon = "0.3.2"
34
34
[target .wasm32-unknown-unknown .dependencies ]
35
35
wasm-bindgen = { version = " 0.2.12" , optional = true }
36
36
stdweb = { version = " 0.4" , optional = true }
37
+
38
+ [target .'cfg(target_env = "sgx")' .dependencies ]
39
+ rdrand = " 0.4.0"
Original file line number Diff line number Diff line change @@ -142,6 +142,8 @@ extern crate wasm_bindgen;
142
142
feature = "stdweb" ) ) ]
143
143
#[ macro_use] extern crate stdweb;
144
144
145
+ #[ cfg( target_env = "sgx" ) ]
146
+ extern crate rdrand;
145
147
146
148
#[ cfg( not( feature = "log" ) ) ]
147
149
#[ macro_use]
@@ -310,6 +312,7 @@ mod_use!(cfg(target_os = "openbsd"), openbsd_bitrig);
310
312
mod_use ! ( cfg( target_os = "redox" ) , redox) ;
311
313
mod_use ! ( cfg( target_os = "solaris" ) , solaris) ;
312
314
mod_use ! ( cfg( windows) , windows) ;
315
+ mod_use ! ( cfg( target_env = "sgx" ) , sgx) ;
313
316
314
317
mod_use ! (
315
318
cfg( all(
@@ -356,5 +359,6 @@ compile_error!("enable either wasm_bindgen or stdweb feature");
356
359
target_os = "solaris" ,
357
360
windows,
358
361
target_arch = "wasm32" ,
362
+ target_env = "sgx"
359
363
) ) ) ]
360
364
compile_error ! ( "OS RNG support is not available for this platform" ) ;
Original file line number Diff line number Diff line change
1
+ // Copyright 2018 Developers of the Rand project.
2
+ //
3
+ // Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
4
+ // https://www.apache.org/licenses/LICENSE-2.0> or the MIT license
5
+ // <LICENSE-MIT or https://opensource.org/licenses/MIT>, at your
6
+ // option. This file may not be copied, modified, or distributed
7
+ // except according to those terms.
8
+
9
+ use super :: OsRngImpl ;
10
+ use Error ;
11
+ use rdrand:: RdRand ;
12
+ use rand_core:: RngCore ;
13
+ use std:: fmt:: { Debug , Formatter , Result as FmtResult } ;
14
+
15
+ #[ derive( Clone ) ]
16
+ pub struct OsRng {
17
+ gen : RdRand
18
+ }
19
+
20
+ impl OsRngImpl for OsRng {
21
+ fn new ( ) -> Result < OsRng , Error > {
22
+ let rng = RdRand :: new ( ) ?;
23
+ Ok ( OsRng { gen : rng } )
24
+ }
25
+
26
+ fn fill_chunk ( & mut self , dest : & mut [ u8 ] ) -> Result < ( ) , Error > {
27
+ self . gen . try_fill_bytes ( dest)
28
+ }
29
+
30
+ fn method_str ( & self ) -> & ' static str { "RDRAND" }
31
+ }
32
+
33
+ impl Debug for OsRng {
34
+ fn fmt ( & self , f : & mut Formatter ) -> FmtResult {
35
+ f. debug_struct ( "OsRng" )
36
+ . finish ( )
37
+ }
38
+ }
You can’t perform that action at this time.
0 commit comments