use bitcoin_hashes::{sha256, Hash};
use secp256k1::Message;
#[derive(Debug, Clone)]
pub struct Signable {
message: Message,
}
impl Signable {
pub fn new(message: &[u8]) -> Result<Self, String> {
Ok(Self {
message: digest_to_message(message)?,
})
}
pub fn from_str(str: &str) -> Result<Self, String> {
Ok(Signable {
message: digest_str(str)?,
})
}
pub fn from_bytes(bytes: &[u8]) -> Result<Self, String> {
Ok(Signable {
message: digest_bytes(bytes)?,
})
}
pub fn to_signable_message(&self) -> Message {
self.message
}
}
pub fn digest_str(message: &str) -> Result<Message, String> {
let hash = sha256::Hash::hash(message.as_bytes());
digest_to_message(hash.as_byte_array())
}
pub fn digest_bytes(message: &[u8]) -> Result<Message, String> {
let hash = sha256::Hash::hash(message);
digest_to_message(hash.as_byte_array())
}
pub fn digest_to_message(digest: &[u8]) -> Result<Message, String> {
match Message::from_slice(digest) {
Ok(message) => Ok(message),
Err(e) => Err(e.to_string()),
}
}