tasign 0.2.3

TA ELF signing utilities with CMS/PKCS#7 support
Documentation
//! SM2 byte-level primitives via `tee_crypto`.

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)
}