#![no_std]
#![deny(unsafe_op_in_unsafe_fn)]
extern crate alloc;
pub mod error;
pub use error::WolfCryptError;
#[cfg(feature = "digest")]
pub mod digest;
#[cfg(all(feature = "digest", wolfssl_sha1))]
pub use digest::Sha1;
#[cfg(all(feature = "digest", wolfssl_sha224))]
pub use digest::Sha224;
#[cfg(all(feature = "digest", wolfssl_sha256))]
pub use digest::Sha256;
#[cfg(all(feature = "digest", wolfssl_sha384))]
pub use digest::Sha384;
#[cfg(all(feature = "digest", wolfssl_sha512))]
pub use digest::Sha512;
#[cfg(all(feature = "digest", wolfssl_sha512))]
pub use digest::Sha512_256;
#[cfg(all(feature = "digest", wolfssl_sha3))]
pub use digest::Sha3_256;
#[cfg(all(feature = "digest", wolfssl_sha3))]
pub use digest::Sha3_384;
#[cfg(all(feature = "digest", wolfssl_sha3))]
pub use digest::Sha3_512;
#[cfg(feature = "rand")]
pub mod rand;
#[cfg(feature = "rand")]
pub use rand::WolfRng;
#[cfg(feature = "hmac")]
pub mod hmac;
#[cfg(all(feature = "hmac", wolfssl_hmac))]
pub use hmac::WolfHmacSha1;
#[cfg(all(feature = "hmac", wolfssl_hmac))]
pub use hmac::WolfHmacSha256;
#[cfg(all(feature = "hmac", wolfssl_hmac, wolfssl_sha384))]
pub use hmac::WolfHmacSha384;
#[cfg(all(feature = "hmac", wolfssl_hmac, wolfssl_sha512))]
pub use hmac::WolfHmacSha512;
#[cfg(feature = "cmac")]
pub mod cmac;
#[cfg(all(feature = "cmac", wolfssl_cmac))]
pub use cmac::WolfCmacAes128;
#[cfg(all(feature = "cmac", wolfssl_cmac))]
pub use cmac::WolfCmacAes256;
#[cfg(feature = "hkdf")]
pub mod hkdf;
#[cfg(all(feature = "hkdf", wolfssl_hkdf))]
pub use hkdf::WolfHkdfSha256;
#[cfg(all(feature = "hkdf", wolfssl_hkdf, wolfssl_sha384))]
pub use hkdf::WolfHkdfSha384;
#[cfg(all(feature = "hkdf", wolfssl_hkdf, wolfssl_sha512))]
pub use hkdf::WolfHkdfSha512;
#[cfg(feature = "pbkdf2")]
pub mod pbkdf2;
#[cfg(all(feature = "pbkdf2", wolfssl_pbkdf2))]
pub use pbkdf2::pbkdf2_hmac_sha256;
#[cfg(all(feature = "pbkdf2", wolfssl_pbkdf2, wolfssl_sha384))]
pub use pbkdf2::pbkdf2_hmac_sha384;
#[cfg(all(feature = "pbkdf2", wolfssl_pbkdf2, wolfssl_sha512))]
pub use pbkdf2::pbkdf2_hmac_sha512;
#[cfg(feature = "aead")]
pub mod aead;
#[cfg(all(feature = "aead", wolfssl_aes_gcm))]
pub use aead::{Aes128Gcm, Aes256Gcm};
#[cfg(all(feature = "aead", wolfssl_aes_gcm, wolfssl_aes_192))]
pub use aead::Aes192Gcm;
#[cfg(all(feature = "aead", wolfssl_chacha20_poly1305))]
pub use aead::ChaCha20Poly1305;
#[cfg(feature = "cipher")]
pub mod cipher;
#[cfg(all(feature = "cipher", wolfssl_aes_ecb))]
pub use cipher::{Aes128EcbDec, Aes128EcbEnc, Aes256EcbDec, Aes256EcbEnc};
#[cfg(all(feature = "cipher", wolfssl_aes_ecb, wolfssl_aes_192))]
pub use cipher::{Aes192EcbDec, Aes192EcbEnc};
#[cfg(all(feature = "cipher", wolfssl_aes_ctr))]
pub use cipher::{Aes128Ctr, Aes256Ctr};
#[cfg(all(feature = "cipher", wolfssl_aes_ctr, wolfssl_aes_192))]
pub use cipher::Aes192Ctr;
#[cfg(feature = "cipher")]
pub use cipher::{Aes128CbcDec, Aes128CbcEnc, Aes256CbcDec, Aes256CbcEnc};
#[cfg(all(feature = "cipher", wolfssl_aes_192))]
pub use cipher::{Aes192CbcDec, Aes192CbcEnc};
#[cfg(all(feature = "cipher", wolfssl_chacha))]
pub use cipher::WolfChaCha20;
#[cfg(all(feature = "cipher", wolfssl_aes_cfb))]
pub use cipher::{Aes128CfbDec, Aes128CfbEnc, Aes256CfbDec, Aes256CfbEnc};
#[cfg(all(feature = "cipher", wolfssl_aes_cfb, wolfssl_aes_192))]
pub use cipher::{Aes192CfbDec, Aes192CfbEnc};
#[cfg(all(feature = "des3", wolfssl_des3))]
pub mod des3;
#[cfg(all(feature = "des3", wolfssl_des3))]
pub use des3::{DesEde3CbcDec, DesEde3CbcEnc};
#[cfg(all(feature = "dh", wolfssl_dh))]
pub mod dh;
#[cfg(all(feature = "dh", wolfssl_dh))]
pub use dh::{DhSecret, FfdheGroup};
#[cfg(feature = "poly1305")]
pub mod poly1305;
#[cfg(all(feature = "poly1305", wolfssl_poly1305))]
pub use poly1305::WolfPoly1305;
#[cfg(feature = "ed25519")]
pub mod ed25519;
#[cfg(all(feature = "ed25519", wolfssl_ed25519))]
pub use ed25519::{Ed25519SigningKey, Ed25519VerifyingKey};
#[cfg(feature = "ed448")]
pub mod ed448;
#[cfg(all(feature = "ed448", wolfssl_ed448))]
pub use ed448::{Ed448Signature, Ed448SigningKey, Ed448VerifyingKey};
#[cfg(feature = "ecdh")]
pub mod ecdh;
#[cfg(all(feature = "ecdh", wolfssl_curve25519))]
pub use ecdh::{SharedSecret, X25519PublicKey, X25519StaticSecret};
#[cfg(all(feature = "ecdh", wolfssl_curve448))]
pub use ecdh::{X448PublicKey, X448SharedSecret, X448StaticSecret};
#[cfg(all(feature = "ecdh", wolfssl_ecc))]
pub use ecdh::{
NistCurve, NistEcdhPublicKey, NistEcdhSecret, NistEcdhSharedSecret, NistP256, P256EcdhSecret,
};
#[cfg(all(feature = "ecdh", wolfssl_ecc, wolfssl_ecc_p384))]
pub use ecdh::{NistP384, P384EcdhSecret};
#[cfg(all(feature = "ecdh", wolfssl_ecc, wolfssl_ecc_p521))]
pub use ecdh::{NistP521, P521EcdhSecret};
#[cfg(all(feature = "ecdsa", wolfssl_ecc))]
#[path = "ecdsa_native.rs"]
pub mod ecdsa;
#[cfg(all(feature = "ecdsa", wolfssl_ecc))]
pub use ecdsa::{
EcdsaCurve, EcdsaSignature, EcdsaSigningKey, EcdsaVerifyingKey, P256Signature, P256SigningKey,
P256VerifyingKey, P256,
};
#[cfg(all(feature = "ecdsa", wolfssl_ecc, wolfssl_ecc_p384))]
pub use ecdsa::{P384Signature, P384SigningKey, P384VerifyingKey, P384};
#[cfg(all(feature = "ecdsa", wolfssl_ecc, wolfssl_ecc_p521, wolfssl_sha512))]
pub use ecdsa::{P521Signature, P521SigningKey, P521VerifyingKey, P521};
#[cfg(feature = "rsa")]
pub mod rsa;
#[cfg(all(feature = "rsa", wolfssl_rsa))]
pub use rsa::{RsaDigest, RsaPkcs1v15Signature, RsaPrivateKey, RsaPssSignature, RsaPublicKey};
#[cfg(all(feature = "rsa-direct", wolfssl_rsa))]
pub use rsa::{NativeRsaKey, RsaDirectType, RsaRawComponents};
#[cfg(all(feature = "keywrap", wolfssl_aes_keywrap))]
pub mod keywrap;
#[cfg(all(feature = "keywrap", wolfssl_aes_keywrap))]
pub use keywrap::{aes_unwrap_key, aes_wrap_key};
#[cfg(all(feature = "mldsa", wolfssl_dilithium))]
pub mod mldsa;
#[cfg(all(feature = "mldsa", wolfssl_dilithium))]
pub use mldsa::{
MlDsa44Signature, MlDsa44SigningKey, MlDsa44VerifyingKey, MlDsa65Signature, MlDsa65SigningKey,
MlDsa65VerifyingKey, MlDsa87Signature, MlDsa87SigningKey, MlDsa87VerifyingKey, MlDsaSignature,
};
#[cfg(feature = "mlkem")]
pub mod mlkem;
#[cfg(all(feature = "mlkem", wolfssl_mlkem))]
pub use mlkem::{
MlKem1024, MlKem1024DecapsulationKey, MlKem1024EncapsulationKey, MlKem512,
MlKem512DecapsulationKey, MlKem512EncapsulationKey, MlKem768, MlKem768DecapsulationKey,
MlKem768EncapsulationKey,
};
#[cfg(feature = "blake2")]
pub mod blake2;
#[cfg(feature = "shake")]
pub mod shake;
#[cfg(feature = "kdf")]
pub mod kdf;
#[cfg(feature = "ecc")]
pub mod ecc;
#[cfg(all(feature = "lms", wolfssl_lms))]
pub mod lms;
#[cfg(all(feature = "lms", wolfssl_lms))]
pub use lms::{LmsParams, LmsSigningKey, LmsVerifyingKey};
#[cfg(all(feature = "cipher", wolfssl_aes_ccm))]
pub use cipher::{Aes128Ccm, Aes256Ccm};
#[cfg(all(feature = "cryptocb", wolfssl_cryptocb))]
pub mod cryptocb;
#[cfg(all(feature = "hpke", wolfssl_hpke))]
pub mod hpke;