aboutsummaryrefslogtreecommitdiff
path: root/openssl/src/crypto/rand.rs
diff options
context:
space:
mode:
authorSteven Fackler <[email protected]>2016-08-11 21:01:27 -0700
committerSteven Fackler <[email protected]>2016-08-11 21:01:27 -0700
commit652326003cefe215dbfc838051e6114515cc5190 (patch)
tree22dc99a726321cd8228004c34c40ca4a0648c594 /openssl/src/crypto/rand.rs
parentMerge branch 'release-v0.7.14' into release (diff)
parentRelease openssl-sys v0.7.15, openssl v0.8.0 (diff)
downloadrust-openssl-openssl-v0.8.0.tar.xz
rust-openssl-openssl-v0.8.0.zip
Merge branch 'release-v0.7.15-sys-v0.8.0' into releaseopenssl-v0.8.0openssl-sys-v0.7.15
Diffstat (limited to 'openssl/src/crypto/rand.rs')
-rw-r--r--openssl/src/crypto/rand.rs20
1 files changed, 7 insertions, 13 deletions
diff --git a/openssl/src/crypto/rand.rs b/openssl/src/crypto/rand.rs
index ba57a8a1..519449e9 100644
--- a/openssl/src/crypto/rand.rs
+++ b/openssl/src/crypto/rand.rs
@@ -1,19 +1,13 @@
use libc::c_int;
use ffi;
+use error::ErrorStack;
-pub fn rand_bytes(len: usize) -> Vec<u8> {
+pub fn rand_bytes(buf: &mut [u8]) -> Result<(), ErrorStack> {
unsafe {
- let mut out = Vec::with_capacity(len);
-
ffi::init();
- let r = ffi::RAND_bytes(out.as_mut_ptr(), len as c_int);
- if r != 1 as c_int {
- panic!()
- }
-
- out.set_len(len);
-
- out
+ assert!(buf.len() <= c_int::max_value() as usize);
+ try_ssl_if!(ffi::RAND_bytes(buf.as_mut_ptr(), buf.len() as c_int) != 1);
+ Ok(())
}
}
@@ -23,7 +17,7 @@ mod tests {
#[test]
fn test_rand_bytes() {
- let bytes = rand_bytes(32);
- println!("{:?}", bytes);
+ let mut buf = [0; 32];
+ rand_bytes(&mut buf).unwrap();
}
}