Skip to content

Commit

Permalink
Add bindings to RAND_keep_random_devices_open
Browse files Browse the repository at this point in the history
Closes #1019
  • Loading branch information
sfackler committed Nov 22, 2018
1 parent 894b924 commit 5c7fa43
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 4 deletions.
4 changes: 4 additions & 0 deletions openssl-sys/src/rand.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,5 +2,9 @@ use libc::*;

extern "C" {
pub fn RAND_bytes(buf: *mut u8, num: c_int) -> c_int;

#[cfg(ossl111)]
pub fn RAND_keep_random_devices_open(keep: c_int);

pub fn RAND_status() -> c_int;
}
22 changes: 18 additions & 4 deletions openssl/src/rand.rs
Original file line number Diff line number Diff line change
Expand Up @@ -10,14 +10,16 @@
//! let mut buf = [0; 256];
//! rand_bytes(&mut buf).unwrap();
//! ```
use libc::c_int;
use ffi;
use libc::c_int;

use cvt;
use error::ErrorStack;

/// Fill buffer with cryptographically strong pseudo-random bytes.
///
/// This corresponds to [`RAND_bytes`].
///
/// # Examples
///
/// To generate a buffer with cryptographically strong bytes:
Expand All @@ -29,9 +31,7 @@ use error::ErrorStack;
/// rand_bytes(&mut buf).unwrap();
/// ```
///
/// # External OpenSSL Documentation
///
/// [RAND_bytes](https://www.openssl.org/docs/man1.1.0/crypto/RAND_bytes.html)
/// [`RAND_bytes`](https://www.openssl.org/docs/man1.1.0/crypto/RAND_bytes.html)
pub fn rand_bytes(buf: &mut [u8]) -> Result<(), ErrorStack> {
unsafe {
ffi::init();
Expand All @@ -40,6 +40,20 @@ pub fn rand_bytes(buf: &mut [u8]) -> Result<(), ErrorStack> {
}
}

/// Controls random device file descriptor behavior.
///
/// Requires OpenSSL 1.1.1 or newer.
///
/// This corresponds to [`RAND_keep_random_devices_open`].
///
/// [`RAND_keep_random_devices_open`]: https://www.openssl.org/docs/manmaster/man3/RAND_keep_random_devices_open.html
#[cfg(ossl111)]
pub fn keep_random_devices_open(keep: bool) {
unsafe {
ffi::RAND_keep_random_devices_open(keep as c_int);
}
}

#[cfg(test)]
mod tests {
use super::rand_bytes;
Expand Down

0 comments on commit 5c7fa43

Please sign in to comment.