Skip to content

Commit ad20523

Browse files
committed
fix: adapter formatting
1 parent 12f3fab commit ad20523

File tree

3 files changed

+52
-64
lines changed

3 files changed

+52
-64
lines changed

adapter/src/ethereum.rs

+50-62
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,11 @@
22
#![deny(rust_2018_idioms)]
33

44
use crate::EthereumChannel;
5-
use base64;
65
use chrono::Utc;
7-
use eth_checksum;
86
use ethkey::{
9-
public_to_address, recover, sign, verify_address, Address, KeyPair, Message, Public, Signature,
7+
public_to_address, recover, sign, verify_address, Address, KeyPair, Message, Signature,
108
};
119
use ethsign::{keyfile::KeyFile, Protected};
12-
use hex::ToHex;
1310
use primitives::{
1411
adapter::{Adapter, AdapterError, AdapterOptions, AdapterResult, Session},
1512
channel_validator::ChannelValidator,
@@ -21,8 +18,7 @@ use std::collections::HashMap;
2118
use std::convert::TryFrom;
2219
use std::error::Error;
2320
use std::fs::File;
24-
use std::path::{Path, PathBuf};
25-
use std::str::FromStr;
21+
use std::path::Path;
2622
use tiny_keccak::Keccak;
2723
use web3::{
2824
contract::{Contract, Options},
@@ -50,20 +46,11 @@ impl Adapter for EthereumAdapter {
5046
type Output = EthereumAdapter;
5147

5248
fn init(opts: AdapterOptions, config: &Config) -> AdapterResult<EthereumAdapter> {
53-
let keystore_json = match opts.keystore_file {
54-
Some(file) => file,
55-
None => {
56-
return Err(AdapterError::Configuration(
57-
"Missing keystore json file".to_string(),
58-
))
59-
}
60-
};
61-
62-
let keystore_pwd = match opts.keystore_pwd {
63-
Some(file) => file,
64-
None => {
49+
let (keystore_json, keystore_pwd) = match (opts.keystore_file, opts.keystore_pwd) {
50+
(Some(file), Some(pwd)) => (file, pwd),
51+
(_, _) => {
6552
return Err(AdapterError::Configuration(
66-
"Missing keystore pwd".to_string(),
53+
"Missing keystore json file or password".to_string(),
6754
))
6855
}
6956
};
@@ -131,7 +118,7 @@ impl Adapter for EthereumAdapter {
131118
let message = Message::from_slice(&hash_message(state_root));
132119
match &self.wallet {
133120
Some(wallet) => {
134-
let wallet_sign = sign(wallet.secret(), &message).expect("sign message");
121+
let wallet_sign = sign(wallet.secret(), &message).expect("failed to sign messages");
135122
let signature: Signature = wallet_sign.into_electrum().into();
136123
Ok(format!("0x{}", signature))
137124
}
@@ -157,10 +144,7 @@ impl Adapter for EthereumAdapter {
157144

158145
match verify_address(&address, &signature, &message) {
159146
Ok(result) => Ok(result),
160-
Err(e) => {
161-
println!("{}", e);
162-
Ok(false)
163-
}
147+
Err(_) => Ok(false),
164148
}
165149
}
166150

@@ -189,12 +173,17 @@ impl Adapter for EthereumAdapter {
189173
));
190174
}
191175

192-
let validators: Vec<&str> = channel.spec.validators.into_iter().map(|v| &v.id[..]).collect();
176+
let validators: Vec<&str> = channel
177+
.spec
178+
.validators
179+
.into_iter()
180+
.map(|v| &v.id[..])
181+
.collect();
193182
let invalid_address_checkum = check_address_checksum(&validators);
194183
if invalid_address_checkum {
195184
return Err(AdapterError::Configuration(
196-
"channel.validators: all addresses are checksummed".to_string()
197-
))
185+
"channel.validators: all addresses are checksummed".to_string(),
186+
));
198187
}
199188
// check if channel is valid
200189
let is_channel_valid = EthereumAdapter::is_channel_valid(&self.config, channel);
@@ -301,7 +290,7 @@ impl Adapter for EthereumAdapter {
301290

302291
fn check_address_checksum(addresses: &[&str]) -> bool {
303292
let mut invalid_address_checkum = false;
304-
293+
305294
for address in addresses {
306295
if eth_checksum::checksum(address) != *address {
307296
invalid_address_checkum = true;
@@ -352,46 +341,45 @@ struct Header {
352341
}
353342

354343
pub fn ewt_sign(signer: &KeyPair, payload: &Payload) -> Result<String, Box<dyn Error>> {
355-
let header_json = Header {
344+
let header = Header {
356345
header_type: "JWT".to_string(),
357346
alg: "ETH".to_string(),
358347
};
359-
let header_1 = serde_json::to_string(&header_json)?;
360-
println!("header json {}", header_1);
361-
362-
let header = base64::encode_config(&header_1.as_bytes(), base64::URL_SAFE_NO_PAD);
363-
println!("header hex {}", header);
364-
let payload_json = serde_json::to_string(&payload)?;
365-
println!("payload json hex {}", payload_json);
366-
let payload_encoded = base64::encode_config(&payload_json, base64::URL_SAFE_NO_PAD);
367-
let payload_string = format!("{}.{}", header, payload_encoded);
368-
369-
println!("payload string {}", payload_string);
370-
371-
let message = Message::from_slice(&hash_message(&payload_string));
372-
let wallet_sign = sign(signer.secret(), &message)?;
373-
let signature: Signature = wallet_sign.into_electrum().into();
374-
println!("\n available signature {} \n ", signature);
375-
let sig_hex = hex::decode(format!("{}", signature))?;
376-
let tail = base64::encode_config(&sig_hex, base64::URL_SAFE_NO_PAD);
377-
Ok(format!("{}.{}.{}", header, payload_encoded, tail))
348+
349+
let header_encoded = base64::encode_config(
350+
&serde_json::to_string(&header)?.as_bytes(),
351+
base64::URL_SAFE_NO_PAD,
352+
);
353+
354+
let payload_encoded =
355+
base64::encode_config(&serde_json::to_string(payload)?, base64::URL_SAFE_NO_PAD);
356+
357+
let message = Message::from_slice(&hash_message(&format!(
358+
"{}.{}",
359+
header_encoded, payload_encoded
360+
)));
361+
let signature: Signature = sign(signer.secret(), &message)?.into_electrum().into();
362+
363+
let token = base64::encode_config(
364+
&hex::decode(format!("{}", signature))?,
365+
base64::URL_SAFE_NO_PAD,
366+
);
367+
368+
Ok(format!("{}.{}.{}", header_encoded, payload_encoded, token))
378369
}
379370

380371
pub fn ewt_verify(token: &str) -> Result<VerifyPayload, Box<dyn Error>> {
381372
let parts: Vec<String> = token.split('.').map(ToString::to_string).collect();
382373

383-
let msg = format!("{}.{}", parts[0], parts[1]);
384-
let message = Message::from_slice(&hash_message(&msg));
385-
386-
let sig = base64::decode_config(&parts[2], base64::URL_SAFE_NO_PAD)?;
387-
let signature = Signature::from_electrum(&sig);
374+
let message = Message::from_slice(&hash_message(&format!("{}.{}", parts[0], parts[1])));
388375

389-
let public_key = recover(&signature, &message)?;
390-
let address = public_to_address(&public_key);
376+
let decoded_signature = base64::decode_config(&parts[2], base64::URL_SAFE_NO_PAD)?;
377+
let signature = Signature::from_electrum(&decoded_signature);
391378

392-
let decode_part1 = base64::decode_config(&parts[1], base64::URL_SAFE_NO_PAD)?;
393-
let payload_string = String::from_utf8(decode_part1)?;
379+
let address = public_to_address(&recover(&signature, &message)?);
394380

381+
let payload_string =
382+
String::from_utf8(base64::decode_config(&parts[1], base64::URL_SAFE_NO_PAD)?)?;
395383
let payload: Payload = serde_json::from_str(&payload_string)?;
396384

397385
let verified_payload = VerifyPayload {
@@ -435,18 +423,18 @@ mod test {
435423
eth_adapter.unlock().expect("should unlock eth adapter");
436424

437425
let whoami = eth_adapter.whoami().expect("failed to get whoami");
438-
println!("whami {}", whoami);
439426
assert_eq!(
440427
whoami, "0x2bDeAFAE53940669DaA6F519373f686c1f3d3393",
441428
"failed to get correct whoami"
442429
);
430+
443431
// Sign
444-
let message = "2bdeafae53940669daa6f519373f686c";
445432
let expected_response =
446433
"0xce654de0b3d14d63e1cb3181eee7a7a37ef4a06c9fabc204faf96f26357441b625b1be460fbe8f5278cc02aa88a5d0ac2f238e9e3b8e4893760d33bccf77e47f1b";
434+
let message = "2bdeafae53940669daa6f519373f686c";
447435
let response = eth_adapter.sign(message).expect("failed to sign message");
448-
println!("{}", response);
449-
// assert_eq!(expected_response, response, "invalid signature");
436+
assert_eq!(expected_response, response, "invalid signature");
437+
450438
// Verify
451439
let signature =
452440
"ce654de0b3d14d63e1cb3181eee7a7a37ef4a06c9fabc204faf96f26357441b625b1be460fbe8f5278cc02aa88a5d0ac2f238e9e3b8e4893760d33bccf77e47f1b";
@@ -457,7 +445,7 @@ mod test {
457445
&signature,
458446
)
459447
.expect("Failed to verify signatures");
460-
println!("{}", verify);
448+
assert_eq!(verify, true, "invalid signature verification");
461449
}
462450

463451
#[test]

adapter/src/lib.rs

+1-2
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ use ethabi::encode;
88
use ethabi::param_type::{ParamType, Reader};
99
use ethabi::token::{LenientTokenizer, StrictTokenizer, Token, Tokenizer};
1010
use hex;
11-
use primitives::BigNum;
1211
use primitives::Channel;
1312
use sha2::{Digest, Sha256};
1413
use std::convert::From;
@@ -129,7 +128,7 @@ impl EthereumChannel {
129128
.map(ToString::to_string)
130129
.collect();
131130

132-
let validators = format!("[ {} ]", self.validators.join(", "));
131+
let validators = format!("[{}]", self.validators.join(","));
133132

134133
let values = [
135134
contract_addr.to_string(),

primitives/src/lib.rs

+1
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
use std::error;
44
use std::fmt;
55

6+
67
pub mod ad_unit;
78
pub mod adapter;
89
pub mod balances_map;

0 commit comments

Comments
 (0)