use alloc::vec::Vec;
use crate::{EcdsaPublicKey, EcdsaSignature, Hash};
#[derive(scale::Encode, scale::Decode)]
#[cfg_attr(feature = "std", derive(scale_info::TypeInfo))]
pub enum SigType {
Ed25519,
Sr25519,
Ecdsa,
}
pub fn sign(message: &[u8], key: &[u8], sigtype: SigType) -> Vec<u8> {
crate::ext().sign(sigtype, key, message)
}
pub fn verify(message: &[u8], pubkey: &[u8], signature: &[u8], sigtype: SigType) -> bool {
crate::ext().verify(sigtype, pubkey, message, signature)
}
pub fn ecdsa_sign_prehashed(key: &[u8], message_hash: Hash) -> EcdsaSignature {
crate::ext().ecdsa_sign_prehashed(key, message_hash)
}
pub fn ecdsa_verify_prehashed(
signature: EcdsaSignature,
message_hash: Hash,
pubkey: EcdsaPublicKey,
) -> bool {
crate::ext().ecdsa_verify_prehashed(signature, message_hash, pubkey)
}
pub fn derive_sr25519_key(salt: &[u8]) -> Vec<u8> {
crate::ext().derive_sr25519_key(salt.into())
}
pub fn get_public_key(key: &[u8], sigtype: SigType) -> Vec<u8> {
crate::ext().get_public_key(sigtype, key)
}