diff --git a/ctru-rs/src/services/mod.rs b/ctru-rs/src/services/mod.rs index bb96484..f8c99d2 100644 --- a/ctru-rs/src/services/mod.rs +++ b/ctru-rs/src/services/mod.rs @@ -2,6 +2,8 @@ pub mod apt; pub mod fs; pub mod hid; pub mod gspgpu; +pub mod sslc; pub use self::hid::Hid; pub use self::apt::Apt; +pub use self::sslc::SslC; diff --git a/ctru-rs/src/services/sslc.rs b/ctru-rs/src/services/sslc.rs new file mode 100644 index 0000000..b3ce848 --- /dev/null +++ b/ctru-rs/src/services/sslc.rs @@ -0,0 +1,38 @@ +use libctru::services::sslc::*; +use Result; + +// TODO: Implement remaining functions + +pub struct SslC(()); + +impl SslC { + /// Initialize sslc + pub fn init() -> Result { + unsafe { + let r = sslcInit(0); + if r < 0 { + Err(r.into()) + } else { + Ok(SslC(())) + } + } + } + + /// Fill `buf` with `buf.len()` random bytes + pub fn generate_random_data(&self, buf: &mut [u8]) -> Result<()> { + unsafe { + let r = sslcGenerateRandomData(buf.as_ptr() as _, buf.len() as u32); + if r < 0 { + Err(r.into()) + } else { + Ok(()) + } + } + } +} + +impl Drop for SslC { + fn drop(&mut self) { + unsafe { sslcExit() }; + } +}