Skip to content

Commit 97c19ec

Browse files
support sgx-target
1 parent 158c3e9 commit 97c19ec

File tree

4 files changed

+40
-0
lines changed

4 files changed

+40
-0
lines changed

Cargo.toml

+3
Original file line numberDiff line numberDiff line change
@@ -75,3 +75,6 @@ autocfg = "0.1"
7575

7676
[package.metadata.docs.rs]
7777
all-features = true
78+
79+
[patch.crates-io]
80+
rand_core = { path = "rand_core", version = "0.3", default-features = false }

rand_os/Cargo.toml

+3
Original file line numberDiff line numberDiff line change
@@ -34,3 +34,6 @@ fuchsia-zircon = "0.3.2"
3434
[target.wasm32-unknown-unknown.dependencies]
3535
wasm-bindgen = { version = "0.2.12", optional = true }
3636
stdweb = { version = "0.4", optional = true }
37+
38+
[target.'cfg(target_env = "sgx")'.dependencies]
39+
rdrand = "0.4.0"

rand_os/src/lib.rs

+4
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,8 @@ extern crate wasm_bindgen;
142142
feature = "stdweb"))]
143143
#[macro_use] extern crate stdweb;
144144

145+
#[cfg(target_env = "sgx")]
146+
extern crate rdrand;
145147

146148
#[cfg(not(feature = "log"))]
147149
#[macro_use]
@@ -310,6 +312,7 @@ mod_use!(cfg(target_os = "openbsd"), openbsd_bitrig);
310312
mod_use!(cfg(target_os = "redox"), redox);
311313
mod_use!(cfg(target_os = "solaris"), solaris);
312314
mod_use!(cfg(windows), windows);
315+
mod_use!(cfg(target_env = "sgx"), sgx);
313316

314317
mod_use!(
315318
cfg(all(
@@ -356,5 +359,6 @@ compile_error!("enable either wasm_bindgen or stdweb feature");
356359
target_os = "solaris",
357360
windows,
358361
target_arch = "wasm32",
362+
target_env = "sgx"
359363
)))]
360364
compile_error!("OS RNG support is not available for this platform");

rand_os/src/sgx.rs

+30
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
use super::OsRngImpl;
2+
use Error;
3+
use rdrand::RdRand;
4+
use rand_core::RngCore;
5+
use std::fmt::{Debug, Formatter, Result as FmtResult};
6+
7+
#[derive(Clone)]
8+
pub struct OsRng{
9+
gen: RdRand
10+
}
11+
12+
impl OsRngImpl for OsRng {
13+
fn new() -> Result<OsRng, Error> {
14+
let rng = RdRand::new()?;
15+
Ok(OsRng{ gen: rng })
16+
}
17+
18+
fn fill_chunk(&mut self, dest: &mut [u8]) -> Result<(), Error> {
19+
self.gen.try_fill_bytes(dest)
20+
}
21+
22+
fn method_str(&self) -> &'static str { "RDRAND" }
23+
}
24+
25+
impl Debug for OsRng {
26+
fn fmt(&self, f: &mut Formatter) -> FmtResult {
27+
f.debug_struct("OsRng")
28+
.finish()
29+
}
30+
}

0 commit comments

Comments
 (0)