Skip to content

Commit 9b03e4e

Browse files
authored
Merge pull request #266 from VaultaFoundation/elmato/fix-r-s-check
[2.0] Fix secp256k1 signature validation and add unit tests
2 parents 1fdcadd + b5446f0 commit 9b03e4e

File tree

2 files changed

+37
-1
lines changed

2 files changed

+37
-1
lines changed

silkworm/core/crypto/secp256k1n.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ bool is_valid_signature(const intx::uint256& r, const intx::uint256& s, bool hom
2222
if (!r || !s) {
2323
return false;
2424
}
25-
if (r >= kSecp256k1n && s >= kSecp256k1n) {
25+
if (r >= kSecp256k1n || s >= kSecp256k1n) {
2626
return false;
2727
}
2828
// https://eips.ethereum.org/EIPS/eip-2
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
// Copyright 2025 The Silkworm Authors
2+
// SPDX-License-Identifier: Apache-2.0
3+
4+
#include "secp256k1n.hpp"
5+
6+
#include <catch2/catch.hpp>
7+
8+
namespace silkworm {
9+
10+
TEST_CASE("is_valid_signature") {
11+
bool homestead = false;
12+
CHECK(!is_valid_signature(0, 0, homestead));
13+
CHECK(!is_valid_signature(0, 1, homestead));
14+
CHECK(!is_valid_signature(1, 0, homestead));
15+
CHECK(is_valid_signature(1, 1, homestead));
16+
CHECK(is_valid_signature(1, kSecp256k1Halfn, homestead));
17+
CHECK(is_valid_signature(1, kSecp256k1Halfn + 1, homestead));
18+
CHECK(is_valid_signature(kSecp256k1n - 1, kSecp256k1n - 1, homestead));
19+
CHECK(!is_valid_signature(kSecp256k1n - 1, kSecp256k1n, homestead));
20+
CHECK(!is_valid_signature(kSecp256k1n, kSecp256k1n - 1, homestead));
21+
CHECK(!is_valid_signature(kSecp256k1n, kSecp256k1n, homestead));
22+
23+
homestead = true;
24+
CHECK(!is_valid_signature(0, 0, homestead));
25+
CHECK(!is_valid_signature(0, 1, homestead));
26+
CHECK(!is_valid_signature(1, 0, homestead));
27+
CHECK(is_valid_signature(1, 1, homestead));
28+
CHECK(is_valid_signature(1, kSecp256k1Halfn, homestead));
29+
CHECK(!is_valid_signature(1, kSecp256k1Halfn + 1, homestead));
30+
CHECK(!is_valid_signature(kSecp256k1n - 1, kSecp256k1n - 1, homestead));
31+
CHECK(!is_valid_signature(kSecp256k1n - 1, kSecp256k1n, homestead));
32+
CHECK(!is_valid_signature(kSecp256k1n, kSecp256k1n - 1, homestead));
33+
CHECK(!is_valid_signature(kSecp256k1n, kSecp256k1n, homestead));
34+
}
35+
36+
} // namespace silkworm

0 commit comments

Comments
 (0)