use crypto_core::{Algorithm, CryptoError, SignatureOperation};
use zeroize::Zeroizing;
use crate::signature_error::crypto_error_from_operation_error;
pub use crypto_ml_dsa_44::{
decode_public_key, encode_public_key, ML_DSA_44_PUBLIC_KEY_LEN, ML_DSA_44_SECRET_SEED_LEN,
ML_DSA_44_SIGNATURE_LEN,
};
pub fn generate_ml_dsa_44_keypair() -> Result<(Vec<u8>, Zeroizing<Vec<u8>>), CryptoError> {
crate::operations::signature::generate_key_pair(Algorithm::MlDsa44)
.map(|key_pair| (key_pair.public_key, key_pair.secret_key))
.map_err(|error| {
crypto_error_from_operation_error(SignatureOperation::KeyManagement, error)
})
}
pub fn generate_ml_dsa_44_keypair_from_seed(
seed: &[u8; ML_DSA_44_SECRET_SEED_LEN],
) -> Result<(Vec<u8>, Zeroizing<Vec<u8>>), CryptoError> {
crate::operations::signature::derive_key_pair(Algorithm::MlDsa44, seed)
.map(|key_pair| (key_pair.public_key, key_pair.secret_key))
.map_err(|error| {
crypto_error_from_operation_error(SignatureOperation::KeyManagement, error)
})
}
pub fn sign_ml_dsa_44(secret_seed: &[u8], message: &[u8]) -> Result<Vec<u8>, CryptoError> {
crate::operations::signature::sign(Algorithm::MlDsa44, secret_seed, message)
.map_err(|error| crypto_error_from_operation_error(SignatureOperation::Sign, error))
}
pub fn verify_ml_dsa_44(
public_key: &[u8],
message: &[u8],
signature: &[u8],
) -> Result<(), CryptoError> {
crate::operations::signature::verify(Algorithm::MlDsa44, public_key, message, signature)
.map_err(|error| crypto_error_from_operation_error(SignatureOperation::Verify, error))
}