diff options
| author | 袁浩 <yuanhao34@huawei.com> | 2023-10-09 11:27:11 +0800 |
|---|---|---|
| committer | Sword-Destiny <yuanhonglong@outlook.com> | 2023-12-07 10:33:03 +0800 |
| commit | e353eb91fb793c5ec7cb12f7c99a13d55e05fba1 (patch) | |
| tree | 6a61dd5284f4cb8c425316e9e510190ef7744c1e /library/std/src/sys/teeos/rand.rs | |
| parent | 28968414c57f12b827f01a5e6b99017b7ffa7370 (diff) | |
| download | rust-e353eb91fb793c5ec7cb12f7c99a13d55e05fba1.tar.gz rust-e353eb91fb793c5ec7cb12f7c99a13d55e05fba1.zip | |
add teeos std impl
Signed-off-by: 袁浩 <yuanhao34@huawei.com>
Diffstat (limited to 'library/std/src/sys/teeos/rand.rs')
| -rw-r--r-- | library/std/src/sys/teeos/rand.rs | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/library/std/src/sys/teeos/rand.rs b/library/std/src/sys/teeos/rand.rs new file mode 100644 index 00000000000..b45c3bb40e7 --- /dev/null +++ b/library/std/src/sys/teeos/rand.rs @@ -0,0 +1,21 @@ +pub fn hashmap_random_keys() -> (u64, u64) { + const KEY_LEN: usize = core::mem::size_of::<u64>(); + + let mut v = [0u8; KEY_LEN * 2]; + imp::fill_bytes(&mut v); + + let key1 = v[0..KEY_LEN].try_into().unwrap(); + let key2 = v[KEY_LEN..].try_into().unwrap(); + + (u64::from_ne_bytes(key1), u64::from_ne_bytes(key2)) +} + +mod imp { + extern "C" { + fn TEE_GenerateRandom(randomBuffer: *mut core::ffi::c_void, randomBufferLen: libc::size_t); + } + + pub fn fill_bytes(v: &mut [u8]) { + unsafe { TEE_GenerateRandom(v.as_mut_ptr() as _, v.len() * crate::mem::size_of::<u8>()) } + } +} |
