An error with absolutely no details.
ring uses this unit type as the error type in most of its results
because (a) usually the specific reasons for a failure are obvious or are
not useful to know, and/or (b) providing more details about a failure might
provide a dangerous side channel, and/or (c) it greatly simplifies the
error handling logic.
Result<T, ring::error::Unspecified>
is mostly equivalent to
Result<T, ()>
. However, ring::error::Unspecified
implements
std::error::Error
and users of ring can implement
From<ring::error::Unspecified>
to map this to their own error types, as
described in “Error Handling” in the Rust Book:
extern crate ring;
use ring::rand;
use ring::rand::SecureRandom;
enum Error {
CryptoError,
IOError(std::io::Error),
}
impl From<ring::error::Unspecified> for Error {
fn from(_: ring::error::Unspecified) -> Self { Error::CryptoError }
}
fn eight_random_bytes() -> Result<[u8; 8], Error> {
let rng = rand::SystemRandom::new();
let mut bytes = [0; 8];
rng.fill(&mut bytes)?;
Ok(bytes)
}
Experience with using and implementing other crypto libraries like has
shown that sophisticated error reporting facilities often cause significant
bugs themselves, both within the crypto library and within users of the
crypto library. This approach attempts to minimize complexity in the hopes
of avoiding such problems. In some cases, this approach may be too extreme,
and it may be important for an operation to provide some details about the
cause of a failure. Users of ring are encouraged to report such cases so
that they can be addressed individually.
Performs copy-assignment from source
. Read more
Formats the value using the given formatter. Read more
This method tests for self
and other
values to be equal, and is used by ==
. Read more
This method tests for !=
.
Formats the value using the given formatter. Read more
The lower-level cause of this error, if any. Read more