Skip to content

Commit 3c07f7b

Browse files
hujw77aurexav
andauthored
Update ecdsa-authority spec (#1022)
* Fix ecdsa-authority test * Use `to_be_bytes` --------- Co-authored-by: Xavier Lau <xavier@inv.cafe>
1 parent 478f126 commit 3c07f7b

File tree

3 files changed

+32
-25
lines changed

3 files changed

+32
-25
lines changed

pallet/ecdsa-authority/src/lib.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -469,7 +469,7 @@ pub mod pallet {
469469
),
470470
}
471471
};
472-
let message = Sign::eth_signable_message(
472+
let message = Sign::signable_message(
473473
T::ChainId::get(),
474474
T::Version::get().spec_name.as_ref(),
475475
&ethabi::encode(&[
@@ -547,7 +547,7 @@ pub mod pallet {
547547
message_root,
548548
nonce: <Nonce<T>>::get(),
549549
};
550-
let message = Sign::eth_signable_message(
550+
let message = Sign::signable_message(
551551
T::ChainId::get(),
552552
T::Version::get().spec_name.as_ref(),
553553
&ethabi::encode(&[

pallet/ecdsa-authority/src/primitives.rs

+20-13
Original file line numberDiff line numberDiff line change
@@ -47,12 +47,16 @@ impl Sign {
4747
hashing::keccak_256(data)
4848
}
4949

50-
pub(crate) fn eth_signable_message(chain_id: u64, spec_name: &[u8], data: &[u8]) -> Hash {
51-
// \x19\x01 + keccack256(ChainIDSpecName::ecdsa-authority) + struct_hash
50+
pub fn domain_separator(chain_id: u64, spec_name: &[u8]) -> [u8; 32] {
51+
Self::hash(&[&chain_id.to_be_bytes(), spec_name, b"::ecdsa-authority"].concat())
52+
}
53+
54+
// \x19\x01 + keccack256(ChainIDSpecName::ecdsa-authority) + struct_hash
55+
pub(crate) fn signable_message(chain_id: u64, spec_name: &[u8], data: &[u8]) -> Hash {
5256
Hash(Self::hash(
5357
&[
5458
b"\x19\x01".as_slice(),
55-
&Self::hash(&[&chain_id.to_le_bytes(), spec_name, b"::ecdsa-authority"].concat()),
59+
&Self::domain_separator(chain_id, spec_name),
5660
&Self::hash(data),
5761
]
5862
.concat(),
@@ -102,20 +106,23 @@ pub struct Commitment {
102106
}
103107

104108
#[test]
105-
fn eth_signable_message() {
109+
fn signable_message() {
106110
assert_eq!(
107-
array_bytes::bytes2hex("0x", Sign::eth_signable_message(46, b"Darwinia", &[0; 32])),
108-
"0xb492857010088b0dff298645e9105549d088aab7bcb20cf5a3d0bc17dce91045"
111+
array_bytes::bytes2hex("0x", Sign::domain_separator(46, b"Darwinia").as_ref()),
112+
"0xc494742e979bd6ab2dca4950fddd8809e1502ab8ef7b8d749364ec32cb6e1b3e"
109113
);
110114
assert_eq!(
111-
array_bytes::bytes2hex("0x", Sign::hash(b"46Darwinia::ecdsa-authority")),
112-
"0xf8a76f5ceeff36d74ff99c4efc0077bcc334721f17d1d5f17cfca78455967e1e"
115+
array_bytes::bytes2hex("0x", Sign::domain_separator(43, b"Pangolin2").as_ref()),
116+
"0xe97c73e46305f3bca2279f002665725cd29e465c6624e83a135f7b2e6b1a8134"
113117
);
114118

115-
let data = array_bytes::hex2bytes_unchecked("0x30a82982a8d5050d1c83bbea574aea301a4d317840a8c4734a308ffaa6a63bc8cb76085b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000100000000000000000000000068898db1012808808c903f390909c52d9f7067490000000000000000000000004cdc1dbbd754ea539f1ffaea91f1b6c4b8dd14bd");
116119
assert_eq!(
117-
array_bytes::bytes2hex("0x", Sign::eth_signable_message(45, b"Pangoro", &data)),
118-
"0x4bddffe492f1091c1902d1952fc4673b12915f4b22822c6c84eacad574f11f2e"
120+
array_bytes::bytes2hex("0x", Sign::signable_message(46, b"Darwinia", &[0; 32])),
121+
"0xe52c7ebc7e478b623a16cc38469eca4aa1255bed6cd2599e529080d27ecaed32"
122+
);
123+
assert_eq!(
124+
array_bytes::bytes2hex("0x", Sign::signable_message(45, b"Pangoro", &array_bytes::hex2bytes_unchecked("0x30a82982a8d5050d1c83bbea574aea301a4d317840a8c4734a308ffaa6a63bc8cb76085b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000100000000000000000000000068898db1012808808c903f390909c52d9f7067490000000000000000000000004cdc1dbbd754ea539f1ffaea91f1b6c4b8dd14bd"))),
125+
"0x9688cfb794c97094994409ed1c7c7caad076ae53ec13af8a370b55654f7bcb36"
119126
);
120127

121128
let operation = Operation::SwapMembers {
@@ -134,7 +141,7 @@ fn eth_signable_message() {
134141
ethabi::Token::Uint(0.into()),
135142
]);
136143
assert_eq!(
137-
array_bytes::bytes2hex("0x", Sign::eth_signable_message(45, b"Pangoro", &encoded)),
138-
"0xe328aa10278425238407d49104ac5a55fd68e7f378b327c902d4d5035cfcfedf"
144+
array_bytes::bytes2hex("0x", Sign::signable_message(45, b"Pangoro", &encoded)),
145+
"0x2ca922116daa8c7fec2b58362b58764e83f3b24e906fb50f58e3e1a2e208fb77"
139146
);
140147
}

pallet/ecdsa-authority/tests/tests.rs

+10-10
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ fn add_authority() {
5252
assert_eq!(EcdsaAuthority::next_authorities(), vec![a_0]);
5353
assert_eq!(EcdsaAuthority::nonce(), 0);
5454
let message = array_bytes::hex_n_into_unchecked(
55-
"0x5c883184c9c53c59857253454df1b4813e8b3fb28648beb85555d58d1e801e14",
55+
"0x5dcc31dcd194f2ccb42e13ed80001e37492f796d6d62514525fcf66de6f955c8",
5656
);
5757
assert_eq!(
5858
EcdsaAuthority::authorities_change_to_sign(),
@@ -123,7 +123,7 @@ fn remove_authority() {
123123
assert_eq!(EcdsaAuthority::next_authorities(), vec![a_2]);
124124
assert_eq!(EcdsaAuthority::nonce(), 0);
125125
let message = array_bytes::hex_n_into_unchecked(
126-
"0x76139aa9d1c7b35fc744b10444898ee5703e3f77406b926f903006436b7930c7",
126+
"0xb59076c5054bc451c964b47af005b7b807b3501c36ef4d4375cb39637baea13b",
127127
);
128128
assert_eq!(
129129
EcdsaAuthority::authorities_change_to_sign(),
@@ -182,7 +182,7 @@ fn swap_authority() {
182182
assert_eq!(EcdsaAuthority::next_authorities(), vec![a_2]);
183183
assert_eq!(EcdsaAuthority::nonce(), 0);
184184
let message = array_bytes::hex_n_into_unchecked(
185-
"0x30effc17a3fcf9b3079168c2c2be54b6d9fbdfd7077c9d844ec241dd70dd0507",
185+
"0x0f9863685b4ef59a98fc26a063dad4713698af2d10af5f2ea921fed3f39fac71",
186186
);
187187
assert_eq!(
188188
EcdsaAuthority::authorities_change_to_sign(),
@@ -231,7 +231,7 @@ fn sync_interval_and_max_pending_period() {
231231
});
232232
run_to_block(<Runtime as Config>::SyncInterval::get());
233233
let message = array_bytes::hex_n_into_unchecked(
234-
"0x742776a31e49b3f5a2a15a6781eb99f96e8116bfc67aae652a08b9b1235146d2",
234+
"0x7eba5c34eb163661830babd9d52b674f80812b4cde832429635352eb6f9225af",
235235
);
236236
assert_eq!(
237237
EcdsaAuthority::new_message_root_to_sign(),
@@ -268,7 +268,7 @@ fn sync_interval_and_max_pending_period() {
268268
);
269269
run_to_block(offset + <<Runtime as Config>::MaxPendingPeriod as Get<u64>>::get());
270270
let message = array_bytes::hex_n_into_unchecked(
271-
"0xafd9fc3dc135079be23746b4beb27255e5d3b4c5f3d05db766af751c0ed97920",
271+
"0x3e5c445233cc9d281c4fde6ffc5d1c57701d932afba5e6cea07f9b1e88d41fc6",
272272
);
273273
assert_eq!(
274274
EcdsaAuthority::new_message_root_to_sign(),
@@ -318,7 +318,7 @@ fn submit_authorities_change_signature() {
318318
assert_ok!(EcdsaAuthority::add_authority(RuntimeOrigin::root(), a_3));
319319
let operation = Operation::AddMember { new: a_3 };
320320
let message = array_bytes::hex_n_into_unchecked(
321-
"0x3ad89c7824d6e83c180482c888a0af99baa95ce17a39285d6f943df5d95e7759",
321+
"0x7c2560e894619daa9e7369148a97b05d16e1c439c2467b08f64af578aba9cb4a",
322322
);
323323
assert_eq!(
324324
EcdsaAuthority::authorities_change_to_sign(),
@@ -373,7 +373,7 @@ fn submit_authorities_change_signature() {
373373
},
374374
Event::CollectingNewMessageRootSignatures {
375375
message: array_bytes::hex_n_into_unchecked(
376-
"0xe7bded73843f446f46b42ee0e0cc435f4f66fbcedf36c635c437a4d63bb44696"
376+
"0x1a8ed5724cc495c64b46b43c079e82e299aaac24f79deae23bbfea88e2e1abdc"
377377
)
378378
}
379379
]
@@ -399,7 +399,7 @@ fn submit_new_message_root_signature() {
399399

400400
run_to_block(<<Runtime as Config>::SyncInterval as Get<u64>>::get());
401401
let message = array_bytes::hex_n_into_unchecked(
402-
"0x742776a31e49b3f5a2a15a6781eb99f96e8116bfc67aae652a08b9b1235146d2",
402+
"0x7eba5c34eb163661830babd9d52b674f80812b4cde832429635352eb6f9225af",
403403
);
404404
assert_eq!(
405405
EcdsaAuthority::new_message_root_to_sign(),
@@ -485,7 +485,7 @@ fn tx_fee() {
485485
(2..<Runtime as Config>::SyncInterval::get()).for_each(|n| run_to_block(n as _));
486486
run_to_block(<<Runtime as Config>::SyncInterval as Get<u64>>::get());
487487
let message = array_bytes::hex_n_into_unchecked(
488-
"0x742776a31e49b3f5a2a15a6781eb99f96e8116bfc67aae652a08b9b1235146d2",
488+
"0x7eba5c34eb163661830babd9d52b674f80812b4cde832429635352eb6f9225af",
489489
);
490490

491491
// Free for first-correct signature.
@@ -508,7 +508,7 @@ fn tx_fee() {
508508

509509
assert_ok!(EcdsaAuthority::remove_authority(RuntimeOrigin::root(), a_1));
510510
let message = array_bytes::hex_n_into_unchecked(
511-
"0x24956af4b0842e1caec63782602c5a94089ba7c8ab8bd12d4243bb1a893b8af0",
511+
"0x9c9af6df8ad32bce1fe3e8e4a1c638843786b2cc7f7932ff4d3f2de7b29b2632",
512512
);
513513

514514
// Free for first-correct signature.

0 commit comments

Comments
 (0)