diff --git a/Cargo.toml b/Cargo.toml index 947447f..537cfae 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -20,3 +20,4 @@ lazy_static = {version = "^1.4"} [build-dependencies] pkg-config = {version = "^0.3"} bindgen = {version = "^0.65"} +cc = "1.2.36" diff --git a/bindings.rs b/bindings.rs index d48087f..ce90c92 100644 --- a/bindings.rs +++ b/bindings.rs @@ -10,8 +10,79 @@ use std::env; use std::path::PathBuf; use std::process::Command; - const BINDINGS: &str = "bindings.rs"; +const TRANSFORMS: &[(&str, &str)] = &[ + ("xmlSecOpenSSLTransformAes128CbcGetKlass", "has_aes128_cbc"), + ("xmlSecOpenSSLTransformAes128GcmGetKlass", "has_aes128_gcm"), + ("xmlSecOpenSSLTransformAes192CbcGetKlass", "has_aes192_cbc"), + ("xmlSecOpenSSLTransformAes192GcmGetKlass", "has_aes192_gcm"), + ("xmlSecOpenSSLTransformAes256CbcGetKlass", "has_aes256_cbc"), + ("xmlSecOpenSSLTransformAes256GcmGetKlass", "has_aes256_gcm"), + ("xmlSecOpenSSLTransformConcatKdfGetKlass", "has_concatkdf"), + ("xmlSecOpenSSLTransformDes3CbcGetKlass", "has_des3_cbc"), + ("xmlSecOpenSSLTransformDhEsGetKlass", "has_dhes"), + ("xmlSecOpenSSLTransformDsaSha1GetKlass", "has_dsa_sha1"), + ("xmlSecOpenSSLTransformDsaSha256GetKlass", "has_dsa_sha256"), + ("xmlSecOpenSSLTransformEcdhGetKlass", "has_ecdh"), + ("xmlSecOpenSSLTransformEcdsaRipemd160GetKlass", "has_ecdsa_ripemd160"), + ("xmlSecOpenSSLTransformEcdsaSha1GetKlass", "has_ecdsa_sha1"), + ("xmlSecOpenSSLTransformEcdsaSha224GetKlass", "has_ecdsa_sha224"), + ("xmlSecOpenSSLTransformEcdsaSha256GetKlass", "has_ecdsa_sha256"), + ("xmlSecOpenSSLTransformEcdsaSha3_224GetKlass", "has_ecdsa_sha3_224"), + ("xmlSecOpenSSLTransformEcdsaSha3_256GetKlass", "has_ecdsa_sha3_256"), + ("xmlSecOpenSSLTransformEcdsaSha3_384GetKlass", "has_ecdsa_sha3_384"), + ("xmlSecOpenSSLTransformEcdsaSha3_512GetKlass", "has_ecdsa_sha3_512"), + ("xmlSecOpenSSLTransformEcdsaSha384GetKlass", "has_ecdsa_sha384"), + ("xmlSecOpenSSLTransformEcdsaSha512GetKlass", "has_ecdsa_sha512"), + ("xmlSecOpenSSLTransformGost2001GostR3411_94GetKlass", "has_gost2001"), + ("xmlSecOpenSSLTransformGostR3410_2012GostR3411_2012_256GetKlass", "has_gost2012_256"), + ("xmlSecOpenSSLTransformGostR3410_2012GostR3411_2012_512GetKlass", "has_gost2012_512"), + ("xmlSecOpenSSLTransformGostR3411_2012_256GetKlass", "has_gost2012_256"), + ("xmlSecOpenSSLTransformGostR3411_2012_512GetKlass", "has_gost2012_512"), + ("xmlSecOpenSSLTransformGostR3411_94GetKlass", "has_gost94"), + ("xmlSecOpenSSLTransformHmacMd5GetKlass", "has_hmac_md5"), + ("xmlSecOpenSSLTransformHmacRipemd160GetKlass", "has_hmac_ripemd160"), + ("xmlSecOpenSSLTransformHmacSha1GetKlass", "has_hmac_sha1"), + ("xmlSecOpenSSLTransformHmacSha224GetKlass", "has_hmac_sha224"), + ("xmlSecOpenSSLTransformHmacSha256GetKlass", "has_hmac_sha256"), + ("xmlSecOpenSSLTransformHmacSha384GetKlass", "has_hmac_sha384"), + ("xmlSecOpenSSLTransformHmacSha512GetKlass", "has_hmac_sha512"), + ("xmlSecOpenSSLTransformKWAes128GetKlass", "has_kw_aes128"), + ("xmlSecOpenSSLTransformKWAes192GetKlass", "has_kw_aes192"), + ("xmlSecOpenSSLTransformKWAes256GetKlass", "has_kw_aes256"), + ("xmlSecOpenSSLTransformKWDes3GetKlass", "has_kw_des3"), + ("xmlSecOpenSSLTransformMd5GetKlass", "has_md5"), + ("xmlSecOpenSSLTransformPbkdf2GetKlass", "has_pbkdf2"), + ("xmlSecOpenSSLTransformRipemd160GetKlass", "has_ripemd160"), + ("xmlSecOpenSSLTransformRsaMd5GetKlass", "has_rsa_md5"), + ("xmlSecOpenSSLTransformRsaOaepEnc11GetKlass", "has_rsaoaep_enc11"), + ("xmlSecOpenSSLTransformRsaOaepGetKlass", "has_rsa_oaep"), + ("xmlSecOpenSSLTransformRsaPkcs1GetKlass", "has_rsa_pkcs1"), + ("xmlSecOpenSSLTransformRsaPssSha1GetKlass", "has_rsapsssha1"), + ("xmlSecOpenSSLTransformRsaPssSha224GetKlass", "has_rsapsssha224"), + ("xmlSecOpenSSLTransformRsaPssSha256GetKlass", "has_rsapsssha256"), + ("xmlSecOpenSSLTransformRsaPssSha3_224GetKlass", "has_rsapsssha3_224"), + ("xmlSecOpenSSLTransformRsaPssSha3_256GetKlass", "has_rsapsssha3_256"), + ("xmlSecOpenSSLTransformRsaPssSha3_384GetKlass", "has_rsapsssha3_384"), + ("xmlSecOpenSSLTransformRsaPssSha3_512GetKlass", "has_rsapsssha3_512"), + ("xmlSecOpenSSLTransformRsaPssSha384GetKlass", "has_rsapsssha384"), + ("xmlSecOpenSSLTransformRsaPssSha512GetKlass", "has_rsapsssha512"), + ("xmlSecOpenSSLTransformRsaRipemd160GetKlass", "has_rsa_ripemd160"), + ("xmlSecOpenSSLTransformRsaSha1GetKlass", "has_rsa_sha1"), + ("xmlSecOpenSSLTransformRsaSha224GetKlass", "has_rsa_sha224"), + ("xmlSecOpenSSLTransformRsaSha256GetKlass", "has_rsa_sha256"), + ("xmlSecOpenSSLTransformRsaSha384GetKlass", "has_rsa_sha384"), + ("xmlSecOpenSSLTransformRsaSha512GetKlass", "has_rsa_sha512"), + ("xmlSecOpenSSLTransformSha1GetKlass", "has_sha1"), + ("xmlSecOpenSSLTransformSha224GetKlass", "has_sha224"), + ("xmlSecOpenSSLTransformSha256GetKlass", "has_sha256"), + ("xmlSecOpenSSLTransformSha384GetKlass", "has_sha384"), + ("xmlSecOpenSSLTransformSha512GetKlass", "has_sha512"), + ("xmlSecOpenSSLTransformSha3_224GetKlass", "has_sha3_224"), + ("xmlSecOpenSSLTransformSha3_256GetKlass", "has_sha3_256"), + ("xmlSecOpenSSLTransformSha3_384GetKlass", "has_sha3_384"), + ("xmlSecOpenSSLTransformSha3_512GetKlass", "has_sha3_512"), +]; fn main() @@ -45,8 +116,52 @@ fn main() bindings.write_to_file(path_bindings) .expect("Couldn't write bindings!"); } + + for (symbol, cfg) in TRANSFORMS { + println!("cargo:rustc-check-cfg=cfg({})", cfg); + detect_transform(symbol, cfg); + } } +/// Try to compile a tiny program referencing a symbol. +/// If it succeeds, emit a `cfg` flag like `has_aes128`. +fn detect_transform(symbol: &str, cfg_name: &str) { + let code = format!( + "#include \n\ + int main() {{ (void){}(); return 0; }}", + symbol + ); + + let out_dir = PathBuf::from(env::var("OUT_DIR").unwrap()); + let src_file = out_dir.join(format!("probe_{cfg}.c", cfg = cfg_name)); + std::fs::write(&src_file, code).unwrap(); + + let exe_file = out_dir.join(format!("probe_{cfg}", cfg = cfg_name)); + + let mut cmd = cc::Build::new().get_compiler().to_command(); + cmd.arg(&src_file).arg("-o").arg(&exe_file); + + // add cflags + for flag in fetch_xmlsec_config_flags() { + cmd.arg(flag); + } + // add libs + for lib in fetch_xmlsec_config_libs() { + cmd.arg(lib); + } + + match cmd.status() { + Ok(status) if status.success() => { + println!("cargo:rustc-cfg={}", cfg_name); + } + Ok(_) => { + println!("cargo:warning=Probe for {} failed", cfg_name); + } + Err(e) => { + println!("cargo:warning=Probe for {} failed to run: {}", cfg_name, e); + } + } +} fn fetch_xmlsec_config_flags() -> Vec { diff --git a/src/crypto/openssl.rs b/src/crypto/openssl.rs index 041aae0..6bcdadc 100644 --- a/src/crypto/openssl.rs +++ b/src/crypto/openssl.rs @@ -6,100 +6,150 @@ use crate::bindings; /// Supported digesting and signing methods as specified by the XML standard. #[allow(missing_docs)] -pub enum XmlSecSignatureMethod -{ - Aes128Cbc, - Aes192Cbc, - Aes256Cbc, - // Aes128Gcm, - // Aes192Gcm, - // Aes256Gcm, - KWAes128, - KWAes192, - KWAes256, - Des3Cbc, - KWDes3, - DsaSha1, - DsaSha256, - EcdsaSha1, - EcdsaSha224, - EcdsaSha256, - EcdsaSha384, - EcdsaSha512, - HmacMd5, - HmacRipemd160, - HmacSha1, - HmacSha224, - HmacSha256, - HmacSha384, - HmacSha512, - Md5, - Ripemd160, - RsaMd5, - RsaRipemd160, - RsaSha1, - RsaSha224, - RsaSha256, - RsaSha384, - RsaSha512, - RsaPkcs1, - RsaOaep, - Sha1, - Sha224, - Sha256, - Sha384, - Sha512, +pub enum XmlSecSignatureMethod { + #[cfg(has_aes128_cbc)] Aes128Cbc, + #[cfg(has_aes128_gcm)] Aes128Gcm, + #[cfg(has_aes192_cbc)] Aes192Cbc, + #[cfg(has_aes192_gcm)] Aes192Gcm, + #[cfg(has_aes256_cbc)] Aes256Cbc, + #[cfg(has_aes256_gcm)] Aes256Gcm, + #[cfg(has_concatkdf)] ConcatKdf, + #[cfg(has_des3_cbc)] Des3Cbc, + #[cfg(has_dhes)] DhEs, + #[cfg(has_dsa_sha1)] DsaSha1, + #[cfg(has_dsa_sha256)] DsaSha256, + #[cfg(has_ecdh)] Ecdh, + #[cfg(has_ecdsa_ripemd160)] EcdsaRipemd160, + #[cfg(has_ecdsa_sha1)] EcdsaSha1, + #[cfg(has_ecdsa_sha224)] EcdsaSha224, + #[cfg(has_ecdsa_sha256)] EcdsaSha256, + #[cfg(has_ecdsa_sha3_224)] EcdsaSha3_224, + #[cfg(has_ecdsa_sha3_256)] EcdsaSha3_256, + #[cfg(has_ecdsa_sha3_384)] EcdsaSha3_384, + #[cfg(has_ecdsa_sha3_512)] EcdsaSha3_512, + #[cfg(has_ecdsa_sha384)] EcdsaSha384, + #[cfg(has_ecdsa_sha512)] EcdsaSha512, + #[cfg(has_gost2001)] Gost2001, + #[cfg(has_gost2012_256)] Gost2012_256, + #[cfg(has_gost2012_512)] Gost2012_512, + #[cfg(has_gost94)] Gost94, + #[cfg(has_hmac_md5)] HmacMd5, + #[cfg(has_hmac_ripemd160)] HmacRipemd160, + #[cfg(has_hmac_sha1)] HmacSha1, + #[cfg(has_hmac_sha224)] HmacSha224, + #[cfg(has_hmac_sha256)] HmacSha256, + #[cfg(has_hmac_sha384)] HmacSha384, + #[cfg(has_hmac_sha512)] HmacSha512, + #[cfg(has_kw_aes128)] KWAes128, + #[cfg(has_kw_aes192)] KWAes192, + #[cfg(has_kw_aes256)] KWAes256, + #[cfg(has_kw_des3)] KWDes3, + #[cfg(has_md5)] Md5, + #[cfg(has_pbkdf2)] Pbkdf2, + #[cfg(has_ripemd160)] Ripemd160, + #[cfg(has_rsa_md5)] RsaMd5, + #[cfg(has_rsaoaep_enc11)] RsaOaepEnc11, + #[cfg(has_rsa_oaep)] RsaOaep, + #[cfg(has_rsa_pkcs1)] RsaPkcs1, + #[cfg(has_rsapsssha1)] RsaPssSha1, + #[cfg(has_rsapsssha224)] RsaPssSha224, + #[cfg(has_rsapsssha256)] RsaPssSha256, + #[cfg(has_rsapsssha3_224)] RsaPssSha3_224, + #[cfg(has_rsapsssha3_256)] RsaPssSha3_256, + #[cfg(has_rsapsssha3_384)] RsaPssSha3_384, + #[cfg(has_rsapsssha3_512)] RsaPssSha3_512, + #[cfg(has_rsapsssha384)] RsaPssSha384, + #[cfg(has_rsapsssha512)] RsaPssSha512, + #[cfg(has_rsa_ripemd160)] RsaRipemd160, + #[cfg(has_rsa_sha1)] RsaSha1, + #[cfg(has_rsa_sha224)] RsaSha224, + #[cfg(has_rsa_sha256)] RsaSha256, + #[cfg(has_rsa_sha384)] RsaSha384, + #[cfg(has_rsa_sha512)] RsaSha512, + #[cfg(has_sha1)] Sha1, + #[cfg(has_sha224)] Sha224, + #[cfg(has_sha256)] Sha256, + #[cfg(has_sha384)] Sha384, + #[cfg(has_sha512)] Sha512, + #[cfg(has_sha3_224)] Sha3_224, + #[cfg(has_sha3_256)] Sha3_256, + #[cfg(has_sha3_384)] Sha3_384, + #[cfg(has_sha3_512)] Sha3_512, } - -impl XmlSecSignatureMethod -{ +impl XmlSecSignatureMethod { /// Returns the resource pointer for the corresponding digesting/signing resource - pub fn to_method(&self) -> bindings::xmlSecTransformId - { - match self - { - Self::Aes128Cbc => unsafe { bindings::xmlSecOpenSSLTransformAes128CbcGetKlass() }, - Self::Aes192Cbc => unsafe { bindings::xmlSecOpenSSLTransformAes192CbcGetKlass() }, - Self::Aes256Cbc => unsafe { bindings::xmlSecOpenSSLTransformAes256CbcGetKlass() }, - // Self::Aes128Gcm => unsafe { bindings::xmlSecOpenSSLTransformAes128GcmGetKlass() }, - // Self::Aes192Gcm => unsafe { bindings::xmlSecOpenSSLTransformAes192GcmGetKlass() }, - // Self::Aes256Gcm => unsafe { bindings::xmlSecOpenSSLTransformAes256GcmGetKlass() }, - Self::KWAes128 => unsafe { bindings::xmlSecOpenSSLTransformKWAes128GetKlass() }, - Self::KWAes192 => unsafe { bindings::xmlSecOpenSSLTransformKWAes192GetKlass() }, - Self::KWAes256 => unsafe { bindings::xmlSecOpenSSLTransformKWAes256GetKlass() }, - Self::Des3Cbc => unsafe { bindings::xmlSecOpenSSLTransformDes3CbcGetKlass() }, - Self::KWDes3 => unsafe { bindings::xmlSecOpenSSLTransformKWDes3GetKlass() }, - Self::DsaSha1 => unsafe { bindings::xmlSecOpenSSLTransformDsaSha1GetKlass() }, - Self::DsaSha256 => unsafe { bindings::xmlSecOpenSSLTransformDsaSha256GetKlass() }, - Self::EcdsaSha1 => unsafe { bindings::xmlSecOpenSSLTransformEcdsaSha1GetKlass() }, - Self::EcdsaSha224 => unsafe { bindings::xmlSecOpenSSLTransformEcdsaSha224GetKlass() }, - Self::EcdsaSha256 => unsafe { bindings::xmlSecOpenSSLTransformEcdsaSha256GetKlass() }, - Self::EcdsaSha384 => unsafe { bindings::xmlSecOpenSSLTransformEcdsaSha384GetKlass() }, - Self::EcdsaSha512 => unsafe { bindings::xmlSecOpenSSLTransformEcdsaSha512GetKlass() }, - Self::HmacMd5 => unsafe { bindings::xmlSecOpenSSLTransformHmacMd5GetKlass() }, - Self::HmacRipemd160 => unsafe { bindings::xmlSecOpenSSLTransformHmacRipemd160GetKlass() }, - Self::HmacSha1 => unsafe { bindings::xmlSecOpenSSLTransformHmacSha1GetKlass() }, - Self::HmacSha224 => unsafe { bindings::xmlSecOpenSSLTransformHmacSha224GetKlass() }, - Self::HmacSha256 => unsafe { bindings::xmlSecOpenSSLTransformHmacSha256GetKlass() }, - Self::HmacSha384 => unsafe { bindings::xmlSecOpenSSLTransformHmacSha384GetKlass() }, - Self::HmacSha512 => unsafe { bindings::xmlSecOpenSSLTransformHmacSha512GetKlass() }, - Self::Md5 => unsafe { bindings::xmlSecOpenSSLTransformMd5GetKlass() }, - Self::Ripemd160 => unsafe { bindings::xmlSecOpenSSLTransformRipemd160GetKlass() }, - Self::RsaMd5 => unsafe { bindings::xmlSecOpenSSLTransformRsaMd5GetKlass() }, - Self::RsaRipemd160 => unsafe { bindings::xmlSecOpenSSLTransformRsaRipemd160GetKlass() }, - Self::RsaSha1 => unsafe { bindings::xmlSecOpenSSLTransformRsaSha1GetKlass() }, - Self::RsaSha224 => unsafe { bindings::xmlSecOpenSSLTransformRsaSha224GetKlass() }, - Self::RsaSha256 => unsafe { bindings::xmlSecOpenSSLTransformRsaSha256GetKlass() }, - Self::RsaSha384 => unsafe { bindings::xmlSecOpenSSLTransformRsaSha384GetKlass() }, - Self::RsaSha512 => unsafe { bindings::xmlSecOpenSSLTransformRsaSha512GetKlass() }, - Self::RsaPkcs1 => unsafe { bindings::xmlSecOpenSSLTransformRsaPkcs1GetKlass() }, - Self::RsaOaep => unsafe { bindings::xmlSecOpenSSLTransformRsaOaepGetKlass() }, - Self::Sha1 => unsafe { bindings::xmlSecOpenSSLTransformSha1GetKlass() }, - Self::Sha224 => unsafe { bindings::xmlSecOpenSSLTransformSha224GetKlass() }, - Self::Sha256 => unsafe { bindings::xmlSecOpenSSLTransformSha256GetKlass() }, - Self::Sha384 => unsafe { bindings::xmlSecOpenSSLTransformSha384GetKlass() }, - Self::Sha512 => unsafe { bindings::xmlSecOpenSSLTransformSha512GetKlass() }, + pub fn to_method(&self) -> bindings::xmlSecTransformId { + match self { + #[cfg(has_aes128_cbc)] Self::Aes128Cbc => unsafe { bindings::xmlSecOpenSSLTransformAes128CbcGetKlass() }, + #[cfg(has_aes128_gcm)] Self::Aes128Gcm => unsafe { bindings::xmlSecOpenSSLTransformAes128GcmGetKlass() }, + #[cfg(has_aes192_cbc)] Self::Aes192Cbc => unsafe { bindings::xmlSecOpenSSLTransformAes192CbcGetKlass() }, + #[cfg(has_aes192_gcm)] Self::Aes192Gcm => unsafe { bindings::xmlSecOpenSSLTransformAes192GcmGetKlass() }, + #[cfg(has_aes256_cbc)] Self::Aes256Cbc => unsafe { bindings::xmlSecOpenSSLTransformAes256CbcGetKlass() }, + #[cfg(has_aes256_gcm)] Self::Aes256Gcm => unsafe { bindings::xmlSecOpenSSLTransformAes256GcmGetKlass() }, + #[cfg(has_concatkdf)] Self::ConcatKdf => unsafe { bindings::xmlSecOpenSSLTransformConcatKdfGetKlass() }, + #[cfg(has_des3_cbc)] Self::Des3Cbc => unsafe { bindings::xmlSecOpenSSLTransformDes3CbcGetKlass() }, + #[cfg(has_dhes)] Self::DhEs => unsafe { bindings::xmlSecOpenSSLTransformDhEsGetKlass() }, + #[cfg(has_dsa_sha1)] Self::DsaSha1 => unsafe { bindings::xmlSecOpenSSLTransformDsaSha1GetKlass() }, + #[cfg(has_dsa_sha256)] Self::DsaSha256 => unsafe { bindings::xmlSecOpenSSLTransformDsaSha256GetKlass() }, + #[cfg(has_ecdh)] Self::Ecdh => unsafe { bindings::xmlSecOpenSSLTransformEcdhGetKlass() }, + #[cfg(has_ecdsa_ripemd160)] Self::EcdsaRipemd160 => unsafe { bindings::xmlSecOpenSSLTransformEcdsaRipemd160GetKlass() }, + #[cfg(has_ecdsa_sha1)] Self::EcdsaSha1 => unsafe { bindings::xmlSecOpenSSLTransformEcdsaSha1GetKlass() }, + #[cfg(has_ecdsa_sha224)] Self::EcdsaSha224 => unsafe { bindings::xmlSecOpenSSLTransformEcdsaSha224GetKlass() }, + #[cfg(has_ecdsa_sha256)] Self::EcdsaSha256 => unsafe { bindings::xmlSecOpenSSLTransformEcdsaSha256GetKlass() }, + #[cfg(has_ecdsa_sha3_224)] Self::EcdsaSha3_224 => unsafe { bindings::xmlSecOpenSSLTransformEcdsaSha3_224GetKlass() }, + #[cfg(has_ecdsa_sha3_256)] Self::EcdsaSha3_256 => unsafe { bindings::xmlSecOpenSSLTransformEcdsaSha3_256GetKlass() }, + #[cfg(has_ecdsa_sha3_384)] Self::EcdsaSha3_384 => unsafe { bindings::xmlSecOpenSSLTransformEcdsaSha3_384GetKlass() }, + #[cfg(has_ecdsa_sha3_512)] Self::EcdsaSha3_512 => unsafe { bindings::xmlSecOpenSSLTransformEcdsaSha3_512GetKlass() }, + #[cfg(has_ecdsa_sha384)] Self::EcdsaSha384 => unsafe { bindings::xmlSecOpenSSLTransformEcdsaSha384GetKlass() }, + #[cfg(has_ecdsa_sha512)] Self::EcdsaSha512 => unsafe { bindings::xmlSecOpenSSLTransformEcdsaSha512GetKlass() }, + #[cfg(has_gost2001)] Self::Gost2001 => unsafe { bindings::xmlSecOpenSSLTransformGost2001GostR3411_94GetKlass() }, + #[cfg(has_gost2012_256)] Self::Gost2012_256 => unsafe { bindings::xmlSecOpenSSLTransformGostR3410_2012GostR3411_2012_256GetKlass() }, + #[cfg(has_gost2012_512)] Self::Gost2012_512 => unsafe { bindings::xmlSecOpenSSLTransformGostR3410_2012GostR3411_2012_512GetKlass() }, + #[cfg(has_gost94)] Self::Gost94 => unsafe { bindings::xmlSecOpenSSLTransformGostR3411_94GetKlass() }, + #[cfg(has_hmac_md5)] Self::HmacMd5 => unsafe { bindings::xmlSecOpenSSLTransformHmacMd5GetKlass() }, + #[cfg(has_hmac_ripemd160)] Self::HmacRipemd160 => unsafe { bindings::xmlSecOpenSSLTransformHmacRipemd160GetKlass() }, + #[cfg(has_hmac_sha1)] Self::HmacSha1 => unsafe { bindings::xmlSecOpenSSLTransformHmacSha1GetKlass() }, + #[cfg(has_hmac_sha224)] Self::HmacSha224 => unsafe { bindings::xmlSecOpenSSLTransformHmacSha224GetKlass() }, + #[cfg(has_hmac_sha256)] Self::HmacSha256 => unsafe { bindings::xmlSecOpenSSLTransformHmacSha256GetKlass() }, + #[cfg(has_hmac_sha384)] Self::HmacSha384 => unsafe { bindings::xmlSecOpenSSLTransformHmacSha384GetKlass() }, + #[cfg(has_hmac_sha512)] Self::HmacSha512 => unsafe { bindings::xmlSecOpenSSLTransformHmacSha512GetKlass() }, + #[cfg(has_kw_aes128)] Self::KWAes128 => unsafe { bindings::xmlSecOpenSSLTransformKWAes128GetKlass() }, + #[cfg(has_kw_aes192)] Self::KWAes192 => unsafe { bindings::xmlSecOpenSSLTransformKWAes192GetKlass() }, + #[cfg(has_kw_aes256)] Self::KWAes256 => unsafe { bindings::xmlSecOpenSSLTransformKWAes256GetKlass() }, + #[cfg(has_kw_des3)] Self::KWDes3 => unsafe { bindings::xmlSecOpenSSLTransformKWDes3GetKlass() }, + #[cfg(has_md5)] Self::Md5 => unsafe { bindings::xmlSecOpenSSLTransformMd5GetKlass() }, + #[cfg(has_pbkdf2)] Self::Pbkdf2 => unsafe { bindings::xmlSecOpenSSLTransformPbkdf2GetKlass() }, + #[cfg(has_ripemd160)] Self::Ripemd160 => unsafe { bindings::xmlSecOpenSSLTransformRipemd160GetKlass() }, + #[cfg(has_rsa_md5)] Self::RsaMd5 => unsafe { bindings::xmlSecOpenSSLTransformRsaMd5GetKlass() }, + #[cfg(has_rsaoaep_enc11)] Self::RsaOaepEnc11 => unsafe { bindings::xmlSecOpenSSLTransformRsaOaepEnc11GetKlass() }, + #[cfg(has_rsa_oaep)] Self::RsaOaep => unsafe { bindings::xmlSecOpenSSLTransformRsaOaepGetKlass() }, + #[cfg(has_rsa_pkcs1)] Self::RsaPkcs1 => unsafe { bindings::xmlSecOpenSSLTransformRsaPkcs1GetKlass() }, + #[cfg(has_rsapsssha1)] Self::RsaPssSha1 => unsafe { bindings::xmlSecOpenSSLTransformRsaPssSha1GetKlass() }, + #[cfg(has_rsapsssha224)] Self::RsaPssSha224 => unsafe { bindings::xmlSecOpenSSLTransformRsaPssSha224GetKlass() }, + #[cfg(has_rsapsssha256)] Self::RsaPssSha256 => unsafe { bindings::xmlSecOpenSSLTransformRsaPssSha256GetKlass() }, + #[cfg(has_rsapsssha3_224)] Self::RsaPssSha3_224 => unsafe { bindings::xmlSecOpenSSLTransformRsaPssSha3_224GetKlass() }, + #[cfg(has_rsapsssha3_256)] Self::RsaPssSha3_256 => unsafe { bindings::xmlSecOpenSSLTransformRsaPssSha3_256GetKlass() }, + #[cfg(has_rsapsssha3_384)] Self::RsaPssSha3_384 => unsafe { bindings::xmlSecOpenSSLTransformRsaPssSha3_384GetKlass() }, + #[cfg(has_rsapsssha3_512)] Self::RsaPssSha3_512 => unsafe { bindings::xmlSecOpenSSLTransformRsaPssSha3_512GetKlass() }, + #[cfg(has_rsapsssha384)] Self::RsaPssSha384 => unsafe { bindings::xmlSecOpenSSLTransformRsaPssSha384GetKlass() }, + #[cfg(has_rsapsssha512)] Self::RsaPssSha512 => unsafe { bindings::xmlSecOpenSSLTransformRsaPssSha512GetKlass() }, + #[cfg(has_rsa_ripemd160)] Self::RsaRipemd160 => unsafe { bindings::xmlSecOpenSSLTransformRsaRipemd160GetKlass() }, + #[cfg(has_rsa_sha1)] Self::RsaSha1 => unsafe { bindings::xmlSecOpenSSLTransformRsaSha1GetKlass() }, + #[cfg(has_rsa_sha224)] Self::RsaSha224 => unsafe { bindings::xmlSecOpenSSLTransformRsaSha224GetKlass() }, + #[cfg(has_rsa_sha256)] Self::RsaSha256 => unsafe { bindings::xmlSecOpenSSLTransformRsaSha256GetKlass() }, + #[cfg(has_rsa_sha384)] Self::RsaSha384 => unsafe { bindings::xmlSecOpenSSLTransformRsaSha384GetKlass() }, + #[cfg(has_rsa_sha512)] Self::RsaSha512 => unsafe { bindings::xmlSecOpenSSLTransformRsaSha512GetKlass() }, + #[cfg(has_sha1)] Self::Sha1 => unsafe { bindings::xmlSecOpenSSLTransformSha1GetKlass() }, + #[cfg(has_sha224)] Self::Sha224 => unsafe { bindings::xmlSecOpenSSLTransformSha224GetKlass() }, + #[cfg(has_sha256)] Self::Sha256 => unsafe { bindings::xmlSecOpenSSLTransformSha256GetKlass() }, + #[cfg(has_sha384)] Self::Sha384 => unsafe { bindings::xmlSecOpenSSLTransformSha384GetKlass() }, + #[cfg(has_sha512)] Self::Sha512 => unsafe { bindings::xmlSecOpenSSLTransformSha512GetKlass() }, + #[cfg(has_sha3_224)] Self::Sha3_224 => unsafe { bindings::xmlSecOpenSSLTransformSha3_224GetKlass() }, + #[cfg(has_sha3_256)] Self::Sha3_256 => unsafe { bindings::xmlSecOpenSSLTransformSha3_256GetKlass() }, + #[cfg(has_sha3_384)] Self::Sha3_384 => unsafe { bindings::xmlSecOpenSSLTransformSha3_384GetKlass() }, + #[cfg(has_sha3_512)] Self::Sha3_512 => unsafe { bindings::xmlSecOpenSSLTransformSha3_512GetKlass() }, + _ => panic!("This signature method is not available in your xmlsec build."), } } -} +} \ No newline at end of file