pub(super) mod alg_cache;
pub mod cms;
pub mod composite;
#[cfg(all(feature = "pqc", ossl_mlkem))]
pub mod composite_kem;
pub mod key_transport;
pub mod pkcs12;
pub mod private_key;
pub mod signature;
pub mod store;
pub mod symmetric;
#[derive(Debug)]
pub struct OpensslKeyError(pub(crate) String);
impl std::fmt::Display for OpensslKeyError {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
f.write_str(&self.0)
}
}
impl std::error::Error for OpensslKeyError {}
impl From<native_ossl::error::ErrorStack> for OpensslKeyError {
fn from(e: native_ossl::error::ErrorStack) -> Self {
OpensslKeyError(e.to_string())
}
}
pub use cms::{OpensslDecryptor, OpensslDecryptorError, OpensslEncryptor, OpensslEncryptorError};
pub use key_transport::{
create_enveloped_data, prepare_enveloped_data, OpensslEnvelopedDataDecryptor,
OpensslRsaOaepDecryptor, OpensslRsaOaepEncryptor, OpensslRsaPkcs1Decryptor,
OpensslRsaPkcs1Encryptor,
};
pub use pkcs12::{OpensslPkcs12Encryptor, Pkcs12Cipher, Pkcs12Config, Pkcs12HmacAlgorithm};
pub use private_key::{OpensslKeyIdHasher, OpensslKeyIdHasherError, OpensslPrivateKey};
pub(crate) use signature::verify_with_cached_pkey;
pub use signature::{
OpensslCertificateSigner, OpensslCertificateSignerError, OpensslSignatureVerifier,
OpensslVerifierError,
};
pub use symmetric::{OpensslSymmetricCrypto, OpensslSymmetricError};
pub(crate) use composite::{composite_mldsa_signer_from_pkcs8, priv_generate_composite_mldsa};
#[cfg(all(feature = "pqc", ossl_mlkem))]
pub(crate) use composite_kem::{
composite_kem_decapsulate_from_pkcs8, composite_kem_encapsulate_from_spki,
priv_generate_composite_kem,
};
#[cfg(not(all(feature = "pqc", ossl_mlkem)))]
pub(crate) fn priv_generate_composite_kem(
sub_arc: u32,
) -> Result<crate::crypto::BackendPrivateKey, OpensslKeyError> {
let _ = sub_arc;
Err(OpensslKeyError(
"composite ML-KEM key generation requires OpenSSL 3.2+ with ML-KEM support \
and the 'pqc' feature"
.to_string(),
))
}
#[cfg(not(all(feature = "pqc", ossl_mlkem)))]
pub(crate) fn composite_kem_encapsulate_from_spki(
_spki_der: &[u8],
_spec: &'static crate::crypto::composite_kem::CompositeKemSpec,
) -> Result<(Vec<u8>, Vec<u8>), OpensslKeyError> {
Err(OpensslKeyError(
"composite ML-KEM encapsulation requires OpenSSL 3.2+ with ML-KEM support \
and the 'pqc' feature"
.to_string(),
))
}
#[cfg(not(all(feature = "pqc", ossl_mlkem)))]
pub(crate) fn composite_kem_decapsulate_from_pkcs8(
_pkcs8_der: &[u8],
_ciphertext: &[u8],
_spec: &'static crate::crypto::composite_kem::CompositeKemSpec,
) -> Result<Vec<u8>, OpensslKeyError> {
Err(OpensslKeyError(
"composite ML-KEM decapsulation requires OpenSSL 3.2+ with ML-KEM support \
and the 'pqc' feature"
.to_string(),
))
}
pub(crate) use private_key::{
generate_private_key, openssl_key_id_hasher, openssl_signature_verifier,
};
pub(crate) use store::priv_load_from_pkcs11_uri;
pub(crate) use symmetric::{
openssl_data_hasher, openssl_hmac_provider, openssl_streaming_hasher,
openssl_streaming_hmac_provider, openssl_symmetric_crypto, parse_private_key, parse_public_key,
parse_public_key_from_pem, priv_ec_from_components, priv_from_pkcs8_encrypted_to_pkey_and_der,
priv_generate_ec, priv_generate_ed25519, priv_generate_ed448, priv_generate_ml_dsa,
priv_generate_ml_kem, priv_generate_rsa, priv_key_bit_size, priv_key_type,
priv_ml_kem_decapsulate, priv_pem_to_pkey_and_pkcs8, priv_pkcs8_der_to_pem,
priv_public_key_spki_der, priv_rsa_from_components, priv_rsa_oaep_decrypt,
priv_rsa_pkcs1v15_decrypt, priv_sign_ml_dsa_with_context, priv_to_pkcs8_encrypted,
pub_ec_affine_coordinates, pub_ec_curve_name, pub_ec_from_components, pub_key_bit_size,
pub_key_type, pub_ml_kem_encapsulate, pub_rsa_from_components, pub_rsa_modulus,
pub_rsa_oaep_encrypt, pub_rsa_pkcs1v15_encrypt, pub_rsa_public_exponent, pub_verify_message,
pub_verify_ml_dsa_with_context, EcAffineCoords,
};