Skip to content

Commit f59737e

Browse files
committed
refactor: sign messages eip191
1 parent d6d0290 commit f59737e

3 files changed

Lines changed: 11 additions & 7 deletions

File tree

crypto/utils/message.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77
from crypto.identity.private_key import PrivateKey
88
from crypto.identity.public_key import PublicKey
99

10+
MESSAGE_PREFIX = b"\x19Ethereum Signed Message:\n"
11+
1012
class Message(object):
1113
public_key: bytes
1214
message: bytes
@@ -62,7 +64,7 @@ def sign(cls, message: Union[bytes, str], passphrase: Union[bytes, str]):
6264
private_key = PrivateKey.from_passphrase(passphrase)
6365
public_key = private_key.public_key
6466

65-
transaction_signature = private_key.sign(message)
67+
transaction_signature = private_key.sign(MESSAGE_PREFIX + (str(len(message))).encode() + message)
6668

6769
signature_v = bytes([transaction_signature[0]]).hex()
6870
signature_r = transaction_signature[1:33].hex()
@@ -84,7 +86,9 @@ def verify(self):
8486
"""
8587

8688
signature = unhexlify(self.signature)
87-
message_hash = keccak.new(data=self.message, digest_bits=256).digest()
89+
90+
message = MESSAGE_PREFIX + (str(len(self.message))).encode() + self.message
91+
message_hash = keccak.new(data=message, digest_bits=256).digest()
8892

8993
signature_r = signature[0:32]
9094
signature_s = signature[32:64]

tests/fixtures/message-sign.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"message": "Hello, world!",
3-
"publicKey": "0243333347c8cbf4e3cbc7a96964181d02a2b0c854faa2fef86b4b8d92afcf473d",
4-
"signature": "0e2e53409be748834cac44052817ecef569b429a0492aa6bbc0d934eb71a09547e77aeef33d45669bbcba0498149f0e2b637fe8905186e08a5410c6f2b013bb400"
2+
"message": "Hello, world!",
3+
"publicKey": "0243333347c8cbf4e3cbc7a96964181d02a2b0c854faa2fef86b4b8d92afcf473d",
4+
"signature": "0x2bdd0c58ff8a25f456065fb731c73308a25d0a09f351f23e3c7dd3882776d33d626b0cafc0b99dd7504b24f6ecd2e036a267c8e5e005f36dcbc03b2e33fa7fc301"
55
}

tests/utils/test_message.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ def test_verify_with_publicKey(load_transaction_fixture):
77

88
result = Message(
99
message=fixture['message'],
10-
signature=fixture['signature'],
10+
signature=fixture['signature'][2:],
1111
public_key=fixture['publicKey'],
1212
)
1313

@@ -20,7 +20,7 @@ def test_message_sign_verification(load_transaction_fixture, passphrase):
2020

2121
message: Message = Message.sign(fixture['message'], passphrase)
2222

23-
assert message.signature.decode() == fixture['signature']
23+
assert message.signature.decode() == fixture['signature'][2:]
2424
assert message.public_key.decode() == fixture['publicKey']
2525
assert message.message.decode() == fixture['message']
2626

0 commit comments

Comments
 (0)