Switch to rand_os for random bytes.

Emmanuel Gil Peyrot created

Change summary

sasl/Cargo.toml          |  1 +
sasl/src/common/scram.rs | 13 ++++++++-----
sasl/src/error.rs        | 12 ++++++------
3 files changed, 15 insertions(+), 11 deletions(-)

Detailed changes

sasl/Cargo.toml 🔗

@@ -20,6 +20,7 @@ scram = ["openssl"]
 
 [dependencies]
 base64 = "0.10"
+rand_os = "0.1"
 sha-1 = "0.8"
 sha2 = "0.8"
 hmac = "0.7"

sasl/src/common/scram.rs 🔗

@@ -1,8 +1,10 @@
 use hmac::{Hmac, Mac};
-use openssl::error::ErrorStack;
 use openssl::hash::MessageDigest;
 use openssl::pkcs5::pbkdf2_hmac;
-use openssl::rand::rand_bytes;
+use rand_os::{
+    rand_core::{Error as RngError, RngCore},
+    OsRng,
+};
 use sha1::{Digest, Sha1 as Sha1_hash};
 use sha2::Sha256 as Sha256_hash;
 
@@ -13,9 +15,10 @@ use crate::secret;
 use base64;
 
 /// Generate a nonce for SCRAM authentication.
-pub fn generate_nonce() -> Result<String, ErrorStack> {
-    let mut data = vec![0; 32];
-    rand_bytes(&mut data)?;
+pub fn generate_nonce() -> Result<String, RngError> {
+    let mut data = [0u8; 32];
+    let mut rng = OsRng::new()?;
+    rng.fill_bytes(&mut data);
     Ok(base64::encode(&data))
 }
 

sasl/src/error.rs 🔗

@@ -1,19 +1,19 @@
 #[cfg(feature = "scram")]
-use openssl::error::ErrorStack;
+use rand_os::rand_core::Error as RngError;
 
 /// A wrapper enum for things that could go wrong in this crate.
 #[derive(Debug)]
 pub enum Error {
     #[cfg(feature = "scram")]
-    /// An error in OpenSSL.
-    OpenSslErrorStack(ErrorStack),
+    /// An error while initializing the Rng.
+    RngError(RngError),
     /// An error in a SASL mechanism.
     SaslError(String),
 }
 
 #[cfg(feature = "scram")]
-impl From<ErrorStack> for Error {
-    fn from(err: ErrorStack) -> Error {
-        Error::OpenSslErrorStack(err)
+impl From<RngError> for Error {
+    fn from(err: RngError) -> Error {
+        Error::RngError(err)
     }
 }