diff options
Diffstat (limited to 'openpgp')
-rw-r--r-- | openpgp/src/crypto/backend.rs | 20 | ||||
-rw-r--r-- | openpgp/src/crypto/backend/botan.rs | 9 | ||||
-rw-r--r-- | openpgp/src/crypto/backend/cng.rs | 11 | ||||
-rw-r--r-- | openpgp/src/crypto/backend/interface.rs | 11 | ||||
-rw-r--r-- | openpgp/src/crypto/backend/nettle.rs | 21 | ||||
-rw-r--r-- | openpgp/src/crypto/backend/openssl.rs | 9 | ||||
-rw-r--r-- | openpgp/src/crypto/backend/rust.rs | 15 | ||||
-rw-r--r-- | openpgp/src/crypto/mod.rs | 3 |
8 files changed, 73 insertions, 26 deletions
diff --git a/openpgp/src/crypto/backend.rs b/openpgp/src/crypto/backend.rs index 2aecfb69..03c142ea 100644 --- a/openpgp/src/crypto/backend.rs +++ b/openpgp/src/crypto/backend.rs @@ -1,6 +1,7 @@ //! Concrete implementation of the crypto primitives used by the rest of the //! crypto API. +pub(crate) mod interface; pub(crate) mod sha1cd; // Nettle is the default backend, but on Windows targets we instead @@ -25,6 +26,12 @@ mod nettle; feature = "crypto-botan2", feature = "crypto-rust")))))] pub use self::nettle::*; +#[cfg(all(feature = "crypto-nettle", + not(all(feature = "__implicit-crypto-backend-for-tests", + any(feature = "crypto-openssl", + feature = "crypto-botan", + feature = "crypto-rust")))))] +pub use self::nettle::Backend; // Nettle is the default backend, but on Windows targets we instead // enable CNG for running the tests in non-leaf crates that depend on @@ -50,18 +57,31 @@ mod cng; feature = "crypto-botan2", feature = "crypto-rust")))))] pub use self::cng::*; +#[cfg(all(feature = "crypto-cng", + not(all(feature = "__implicit-crypto-backend-for-tests", + any(feature = "crypto-nettle", + feature = "crypto-openssl", + feature = "crypto-botan", + feature = "crypto-rust")))))] +pub use self::cng::Backend; #[cfg(feature = "crypto-rust")] mod rust; #[cfg(feature = "crypto-rust")] pub use self::rust::*; +#[cfg(feature = "crypto-rust")] +pub use self::rust::Backend; #[cfg(feature = "crypto-openssl")] mod openssl; #[cfg(feature = "crypto-openssl")] pub use self::openssl::*; +#[cfg(feature = "crypto-openssl")] +pub use self::openssl::Backend; #[cfg(any(feature = "crypto-botan", feature = "crypto-botan2"))] mod botan; #[cfg(any(feature = "crypto-botan", feature = "crypto-botan2"))] pub use self::botan::*; +#[cfg(feature = "crypto-botan")] +pub use self::botan::Backend; diff --git a/openpgp/src/crypto/backend/botan.rs b/openpgp/src/crypto/backend/botan.rs index 975d6196..04951225 100644 --- a/openpgp/src/crypto/backend/botan.rs +++ b/openpgp/src/crypto/backend/botan.rs @@ -8,9 +8,12 @@ pub mod ecdh; pub mod hash; pub mod symmetric; -/// Returns a short, human-readable description of the backend. -pub fn backend() -> String { - "Botan".to_string() +pub struct Backend(()); + +impl super::interface::Backend for Backend { + fn backend() -> String { + "Botan".to_string() + } } /// Fills the given buffer with random data. diff --git a/openpgp/src/crypto/backend/cng.rs b/openpgp/src/crypto/backend/cng.rs index 3ded3f5b..96a4c2c0 100644 --- a/openpgp/src/crypto/backend/cng.rs +++ b/openpgp/src/crypto/backend/cng.rs @@ -10,10 +10,13 @@ pub mod ecdh; pub mod hash; pub mod symmetric; -/// Returns a short, human-readable description of the backend. -pub fn backend() -> String { - // XXX: can we include features and the version? - "Windows CNG".to_string() +pub struct Backend(()); + +impl super::interface::Backend for Backend { + fn backend() -> String { + // XXX: can we include features and the version? + "Windows CNG".to_string() + } } /// Fills the given buffer with random data. diff --git a/openpgp/src/crypto/backend/interface.rs b/openpgp/src/crypto/backend/interface.rs new file mode 100644 index 00000000..d0c8ffff --- /dev/null +++ b/openpgp/src/crypto/backend/interface.rs @@ -0,0 +1,11 @@ +//! The crypto-backend abstraction. + +/// Abstracts over the cryptographic backends. +pub trait Backend { + /// Returns a short, human-readable description of the backend. + /// + /// This starts with the name of the backend, possibly a version, + /// and any optional features that are available. This is meant + /// for inclusion in version strings to improve bug reports. + fn backend() -> String; +} diff --git a/openpgp/src/crypto/backend/nettle.rs b/openpgp/src/crypto/backend/nettle.rs index 7109fa3a..0800540f 100644 --- a/openpgp/src/crypto/backend/nettle.rs +++ b/openpgp/src/crypto/backend/nettle.rs @@ -10,15 +10,18 @@ pub mod ecdh; pub mod hash; pub mod symmetric; -/// Returns a short, human-readable description of the backend. -pub fn backend() -> String { - let (major, minor) = nettle::version(); - format!( - "Nettle {}.{} (Cv448: {:?}, OCB: {:?})", - major, minor, - nettle::curve448::IS_SUPPORTED, - nettle::aead::OCB_IS_SUPPORTED, - ) +pub struct Backend(()); + +impl super::interface::Backend for Backend { + fn backend() -> String { + let (major, minor) = nettle::version(); + format!( + "Nettle {}.{} (Cv448: {:?}, OCB: {:?})", + major, minor, + nettle::curve448::IS_SUPPORTED, + nettle::aead::OCB_IS_SUPPORTED, + ) + } } /// Fills the given buffer with random data. diff --git a/openpgp/src/crypto/backend/openssl.rs b/openpgp/src/crypto/backend/openssl.rs index 1c077cf2..e4f73418 100644 --- a/openpgp/src/crypto/backend/openssl.rs +++ b/openpgp/src/crypto/backend/openssl.rs @@ -9,9 +9,12 @@ pub mod ecdh; pub mod hash; pub mod symmetric; -/// Returns a short, human-readable description of the backend. -pub fn backend() -> String { - "OpenSSL".to_string() +pub struct Backend(()); + +impl super::interface::Backend for Backend { + fn backend() -> String { + "OpenSSL".to_string() + } } /// Fills the given buffer with random data. diff --git a/openpgp/src/crypto/backend/rust.rs b/openpgp/src/crypto/backend/rust.rs index 8dd85559..2a057569 100644 --- a/openpgp/src/crypto/backend/rust.rs +++ b/openpgp/src/crypto/backend/rust.rs @@ -12,6 +12,15 @@ pub mod ecdh; pub mod hash; pub mod symmetric; +pub struct Backend(()); + +impl super::interface::Backend for Backend { + fn backend() -> String { + // XXX: can we include features and the version? + "RustCrypto".to_string() + } +} + trait GenericArrayExt<T, N: ArrayLength<T>> { const LEN: usize; @@ -44,12 +53,6 @@ impl<T, N: ArrayLength<T>> GenericArrayExt<T, N> for GenericArray<T, N> { const LEN: usize = N::USIZE; } -/// Returns a short, human-readable description of the backend. -pub fn backend() -> String { - // XXX: can we include features and the version? - "RustCrypto".to_string() -} - /// Fills the given buffer with random data. pub fn random(buf: &mut [u8]) { use rand07::rngs::OsRng; diff --git a/openpgp/src/crypto/mod.rs b/openpgp/src/crypto/mod.rs index 6dc2002d..12527b70 100644 --- a/openpgp/src/crypto/mod.rs +++ b/openpgp/src/crypto/mod.rs @@ -49,7 +49,8 @@ mod tests; /// any optional features that are available. This is meant for /// inclusion in version strings to improve bug reports. pub fn backend() -> String { - backend::backend() + use backend::interface::Backend; + backend::Backend::backend() } /// Fills the given buffer with random data. |