extern crate alloc;
#[cfg(feature = "std")]
use alloc::vec::Vec;
#[cfg(feature = "std")]
use super::map::TasignRngAdapter;
#[cfg(feature = "std")]
use super::rng::CryptoRng;
use super::map::map_tee_err;
use crate::crypto::CryptoError;
#[cfg(feature = "std")]
pub fn sm2_sign_message(
secret_key: &[u8],
msg: &[u8],
rng: &mut dyn CryptoRng,
) -> Result<Vec<u8>, CryptoError> {
let mut adapter = TasignRngAdapter(rng);
tee_crypto::sm2::sm2_sign_message(secret_key, msg, &mut adapter).map_err(map_tee_err)
}
pub fn sm2_verify_message_sec1(
public_key_sec1: &[u8],
msg: &[u8],
signature: &[u8],
) -> Result<(), CryptoError> {
tee_crypto::sm2::sm2_verify_message_sec1(public_key_sec1, msg, signature).map_err(map_tee_err)
}
#[cfg(feature = "std")]
pub fn sm2_sign_digest(
secret_key: &[u8],
digest: &[u8; 32],
rng: &mut dyn CryptoRng,
) -> Result<Vec<u8>, CryptoError> {
let mut adapter = TasignRngAdapter(rng);
tee_crypto::sm2::sm2_sign_digest(secret_key, digest, &mut adapter).map_err(map_tee_err)
}
#[cfg(feature = "interop-bytes")]
pub fn sm2_verify_digest_sec1(
public_key_sec1: &[u8],
digest: &[u8; 32],
signature: &[u8],
) -> Result<(), CryptoError> {
tee_crypto::sm2::sm2_verify_digest_sec1(public_key_sec1, digest, signature).map_err(map_tee_err)
}
#[cfg(feature = "std")]
pub(crate) fn signing_scalar_from_pkcs8_der(der: &[u8]) -> Result<[u8; 32], CryptoError> {
tee_crypto::sm2::sm2_secret_scalar_from_pkcs8_der(der).map_err(map_tee_err)
}