From 3b4492495f9247ced40a4f6b9012f2f01d63197a Mon Sep 17 00:00:00 2001 From: hashmap Date: Thu, 3 Jan 2019 13:05:23 +0100 Subject: [PATCH] Check if message in slate comes with signature (#2284) Fixes #2281 --- core/src/libtx/slate.rs | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/core/src/libtx/slate.rs b/core/src/libtx/slate.rs index bbd028f6..d1f6a23a 100644 --- a/core/src/libtx/slate.rs +++ b/core/src/libtx/slate.rs @@ -351,12 +351,22 @@ impl Slate { /// Verifies any messages in the slate's participant data match their signatures pub fn verify_messages(&self, secp: &secp::Secp256k1) -> Result<(), Error> { for p in self.participant_data.iter() { - if let Some(msg) = p.message.clone() { + if let Some(msg) = &p.message { let hashed = blake2b(secp::constants::MESSAGE_SIZE, &[], &msg.as_bytes()[..]); let m = secp::Message::from_slice(&hashed.as_bytes())?; + let signature = match p.message_sig { + None => { + error!("verify_messages - participant message doesn't have signature. Message: \"{}\"", + String::from_utf8_lossy(&msg.as_bytes()[..])); + return Err(ErrorKind::Signature( + "Optional participant messages doesn't have signature".to_owned(), + ))?; + } + Some(s) => s, + }; if !aggsig::verify_single( secp, - &p.message_sig.as_ref().unwrap(), + &signature, &m, None, &p.public_blind_excess,