use ironcrypt::{CryptoStandard, IronCrypt, IronCryptConfig, DataType, config::KeyManagementConfig};
use std::collections::HashMap;
#[tokio::test]
async fn test_nist_standard_applies_correct_params() {
let temp_dir = tempfile::tempdir().unwrap();
let key_dir = temp_dir.path().to_str().unwrap();
let mut config = IronCryptConfig {
standard: CryptoStandard::Nist,
..IronCryptConfig::default()
};
let mut data_type_config = HashMap::new();
data_type_config.insert(
DataType::Generic,
KeyManagementConfig {
key_directory: key_dir.to_string(),
key_version: "v1".to_string(),
passphrase: None,
},
);
config.data_type_config = Some(data_type_config);
let crypt = IronCrypt::new(config, DataType::Generic).await.unwrap();
let expected_params = CryptoStandard::Nist.get_params().unwrap();
assert_eq!(crypt.config.symmetric_algorithm, expected_params.symmetric_algorithm);
assert_eq!(crypt.config.asymmetric_algorithm, expected_params.asymmetric_algorithm);
assert_eq!(crypt.config.rsa_key_size, expected_params.rsa_key_size);
}
#[tokio::test]
async fn test_fips_standard_applies_correct_params() {
let temp_dir = tempfile::tempdir().unwrap();
let key_dir = temp_dir.path().to_str().unwrap();
let mut config = IronCryptConfig {
standard: CryptoStandard::Fips140_2,
..IronCryptConfig::default()
};
let mut data_type_config = HashMap::new();
data_type_config.insert(
DataType::Generic,
KeyManagementConfig {
key_directory: key_dir.to_string(),
key_version: "v1".to_string(),
passphrase: None,
},
);
config.data_type_config = Some(data_type_config);
let crypt = IronCrypt::new(config, DataType::Generic).await.unwrap();
let expected_params = CryptoStandard::Fips140_2.get_params().unwrap();
assert_eq!(crypt.config.symmetric_algorithm, expected_params.symmetric_algorithm);
assert_eq!(crypt.config.asymmetric_algorithm, expected_params.asymmetric_algorithm);
assert_eq!(crypt.config.rsa_key_size, expected_params.rsa_key_size);
}
#[tokio::test]
async fn test_custom_standard_retains_user_params() {
let temp_dir = tempfile::tempdir().unwrap();
let key_dir = temp_dir.path().to_str().unwrap();
let mut config = IronCryptConfig {
standard: CryptoStandard::Custom,
symmetric_algorithm: ironcrypt::algorithms::SymmetricAlgorithm::ChaCha20Poly1305,
asymmetric_algorithm: ironcrypt::algorithms::AsymmetricAlgorithm::Ecc,
rsa_key_size: 4096, ..Default::default()
};
let mut data_type_config = HashMap::new();
data_type_config.insert(
DataType::Generic,
KeyManagementConfig {
key_directory: key_dir.to_string(),
key_version: "v1".to_string(),
passphrase: None,
},
);
config.data_type_config = Some(data_type_config);
let crypt = IronCrypt::new(config.clone(), DataType::Generic).await.unwrap();
assert_eq!(crypt.config.standard, CryptoStandard::Custom);
assert_eq!(crypt.config.symmetric_algorithm, config.symmetric_algorithm);
assert_eq!(crypt.config.asymmetric_algorithm, config.asymmetric_algorithm);
assert_eq!(crypt.config.rsa_key_size, config.rsa_key_size);
}
#[tokio::test]
async fn test_anssi_standard_applies_correct_params() {
let temp_dir = tempfile::tempdir().unwrap();
let key_dir = temp_dir.path().to_str().unwrap();
let mut config = IronCryptConfig {
standard: CryptoStandard::Anssi,
..IronCryptConfig::default()
};
let mut data_type_config = HashMap::new();
data_type_config.insert(
DataType::Generic,
KeyManagementConfig {
key_directory: key_dir.to_string(),
key_version: "v1".to_string(),
passphrase: None,
},
);
config.data_type_config = Some(data_type_config);
let crypt = IronCrypt::new(config, DataType::Generic).await.unwrap();
let expected_params = CryptoStandard::Anssi.get_params().unwrap();
assert_eq!(crypt.config.symmetric_algorithm, expected_params.symmetric_algorithm);
assert_eq!(crypt.config.asymmetric_algorithm, expected_params.asymmetric_algorithm);
assert_eq!(crypt.config.rsa_key_size, expected_params.rsa_key_size);
}