aboutsummaryrefslogtreecommitdiff
path: root/rand/rand_jitter/src/error.rs
diff options
context:
space:
mode:
authorDaniel Mueller <deso@posteo.net>2020-01-02 08:32:06 -0800
committerDaniel Mueller <deso@posteo.net>2020-01-02 08:32:06 -0800
commitfd091b04316db9dc5fafadbd6bdbe60b127408a9 (patch)
treef202270f7ae5cedc513be03833a26148d9b5e219 /rand/rand_jitter/src/error.rs
parent8161cdb26f98e65b39c603ddf7a614cc87c77a1c (diff)
downloadnitrocli-fd091b04316db9dc5fafadbd6bdbe60b127408a9.tar.gz
nitrocli-fd091b04316db9dc5fafadbd6bdbe60b127408a9.tar.bz2
Update nitrokey crate to 0.4.0
This change finally updates the version of the nitrokey crate that we consume to 0.4.0. Along with that we update rand_core, one of its dependencies, to 0.5.1. Further more we add cfg-if in version 0.1.10 and getrandom in version 0.1.13, both of which are now new (non-development) dependencies. Import subrepo nitrokey/:nitrokey at e81057037e9b4f370b64c0a030a725bc6bdfb870 Import subrepo cfg-if/:cfg-if at 4484a6faf816ff8058088ad857b0c6bb2f4b02b2 Import subrepo getrandom/:getrandom at d661aa7e1b8cc80b47dabe3d2135b3b47d2858af Import subrepo rand/:rand at d877ed528248b52d947e0484364a4e1ae59ca502
Diffstat (limited to 'rand/rand_jitter/src/error.rs')
-rw-r--r--rand/rand_jitter/src/error.rs77
1 files changed, 77 insertions, 0 deletions
diff --git a/rand/rand_jitter/src/error.rs b/rand/rand_jitter/src/error.rs
new file mode 100644
index 0000000..b54fffa
--- /dev/null
+++ b/rand/rand_jitter/src/error.rs
@@ -0,0 +1,77 @@
+// Copyright 2018 Developers of the Rand project.
+// Copyright 2013-2015 The Rust Project Developers.
+//
+// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
+// https://www.apache.org/licenses/LICENSE-2.0> or the MIT license
+// <LICENSE-MIT or https://opensource.org/licenses/MIT>, at your
+// option. This file may not be copied, modified, or distributed
+// except according to those terms.
+
+use rand_core::Error;
+use core::fmt;
+
+/// Base code for all `JitterRng` errors
+const ERROR_BASE: u32 = 0xAE53_0400;
+
+/// An error that can occur when [`JitterRng::test_timer`] fails.
+///
+/// All variants have a value of 0xAE530400 = 2924676096 plus a small
+/// increment (1 through 5).
+///
+/// [`JitterRng::test_timer`]: crate::JitterRng::test_timer
+#[derive(Debug, Clone, PartialEq, Eq)]
+#[repr(u32)]
+pub enum TimerError {
+ /// No timer available.
+ NoTimer = ERROR_BASE + 1,
+ /// Timer too coarse to use as an entropy source.
+ CoarseTimer = ERROR_BASE + 2,
+ /// Timer is not monotonically increasing.
+ NotMonotonic = ERROR_BASE + 3,
+ /// Variations of deltas of time too small.
+ TinyVariantions = ERROR_BASE + 4,
+ /// Too many stuck results (indicating no added entropy).
+ TooManyStuck = ERROR_BASE + 5,
+ #[doc(hidden)]
+ __Nonexhaustive,
+}
+
+impl TimerError {
+ fn description(&self) -> &'static str {
+ match *self {
+ TimerError::NoTimer => "no timer available",
+ TimerError::CoarseTimer => "coarse timer",
+ TimerError::NotMonotonic => "timer not monotonic",
+ TimerError::TinyVariantions => "time delta variations too small",
+ TimerError::TooManyStuck => "too many stuck results",
+ TimerError::__Nonexhaustive => unreachable!(),
+ }
+ }
+}
+
+impl fmt::Display for TimerError {
+ fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+ write!(f, "{}", self.description())
+ }
+}
+
+#[cfg(feature = "std")]
+impl ::std::error::Error for TimerError {
+ fn description(&self) -> &str {
+ self.description()
+ }
+}
+
+impl From<TimerError> for Error {
+ fn from(err: TimerError) -> Error {
+ // Timer check is already quite permissive of failures so we don't
+ // expect false-positive failures, i.e. any error is irrecoverable.
+ #[cfg(feature = "std")] {
+ Error::new(err)
+ }
+ #[cfg(not(feature = "std"))] {
+ Error::from(core::num::NonZeroU32::new(err as u32).unwrap())
+ }
+ }
+}
+