diff --git a/client/beefy/src/keystore.rs b/client/beefy/src/keystore.rs
index b0259a42075ea..5d002a0e712c9 100644
--- a/client/beefy/src/keystore.rs
+++ b/client/beefy/src/keystore.rs
@@ -16,9 +16,10 @@
// You should have received a copy of the GNU General Public License
// along with this program. If not, see .
-use sp_application_crypto::RuntimeAppPublic;
+use sp_application_crypto::{RuntimeAppPublic, Wraps};
use sp_core::keccak_256;
use sp_keystore::{SyncCryptoStore, SyncCryptoStorePtr};
+use sp_runtime::traits::{CustomVerify, Identity, Keccak256};
use log::warn;
@@ -98,11 +99,11 @@ impl BeefyKeystore {
///
/// Return `true` if the signature is authentic, `false` otherwise.
pub fn verify(public: &Public, sig: &Signature, message: &[u8]) -> bool {
- let msg = keccak_256(message);
- let sig = sig.as_ref();
- let public = public.as_ref();
-
- sp_core::ecdsa::Pair::verify_prehashed(sig, &msg, public)
+ CustomVerify::::custom_verify(
+ sig.as_inner_ref(),
+ message,
+ public.as_inner_ref(),
+ )
}
}
diff --git a/frame/beefy-mmr/src/lib.rs b/frame/beefy-mmr/src/lib.rs
index 456d6e77aa8eb..43dc599f75f34 100644
--- a/frame/beefy-mmr/src/lib.rs
+++ b/frame/beefy-mmr/src/lib.rs
@@ -73,12 +73,8 @@ where
/// Convert BEEFY secp256k1 public keys into Ethereum addresses
pub struct BeefyEcdsaToEthereum;
impl Convert> for BeefyEcdsaToEthereum {
- fn convert(a: beefy_primitives::crypto::AuthorityId) -> Vec {
- sp_core::ecdsa::Public::try_from(a.as_ref())
- .map_err(|_| {
- log::error!(target: "runtime::beefy", "Invalid BEEFY PublicKey format!");
- })
- .unwrap_or(sp_core::ecdsa::Public::from_raw([0u8; 33]))
+ fn convert(beefy_id: beefy_primitives::crypto::AuthorityId) -> Vec {
+ sp_core::ecdsa::Public::from(beefy_id)
.to_eth_address()
.map(|v| v.to_vec())
.map_err(|_| {
diff --git a/primitives/core/src/crypto.rs b/primitives/core/src/crypto.rs
index 377ae480edd17..c74110b8764d9 100644
--- a/primitives/core/src/crypto.rs
+++ b/primitives/core/src/crypto.rs
@@ -987,6 +987,11 @@ pub trait IsWrappedBy: From + Into {
pub trait Wraps: Sized {
/// The inner type it is wrapping.
type Inner: IsWrappedBy;
+
+ /// Get a reference to the inner type that is wrapped.
+ fn as_inner_ref(&self) -> &Self::Inner {
+ Self::Inner::from_ref(self)
+ }
}
impl IsWrappedBy for T