Move AES XTS support to a feature

This commit is contained in:
Steven Fackler 2014-11-16 13:57:05 -08:00
parent fa42ed9edc
commit 5258ce6ece
6 changed files with 13 additions and 2 deletions

View File

@ -13,7 +13,7 @@ before_script:
script: script:
- cargo build --features "$FEATURES" - cargo build --features "$FEATURES"
- cargo test --features "$FEATURES" - cargo test --features "$FEATURES"
- cargo doc --features "sslv2 tlsv1_1 tlsv1_2" - cargo doc --features "sslv2 tlsv1_1 tlsv1_2 aes_xtc"
after_success: | after_success: |
[ $TRAVIS_BRANCH = master ] && [ $TRAVIS_BRANCH = master ] &&
[ $TRAVIS_PULL_REQUEST = false ] && [ $TRAVIS_PULL_REQUEST = false ] &&

View File

@ -8,6 +8,7 @@ authors = ["Steven Fackler <sfackler@gmail.com"]
tlsv1_2 = ["openssl-sys/tlsv1_2"] tlsv1_2 = ["openssl-sys/tlsv1_2"]
tlsv1_1 = ["openssl-sys/tlsv1_1"] tlsv1_1 = ["openssl-sys/tlsv1_1"]
sslv2 = ["openssl-sys/sslv2"] sslv2 = ["openssl-sys/sslv2"]
aes_xts = ["openssl-sys/aes_xts"]
[target.i686-apple-darwin.dependencies.openssl-sys] [target.i686-apple-darwin.dependencies.openssl-sys]
path = "openssl-sys" path = "openssl-sys"

View File

@ -10,6 +10,7 @@ build = "src/build.rs"
tlsv1_2 = [] tlsv1_2 = []
tlsv1_1 = [] tlsv1_1 = []
sslv2 = [] sslv2 = []
aes_xts = []
[build-dependencies.pkg-config] [build-dependencies.pkg-config]
git = "https://github.com/alexcrichton/pkg-config-rs" git = "https://github.com/alexcrichton/pkg-config-rs"

2
openssl-sys/src/lib.rs Executable file → Normal file
View File

@ -316,11 +316,13 @@ extern "C" {
pub fn EVP_aes_128_cbc() -> *const EVP_CIPHER; pub fn EVP_aes_128_cbc() -> *const EVP_CIPHER;
pub fn EVP_aes_128_ecb() -> *const EVP_CIPHER; pub fn EVP_aes_128_ecb() -> *const EVP_CIPHER;
#[cfg(feature = "aes_xts")]
pub fn EVP_aes_128_xts() -> *const EVP_CIPHER; pub fn EVP_aes_128_xts() -> *const EVP_CIPHER;
// fn EVP_aes_128_ctr() -> EVP_CIPHER; // fn EVP_aes_128_ctr() -> EVP_CIPHER;
// fn EVP_aes_128_gcm() -> EVP_CIPHER; // fn EVP_aes_128_gcm() -> EVP_CIPHER;
pub fn EVP_aes_256_cbc() -> *const EVP_CIPHER; pub fn EVP_aes_256_cbc() -> *const EVP_CIPHER;
pub fn EVP_aes_256_ecb() -> *const EVP_CIPHER; pub fn EVP_aes_256_ecb() -> *const EVP_CIPHER;
#[cfg(feature = "aes_xts")]
pub fn EVP_aes_256_xts() -> *const EVP_CIPHER; pub fn EVP_aes_256_xts() -> *const EVP_CIPHER;
// fn EVP_aes_256_ctr() -> EVP_CIPHER; // fn EVP_aes_256_ctr() -> EVP_CIPHER;
// fn EVP_aes_256_gcm() -> EVP_CIPHER; // fn EVP_aes_256_gcm() -> EVP_CIPHER;

View File

@ -122,7 +122,7 @@ mod tests {
pub fn hash_writer(t: super::HashType, data: &[u8]) -> Vec<u8> { pub fn hash_writer(t: super::HashType, data: &[u8]) -> Vec<u8> {
let mut h = super::Hasher::new(t); let mut h = super::Hasher::new(t);
h.write(data); h.write(data).unwrap();
h.finalize() h.finalize()
} }

View File

@ -11,12 +11,16 @@ pub enum Mode {
pub enum Type { pub enum Type {
AES_128_ECB, AES_128_ECB,
AES_128_CBC, AES_128_CBC,
/// Requires the `aes_xts` feature
#[cfg(feature = "aes_xts")]
AES_128_XTS, AES_128_XTS,
// AES_128_CTR, // AES_128_CTR,
//AES_128_GCM, //AES_128_GCM,
AES_256_ECB, AES_256_ECB,
AES_256_CBC, AES_256_CBC,
/// Requires the `aes_xts` feature
#[cfg(feature = "aes_xts")]
AES_256_XTS, AES_256_XTS,
// AES_256_CTR, // AES_256_CTR,
//AES_256_GCM, //AES_256_GCM,
@ -29,12 +33,14 @@ fn evpc(t: Type) -> (*const ffi::EVP_CIPHER, uint, uint) {
match t { match t {
AES_128_ECB => (ffi::EVP_aes_128_ecb(), 16u, 16u), AES_128_ECB => (ffi::EVP_aes_128_ecb(), 16u, 16u),
AES_128_CBC => (ffi::EVP_aes_128_cbc(), 16u, 16u), AES_128_CBC => (ffi::EVP_aes_128_cbc(), 16u, 16u),
#[cfg(feature = "aes_xts")]
AES_128_XTS => (ffi::EVP_aes_128_xts(), 32u, 16u), AES_128_XTS => (ffi::EVP_aes_128_xts(), 32u, 16u),
// AES_128_CTR => (EVP_aes_128_ctr(), 16u, 0u), // AES_128_CTR => (EVP_aes_128_ctr(), 16u, 0u),
//AES_128_GCM => (EVP_aes_128_gcm(), 16u, 16u), //AES_128_GCM => (EVP_aes_128_gcm(), 16u, 16u),
AES_256_ECB => (ffi::EVP_aes_256_ecb(), 32u, 16u), AES_256_ECB => (ffi::EVP_aes_256_ecb(), 32u, 16u),
AES_256_CBC => (ffi::EVP_aes_256_cbc(), 32u, 16u), AES_256_CBC => (ffi::EVP_aes_256_cbc(), 32u, 16u),
#[cfg(feature = "aes_xts")]
AES_256_XTS => (ffi::EVP_aes_256_xts(), 64u, 16u), AES_256_XTS => (ffi::EVP_aes_256_xts(), 64u, 16u),
// AES_256_CTR => (EVP_aes_256_ctr(), 32u, 0u), // AES_256_CTR => (EVP_aes_256_ctr(), 32u, 0u),
//AES_256_GCM => (EVP_aes_256_gcm(), 32u, 16u), //AES_256_GCM => (EVP_aes_256_gcm(), 32u, 16u),
@ -268,6 +274,7 @@ mod tests {
} }
#[test] #[test]
#[cfg(feature = "aes_xts")]
fn test_aes256_xts() { fn test_aes256_xts() {
// Test case 174 from // Test case 174 from
// http://csrc.nist.gov/groups/STM/cavp/documents/aes/XTSTestVectors.zip // http://csrc.nist.gov/groups/STM/cavp/documents/aes/XTSTestVectors.zip