From 809d31a4273505487febb2dd281376d2bb3766ab Mon Sep 17 00:00:00 2001
From: Robin Krahl <robin.krahl@ireas.org>
Date: Fri, 25 Jan 2019 18:46:57 +0000
Subject: Remove rand_core::Error from public API

rand_core does not have a stable release yet, and it is unlikely that
there will be one soon.  To be able to stabilize nitrokey without
waiting for a stable rand_core version, we remove the rand_core::Error
type from the public API and replace it with a Box<dyn error::Error>.
---
 src/error.rs | 10 ++--------
 src/util.rs  |  2 +-
 2 files changed, 3 insertions(+), 9 deletions(-)

diff --git a/src/error.rs b/src/error.rs
index 9cdb932..1b36975 100644
--- a/src/error.rs
+++ b/src/error.rs
@@ -19,7 +19,7 @@ pub enum Error {
     /// A library usage error.
     LibraryError(LibraryError),
     /// An error that occured during random number generation.
-    RandError(rand_core::Error),
+    RandError(Box<dyn error::Error>),
     /// An error that is caused by an unexpected value returned by libnitrokey.
     UnexpectedError,
     /// An unknown error returned by libnitrokey.
@@ -60,12 +60,6 @@ impl From<LibraryError> for Error {
     }
 }
 
-impl From<rand_core::Error> for Error {
-    fn from(error: rand_core::Error) -> Self {
-        Error::RandError(error)
-    }
-}
-
 impl From<str::Utf8Error> for Error {
     fn from(error: str::Utf8Error) -> Self {
         Error::Utf8Error(error)
@@ -84,7 +78,7 @@ impl error::Error for Error {
             Error::CommandError(ref err) => Some(err),
             Error::CommunicationError(ref err) => Some(err),
             Error::LibraryError(ref err) => Some(err),
-            Error::RandError(ref err) => Some(err),
+            Error::RandError(ref err) => Some(err.as_ref()),
             Error::UnexpectedError => None,
             Error::Unknown(_) => None,
             Error::Utf8Error(ref err) => Some(err),
diff --git a/src/util.rs b/src/util.rs
index 5f25655..d87cd7c 100644
--- a/src/util.rs
+++ b/src/util.rs
@@ -73,7 +73,7 @@ pub fn get_last_error() -> Error {
 }
 
 pub fn generate_password(length: usize) -> Result<Vec<u8>, Error> {
-    let mut rng = OsRng::new()?;
+    let mut rng = OsRng::new().map_err(|err| Error::RandError(Box::new(err)))?;
     let mut data = vec![0u8; length];
     rng.fill_bytes(&mut data[..]);
     Ok(data)
-- 
cgit v1.2.3