diff --git a/Cargo.lock b/Cargo.lock index 71fd7e6b..e6939e82 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4,6 +4,7 @@ name = "aes" version = "0.7.0-pre" dependencies = [ + "cfg-if", "cipher", "ctr", "opaque-debug", @@ -56,6 +57,12 @@ dependencies = [ "opaque-debug", ] +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + [[package]] name = "cipher" version = "0.2.5" diff --git a/aes/Cargo.toml b/aes/Cargo.toml index 1bcb9c1d..6bfd7f70 100644 --- a/aes/Cargo.toml +++ b/aes/Cargo.toml @@ -15,6 +15,7 @@ keywords = ["crypto", "aes", "rijndael", "block-cipher"] categories = ["cryptography", "no-std"] [dependencies] +cfg-if = "1" cipher = "0.2" ctr = { version = "0.6", optional = true } opaque-debug = "0.3" diff --git a/aes/src/lib.rs b/aes/src/lib.rs index a351c75d..bf5fb6c7 100644 --- a/aes/src/lib.rs +++ b/aes/src/lib.rs @@ -53,53 +53,33 @@ )] #![warn(missing_docs, rust_2018_idioms)] -#[cfg(all( - target_feature = "aes", - target_feature = "sse2", - any(target_arch = "x86_64", target_arch = "x86"), -))] -mod ni; +use cfg_if::cfg_if; -#[cfg(not(all( - target_feature = "aes", - target_feature = "sse2", - any(target_arch = "x86_64", target_arch = "x86"), -)))] -mod soft; - -#[cfg(not(all( - target_feature = "aes", - target_feature = "sse2", - any(target_arch = "x86_64", target_arch = "x86"), -)))] -pub use soft::{Aes128, Aes192, Aes256}; - -#[cfg(all( - target_feature = "aes", - target_feature = "sse2", - any(target_arch = "x86_64", target_arch = "x86"), -))] -pub use ni::{Aes128, Aes192, Aes256}; - -#[cfg(all( - feature = "ctr", - not(all( +cfg_if! { + if #[cfg(all( target_feature = "aes", target_feature = "sse2", - target_feature = "ssse3", any(target_arch = "x86_64", target_arch = "x86"), - )) -))] -pub use soft::{Aes128Ctr, Aes192Ctr, Aes256Ctr}; + ))] { + mod ni; + pub use ni::{Aes128, Aes192, Aes256}; + + #[cfg(feature = "ctr")] + cfg_if! { + if #[cfg(target_feature = "ssse3")] { + pub use ni::{Aes128Ctr, Aes192Ctr, Aes256Ctr}; + } else { + compile_error!("Please enable the +ssse3 target feature to use `ctr` with AES-NI") + } + } + } else { + mod soft; + pub use soft::{Aes128, Aes192, Aes256}; -#[cfg(all( - feature = "ctr", - target_feature = "aes", - target_feature = "sse2", - target_feature = "ssse3", - any(target_arch = "x86_64", target_arch = "x86"), -))] -pub use ni::{Aes128Ctr, Aes192Ctr, Aes256Ctr}; + #[cfg(feature = "ctr")] + pub use soft::{Aes128Ctr, Aes192Ctr, Aes256Ctr}; + } +} pub use cipher::{self, BlockCipher, NewBlockCipher};