Skip to content

Commit 1151977

Browse files
committed
fix: polkadot ed25519 and ecdsa signatures support
1 parent 01d9dcc commit 1151977

File tree

2 files changed

+28
-8
lines changed

2 files changed

+28
-8
lines changed

vesting-backend/src/main.rs

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -295,12 +295,14 @@ pub async fn submit_signature(signature_params: web::Json<SignatureParams>) -> i
295295
return HttpResponse::Ok().body(serde_json::to_string(&ret).unwrap());
296296
}
297297
} else if post_params.network == 2 {
298-
let result = verify::verify_polkadot_signature(
299-
post_params.message_bytes.unwrap().as_slice(),
300-
post_params.signatures_bytes.unwrap().as_slice(),
301-
&post_params.pubkey,
302-
);
303-
if result {
298+
let msg = post_params.message_bytes.as_deref().unwrap_or_default();
299+
let sig = post_params.signatures_bytes.as_deref().unwrap_or_default();
300+
301+
let result = verify::verify_polkadot_signature(msg, sig, &post_params.pubkey);
302+
let result_ed = verify::verify_polkadot_signature_ed25519(msg, sig, &post_params.pubkey);
303+
let result_ec = verify::verify_polkadot_signature_ecdsa(msg, sig, &post_params.pubkey);
304+
305+
if result || result_ed || result_ec {
304306
let mut dropped_item = DroppedItem {
305307
address: post_params.pubkey.clone(),
306308
solana_address: post_params.message.clone(),

vesting-backend/src/verify.rs

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@ use ethers::{
44
signers::{LocalWallet, Signer},
55
types::{Signature, SignatureError, TransactionRequest},
66
};
7-
use serde::Serialize;
8-
use sp_core::H160;
7+
use serde::{Deserialize, Serialize};
8+
use sp_core::{crypto::Ss58Codec, H160};
99

1010
use sp_core::{
1111
crypto::{Pair, Public},
@@ -96,6 +96,24 @@ pub fn verify_polkadot_signature_ed25519(
9696
// Verify the signature
9797
signature.verify(message, &public_key)
9898
}
99+
pub fn verify_polkadot_signature_ecdsa(message: &[u8], signature: &[u8], public_key: &str) -> bool {
100+
// Convert the signature from bytes to the correct type
101+
let signature = EcdsaSignature::from_slice(signature);
102+
if signature.is_none() {
103+
return false;
104+
}
105+
let signature = signature.unwrap();
106+
107+
// Convert the public key from bytes to the correct type
108+
let public_key = EcdsaPublic::from_ss58check(public_key);
109+
if public_key.is_err() {
110+
return false;
111+
}
112+
let public_key = public_key.unwrap();
113+
114+
// Verify the signature
115+
signature.verify(message, &public_key)
116+
}
99117

100118
pub fn cosmos_verify_keplr_sign(
101119
cosmos_address_with_prefix: String,

0 commit comments

Comments
 (0)