#![no_std]
extern crate alloc;
use taproot_assets_types::asset::SerializedKey;
use thiserror::Error;
#[derive(Error, Debug, Clone, Copy, PartialEq, Eq)]
pub enum OpsError {
#[error("invalid group key reveal raw key")]
InvalidRawGroupKey,
#[error("invalid group key reveal internal key")]
InvalidInternalKey,
#[error("asset id tweak out of range")]
AssetIdTweakOutOfRange,
#[error("invalid group key tweak")]
InvalidGroupKeyTweak,
#[error("invalid taproot output key")]
InvalidTaprootOutputKey,
}
pub trait TaprootOps {
type PubKey;
fn parse_group_key(&self, key: &SerializedKey) -> Result<Self::PubKey, OpsError>;
fn parse_internal_key(&self, key: &SerializedKey) -> Result<Self::PubKey, OpsError>;
fn add_tweak(&self, pubkey: &Self::PubKey, tweak: [u8; 32]) -> Result<Self::PubKey, OpsError>;
fn taproot_output_key(
&self,
internal_key: &Self::PubKey,
tapscript_root: Option<[u8; 32]>,
) -> Result<SerializedKey, OpsError>;
}
pub mod verify;