Skip to content

Commit 1ac7599

Browse files
committed
Merge branch 'dev' into validator_worker-timeout-errors
2 parents 4884223 + 4ee70b7 commit 1ac7599

File tree

2 files changed

+24
-20
lines changed

2 files changed

+24
-20
lines changed

adapter/src/ethereum.rs

Lines changed: 23 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,9 @@ impl Adapter for EthereumAdapter {
115115

116116
fn sign(&self, state_root: &str) -> AdapterResult<String> {
117117
if let Some(wallet) = &self.wallet {
118-
let message = Message::from_slice(&hash_message(state_root));
118+
let state_root = hex::decode(state_root)
119+
.map_err(|_| AdapterError::Signature("invalid state_root".to_string()))?;
120+
let message = Message::from_slice(&hash_message(&state_root));
119121
let wallet_sign = wallet
120122
.sign(&self.keystore_pwd, &message)
121123
.map_err(|_| map_error("failed to sign messages"))?;
@@ -130,11 +132,16 @@ impl Adapter for EthereumAdapter {
130132
}
131133

132134
fn verify(&self, signer: &ValidatorId, state_root: &str, sig: &str) -> AdapterResult<bool> {
133-
let decoded_signature = hex::decode(sig)
135+
if !sig.starts_with("0x") {
136+
return Err(AdapterError::Signature("not 0x prefixed hex".to_string()));
137+
}
138+
let decoded_signature = hex::decode(&sig[2..])
134139
.map_err(|_| AdapterError::Signature("invalid signature".to_string()))?;
135140
let address = Address::from_slice(signer.inner());
136141
let signature = Signature::from_electrum(&decoded_signature);
137-
let message = Message::from_slice(&hash_message(state_root));
142+
let state_root = hex::decode(state_root)
143+
.map_err(|_| AdapterError::Signature("invalid state_root".to_string()))?;
144+
let message = Message::from_slice(&hash_message(&state_root));
138145

139146
verify_address(&address, &signature, &message).or_else(|_| Ok(false))
140147
}
@@ -314,14 +321,13 @@ impl RelayerClient {
314321
}
315322
}
316323

317-
fn hash_message(message: &str) -> [u8; 32] {
324+
fn hash_message(message: &[u8]) -> [u8; 32] {
318325
let eth = "\x19Ethereum Signed Message:\n";
319326
let message_length = message.len();
320327

321-
let encoded = format!("{}{}{}", eth, message_length, message);
322-
323328
let mut result = Keccak::new_keccak256();
324-
result.update(&encoded.as_bytes());
329+
result.update(&format!("{}{}", eth, message_length).as_bytes());
330+
result.update(&message);
325331

326332
let mut res: [u8; 32] = [0; 32];
327333
result.finalize(&mut res);
@@ -371,10 +377,9 @@ pub fn ewt_sign(
371377

372378
let payload_encoded =
373379
base64::encode_config(&serde_json::to_string(payload)?, base64::URL_SAFE_NO_PAD);
374-
let message = Message::from_slice(&hash_message(&format!(
375-
"{}.{}",
376-
header_encoded, payload_encoded
377-
)));
380+
let message = Message::from_slice(&hash_message(
381+
&format!("{}.{}", header_encoded, payload_encoded).as_bytes(),
382+
));
378383
let signature: Signature = signer
379384
.sign(password, &message)
380385
.map_err(|_| map_error("sign message"))?
@@ -394,10 +399,9 @@ pub fn ewt_verify(
394399
payload_encoded: &str,
395400
token: &str,
396401
) -> Result<VerifyPayload, Box<dyn Error>> {
397-
let message = Message::from_slice(&hash_message(&format!(
398-
"{}.{}",
399-
header_encoded, payload_encoded
400-
)));
402+
let message = Message::from_slice(&hash_message(
403+
&format!("{}.{}", header_encoded, payload_encoded).as_bytes(),
404+
));
401405

402406
let decoded_signature = base64::decode_config(&token, base64::URL_SAFE_NO_PAD)?;
403407
let signature = Signature::from_electrum(&decoded_signature);
@@ -466,19 +470,19 @@ mod test {
466470

467471
// Sign
468472
let expected_response =
469-
"0xce654de0b3d14d63e1cb3181eee7a7a37ef4a06c9fabc204faf96f26357441b625b1be460fbe8f5278cc02aa88a5d0ac2f238e9e3b8e4893760d33bccf77e47f1b";
473+
"0x625fd46f82c4cfd135ea6a8534e85dbf50beb157046dce59d2e97aacdf4e38381d1513c0e6f002b2f05c05458038b187754ff38cc0658dfc9ba854cccfb6e13e1b";
470474
let message = "2bdeafae53940669daa6f519373f686c";
471475
let response = eth_adapter.sign(message).expect("failed to sign message");
472476
assert_eq!(expected_response, response, "invalid signature");
473477

474478
// Verify
475479
let signature =
476-
"ce654de0b3d14d63e1cb3181eee7a7a37ef4a06c9fabc204faf96f26357441b625b1be460fbe8f5278cc02aa88a5d0ac2f238e9e3b8e4893760d33bccf77e47f1b";
480+
"0x9e07f12958ce7c5eb1362eb9461e4745dd9d74a42b921391393caea700bfbd6e1ad876a7d8f9202ef1fe6110dbfe87840c5676ca5c4fda9f3330694a1ac2a1fc1b";
477481
let verify = eth_adapter
478482
.verify(
479-
&ValidatorId::try_from("2bDeAFAE53940669DaA6F519373f686c1f3d3393")
483+
&ValidatorId::try_from("2892f6C41E0718eeeDd49D98D648C789668cA67d")
480484
.expect("Failed to parse id"),
481-
"2bdeafae53940669daa6f519373f686c",
485+
"8bc45d8eb27f4c98cab35d17b0baecc2a263d6831ef0800f4c190cbfac6d20a3",
482486
&signature,
483487
)
484488
.expect("Failed to verify signatures");

validator_worker/src/main.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ use std::time::Duration;
77

88
use clap::{App, Arg};
99
use futures::future::{join, join_all};
10-
use slog::{error, info, Logger};
1110
use tokio::runtime::Runtime;
1211
use tokio::time::{delay_for, timeout};
1312

@@ -16,6 +15,7 @@ use primitives::adapter::{Adapter, DummyAdapterOptions, KeystoreOptions};
1615
use primitives::config::{configuration, Config};
1716
use primitives::util::tests::prep_db::{AUTH, IDS};
1817
use primitives::{Channel, SpecValidator, ValidatorId};
18+
use slog::{error, info, Logger};
1919
use validator_worker::error::ValidatorWorker as ValidatorWorkerError;
2020
use validator_worker::{all_channels, follower, leader, SentryApi};
2121

0 commit comments

Comments
 (0)