Skip to content

Commit 7a78f92

Browse files
committed
implement sign_raw for all other chains, fix formatting and imports
1 parent b68a8e3 commit 7a78f92

File tree

9 files changed

+41
-37
lines changed

9 files changed

+41
-37
lines changed

src/aleph/sdk/chains/common.py

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,6 @@ def _setup_sender(self, message: Dict) -> Dict:
6262
else:
6363
raise ValueError("Message sender does not match the account's public key.")
6464

65-
@abstractmethod
6665
async def sign_message(self, message: Dict) -> Dict:
6766
"""
6867
Returns a signed message from an Aleph message.
@@ -72,19 +71,19 @@ async def sign_message(self, message: Dict) -> Dict:
7271
Dict: Signed message
7372
"""
7473
message = self._setup_sender(message)
75-
sig = await self.sign_raw(get_verification_buffer(message))
76-
message["signature"] = sig.hex()
74+
message["signature"] = await self.sign_raw(get_verification_buffer(message))
7775
return message
78-
79-
async def sign_raw(self, buffer: bytes) -> bytes:
76+
77+
@abstractmethod
78+
async def sign_raw(self, buffer: bytes) -> str:
8079
"""
8180
Returns a signed message from a raw buffer.
8281
Args:
8382
buffer: Buffer to sign
8483
Returns:
85-
bytes: Signed buffer
84+
str: Signature in preferred format
8685
"""
87-
86+
raise NotImplementedError
8887

8988
@abstractmethod
9089
def get_address(self) -> str:

src/aleph/sdk/chains/cosmos.py

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -51,27 +51,27 @@ def __init__(self, private_key=None, hrp=DEFAULT_HRP):
5151

5252
async def sign_message(self, message):
5353
message = self._setup_sender(message)
54-
5554
verif = get_verification_string(message)
56-
57-
privkey = ecdsa.SigningKey.from_string(self.private_key, curve=ecdsa.SECP256k1)
58-
signature_compact = privkey.sign_deterministic(
59-
verif.encode("utf-8"),
60-
hashfunc=hashlib.sha256,
61-
sigencode=ecdsa.util.sigencode_string_canonize,
62-
)
63-
signature_base64_str = base64.b64encode(signature_compact).decode("utf-8")
6455
base64_pubkey = base64.b64encode(self.get_public_key().encode()).decode("utf-8")
6556

6657
sig = {
67-
"signature": signature_base64_str,
58+
"signature": self.sign_raw(verif.encode("utf-8")),
6859
"pub_key": {"type": "tendermint/PubKeySecp256k1", "value": base64_pubkey},
6960
"account_number": str(0),
7061
"sequence": str(0),
7162
}
7263
message["signature"] = json.dumps(sig)
7364
return message
7465

66+
async def sign_raw(self, buffer: bytes) -> str:
67+
privkey = ecdsa.SigningKey.from_string(self.private_key, curve=ecdsa.SECP256k1)
68+
signature_compact = privkey.sign_deterministic(
69+
buffer,
70+
hashfunc=hashlib.sha256,
71+
sigencode=ecdsa.util.sigencode_string_canonize,
72+
)
73+
return base64.b64encode(signature_compact).decode("utf-8")
74+
7575
def get_address(self) -> str:
7676
return privkey_to_address(self.private_key)
7777

src/aleph/sdk/chains/ethereum.py

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
from pathlib import Path
2-
from typing import Dict, Optional, Union
2+
from typing import Optional, Union
33

44
from eth_account import Account
55
from eth_account.messages import encode_defunct
@@ -11,7 +11,6 @@
1111
BaseAccount,
1212
get_fallback_private_key,
1313
get_public_key,
14-
get_verification_buffer,
1514
)
1615

1716

@@ -23,12 +22,12 @@ class ETHAccount(BaseAccount):
2322
def __init__(self, private_key: bytes):
2423
self.private_key = private_key
2524
self._account = Account.from_key(self.private_key)
26-
27-
async def sign_raw(self, buffer: bytes) -> bytes:
25+
26+
async def sign_raw(self, buffer: bytes) -> str:
2827
"""Sign a raw buffer."""
2928
msghash = encode_defunct(text=buffer.decode("utf-8"))
3029
sig = self._account.sign_message(msghash)
31-
return sig["signature"]
30+
return sig["signature"].hex()
3231

3332
def get_address(self) -> str:
3433
return self._account.address

src/aleph/sdk/chains/nuls1.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -315,6 +315,10 @@ async def sign_message(self, message):
315315
message["signature"] = sig.serialize().hex()
316316
return message
317317

318+
async def sign_raw(self, buffer: bytes) -> str:
319+
sig = NulsSignature.sign_data(self.private_key, buffer)
320+
return sig.serialize().hex()
321+
318322
def get_address(self):
319323
return address_from_hash(
320324
public_key_to_hash(self.get_public_key(), chain_id=self.chain_id)

src/aleph/sdk/chains/nuls2.py

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212
BaseAccount,
1313
get_fallback_private_key,
1414
get_public_key,
15-
get_verification_buffer,
1615
)
1716

1817

@@ -37,16 +36,9 @@ def __init__(self, private_key=None, chain_id=1, prefix=None):
3736
else:
3837
self.prefix = prefix
3938

40-
async def sign_message(self, message):
41-
# sig = NulsSignature.sign_message(self.private_key,
42-
# get_verification_buffer(message))
43-
message = self._setup_sender(message)
44-
45-
sig = sign_recoverable_message(
46-
self.private_key, get_verification_buffer(message)
47-
)
48-
message["signature"] = base64.b64encode(sig).decode()
49-
return message
39+
async def sign_raw(self, buffer: bytes) -> str:
40+
sig = sign_recoverable_message(self.private_key, buffer)
41+
return base64.b64encode(sig).decode()
5042

5143
def get_address(self):
5244
return address_from_hash(

src/aleph/sdk/chains/remote.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,9 @@ async def sign_message(self, message: Dict) -> Dict:
7777
response.raise_for_status()
7878
return await response.json()
7979

80+
async def sign_raw(self, buffer: bytes) -> str:
81+
raise NotImplementedError()
82+
8083
def get_address(self) -> str:
8184
return self._address
8285

src/aleph/sdk/chains/sol.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,15 +32,15 @@ async def sign_message(self, message: Dict) -> Dict:
3232
verif = get_verification_buffer(message)
3333
sig = {
3434
"publicKey": self.get_address(),
35-
"signature": encode(self.sign_raw(verif)),
35+
"signature": self.sign_raw(verif),
3636
}
3737
message["signature"] = json.dumps(sig)
3838
return message
3939

40-
async def sign_raw(self, buffer: bytes) -> bytes:
40+
async def sign_raw(self, buffer: bytes) -> str:
4141
"""Sign a raw buffer."""
4242
sig = self._signing_key.sign(buffer)
43-
return sig.signature
43+
return encode(sig.signature)
4444

4545
def get_address(self) -> str:
4646
return encode(self._signing_key.verify_key)

src/aleph/sdk/chains/substrate.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,10 @@ async def sign_message(self, message):
2525
message["signature"] = json.dumps(sig)
2626
return message
2727

28+
async def sign_raw(self, buffer: bytes) -> str:
29+
sig = self._account.sign(buffer)
30+
return sig.hex()
31+
2832
def get_address(self):
2933
return self._account.ss58_address
3034

src/aleph/sdk/chains/tezos.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,12 +27,15 @@ async def sign_message(self, message: Dict) -> Dict:
2727
verif = get_verification_buffer(message)
2828
sig = {
2929
"publicKey": self.get_public_key(),
30-
"signature": self._account.sign(verif),
30+
"signature": self.sign_raw(verif),
3131
}
3232

3333
message["signature"] = json.dumps(sig)
3434
return message
3535

36+
async def sign_raw(self, buffer: bytes) -> str:
37+
return self._account.sign(buffer)
38+
3639
def get_address(self) -> str:
3740
return self._account.public_key_hash()
3841

0 commit comments

Comments
 (0)