From c41a6e9b1bdc2f60b80519ab5b3fbb9f0eb46acb Mon Sep 17 00:00:00 2001 From: ChrisCho-H Date: Sat, 12 Oct 2024 12:37:04 +0900 Subject: [PATCH] feat: add sign fn for sign_message --- bitcoin/src/sign_message.rs | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/bitcoin/src/sign_message.rs b/bitcoin/src/sign_message.rs index 5f2f183db..dc2e6db34 100644 --- a/bitcoin/src/sign_message.rs +++ b/bitcoin/src/sign_message.rs @@ -6,6 +6,7 @@ //! library is used with the `secp-recovery` feature. use hashes::{sha256d, HashEngine}; +use secp256k1::SecretKey; use crate::consensus::encode::WriteExt; @@ -214,6 +215,19 @@ pub fn signed_msg_hash(msg: impl AsRef<[u8]>) -> sha256d::Hash { sha256d::Hash::from_engine(engine) } +/// Sign message using Bitcoin's message signing format. +#[cfg(feature = "secp-recovery")] +pub fn sign( + secp_ctx: &secp256k1::Secp256k1, + msg: impl AsRef<[u8]>, + privkey: SecretKey, +) -> MessageSignature { + let msg_hash = signed_msg_hash(msg); + let msg_to_sign = secp256k1::Message::from_digest(msg_hash.to_byte_array()); + let secp_sig = secp_ctx.sign_ecdsa_recoverable(&msg_to_sign, &privkey); + MessageSignature { signature: secp_sig, compressed: true } +} + #[cfg(test)] mod tests { use super::*;