summaryrefslogtreecommitdiff
path: root/vendor/getrandom/src/backends/esp_idf.rs
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/getrandom/src/backends/esp_idf.rs')
-rw-r--r--vendor/getrandom/src/backends/esp_idf.rs21
1 files changed, 21 insertions, 0 deletions
diff --git a/vendor/getrandom/src/backends/esp_idf.rs b/vendor/getrandom/src/backends/esp_idf.rs
new file mode 100644
index 00000000..4d1689dc
--- /dev/null
+++ b/vendor/getrandom/src/backends/esp_idf.rs
@@ -0,0 +1,21 @@
+//! Implementation for ESP-IDF
+use crate::Error;
+use core::{ffi::c_void, mem::MaybeUninit};
+
+pub use crate::util::{inner_u32, inner_u64};
+
+extern "C" {
+ fn esp_fill_random(buf: *mut c_void, len: usize) -> u32;
+}
+
+#[inline]
+pub fn fill_inner(dest: &mut [MaybeUninit<u8>]) -> Result<(), Error> {
+ // Not that NOT enabling WiFi, BT, or the voltage noise entropy source (via `bootloader_random_enable`)
+ // will cause ESP-IDF to return pseudo-random numbers based on the voltage noise entropy, after the initial boot process:
+ // https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/system/random.html
+ //
+ // However tracking if some of these entropy sources is enabled is way too difficult to implement here
+ unsafe { esp_fill_random(dest.as_mut_ptr().cast(), dest.len()) };
+
+ Ok(())
+}