Skip to content

Commit f6f6b56

Browse files
committed
refactor: sign messages eip191
1 parent ec4ba81 commit f6f6b56

File tree

3 files changed

+16
-8
lines changed

3 files changed

+16
-8
lines changed

src/Utils/Message.php

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@
1616

1717
class Message
1818
{
19+
const MESSAGE_PREFIX = "\x19Ethereum Signed Message:\n";
20+
1921
/**
2022
* The message signer public key.
2123
*
@@ -99,7 +101,7 @@ public static function sign(string $message, string $passphrase): self
99101
{
100102
$privateKey = PrivateKey::fromPassphrase($passphrase);
101103

102-
$hash = Keccak::hash($message, 256);
104+
$hash = Keccak::hash(static::MESSAGE_PREFIX.strlen($message).$message, 256);
103105

104106
$signature = $privateKey->sign(Buffer::hex($hash));
105107

@@ -125,10 +127,14 @@ public function verify(): bool
125127

126128
$signature = $this->getSignature();
127129

128-
return $factory->fromHex($this->publicKey)->verify(
129-
Buffer::hex(Keccak::hash($this->message, 256)),
130-
$signature,
131-
);
130+
$message = static::MESSAGE_PREFIX.strlen($this->message).$this->message;
131+
132+
return $factory
133+
->fromHex($this->publicKey)
134+
->verify(
135+
Buffer::hex(Keccak::hash($message, 256)),
136+
$signature,
137+
);
132138
}
133139

134140
/**

tests/Unit/Utils/MessageTest.php

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
$message = Message::sign($fixture['message'], $this->passphrase);
1111

1212
expect($message->publicKey)->toBe($fixture['publicKey']);
13-
expect($message->signature)->toBe($fixture['signature']);
13+
expect($message->signature)->toBe(substr($fixture['signature'], 2));
1414
expect($message->message)->toBe($fixture['message']);
1515
});
1616

@@ -64,7 +64,9 @@
6464
});
6565

6666
test('it should verify a message', function () {
67-
$message = Message::new($this->getFixture('message-sign'));
67+
$fixture = $this->getFixture('message-sign');
68+
$fixture['signature'] = substr($fixture['signature'], 2);
69+
$message = Message::new($fixture);
6870

6971
expect($message->verify())->toBeTrue();
7072
});

tests/fixtures/message-sign.json

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

0 commit comments

Comments
 (0)