From a892fa7f92c577b583d6239c92366008fbaf5529 Mon Sep 17 00:00:00 2001
From: ashWhiteHat <phantomofrotten@gmail.com>
Date: Thu, 17 Aug 2023 17:16:42 +0900
Subject: [PATCH] Runtime: avoid duplication and test all signature (#14663)

* runtime: all signature test

* test-utils: remove std duplication

* runtime: add bls verify test
---
 substrate/primitives/runtime/src/traits.rs | 43 ++++++++++++++++++----
 substrate/test-utils/runtime/Cargo.toml    |  1 -
 2 files changed, 36 insertions(+), 8 deletions(-)

diff --git a/substrate/primitives/runtime/src/traits.rs b/substrate/primitives/runtime/src/traits.rs
index 1ff27123810..17dc7ce50ea 100644
--- a/substrate/primitives/runtime/src/traits.rs
+++ b/substrate/primitives/runtime/src/traits.rs
@@ -2299,11 +2299,27 @@ pub trait BlockNumberProvider {
 mod tests {
 	use super::*;
 	use crate::codec::{Decode, Encode, Input};
+	#[cfg(feature = "bls-experimental")]
+	use sp_core::{bls377, bls381};
 	use sp_core::{
 		crypto::{Pair, UncheckedFrom},
-		ecdsa,
+		ecdsa, ed25519, sr25519,
 	};
 
+	macro_rules! signature_verify_test {
+		($algorithm:ident) => {
+			let msg = &b"test-message"[..];
+			let wrong_msg = &b"test-msg"[..];
+			let (pair, _) = $algorithm::Pair::generate();
+
+			let signature = pair.sign(&msg);
+			assert!($algorithm::Pair::verify(&signature, msg, &pair.public()));
+
+			assert!(signature.verify(msg, &pair.public()));
+			assert!(!signature.verify(wrong_msg, &pair.public()));
+		};
+	}
+
 	mod t {
 		use sp_application_crypto::{app_crypto, sr25519};
 		use sp_core::crypto::KeyTypeId;
@@ -2413,15 +2429,28 @@ mod tests {
 		assert_eq!(buffer, [0, 0]);
 	}
 
+	#[test]
+	fn ed25519_verify_works() {
+		signature_verify_test!(ed25519);
+	}
+
+	#[test]
+	fn sr25519_verify_works() {
+		signature_verify_test!(sr25519);
+	}
+
 	#[test]
 	fn ecdsa_verify_works() {
-		let msg = &b"test-message"[..];
-		let (pair, _) = ecdsa::Pair::generate();
+		signature_verify_test!(ecdsa);
+	}
 
-		let signature = pair.sign(&msg);
-		assert!(ecdsa::Pair::verify(&signature, msg, &pair.public()));
+	#[cfg(feature = "bls-experimental")]
+	fn bls377_verify_works() {
+		signature_verify_test!(bls377)
+	}
 
-		assert!(signature.verify(msg, &pair.public()));
-		assert!(signature.verify(msg, &pair.public()));
+	#[cfg(feature = "bls-experimental")]
+	fn bls381_verify_works() {
+		signature_verify_test!(bls381)
 	}
 }
diff --git a/substrate/test-utils/runtime/Cargo.toml b/substrate/test-utils/runtime/Cargo.toml
index 320d0e07dec..43ab0da98bd 100644
--- a/substrate/test-utils/runtime/Cargo.toml
+++ b/substrate/test-utils/runtime/Cargo.toml
@@ -83,7 +83,6 @@ std = [
 	"log/std",
 	"sp-offchain/std",
 	"sp-core/std",
-	"sp-core/std",
 	"sp-std/std",
 	"sp-io/std",
 	"frame-support/std",
-- 
GitLab