Skip to content

Commit c81f98d

Browse files
authored
Merge pull request #268 from VaultaFoundation/elmato/merge-fixes-to-main
[2.0 -> master] Fix secp256k1 signature validation + Remove redundant set_code
2 parents 05cde07 + 1b8a0ad commit c81f98d

File tree

3 files changed

+37
-2
lines changed

3 files changed

+37
-2
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

silkworm/core/execution/evm.cpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -200,7 +200,6 @@ evmc::Result EVM::create(const evmc_message& message) noexcept {
200200
assert(tmp_gas_state.speculative_cpu_gas_consumed() == emv_res.speculative_cpu_gas_consumed);
201201
evm_res.storage_gas_consumed = tmp_gas_state.storage_gas_consumed();
202202
evm_res.storage_gas_refund = tmp_gas_state.storage_gas_refund();
203-
state_.set_code(contract_addr, {evm_res.output_data, evm_res.output_size});
204203
} else if (evm_res.gas_left >= 0 && static_cast<uint64_t>(evm_res.gas_left) >= code_deploy_gas) {
205204
evm_res.gas_left -= static_cast<int64_t>(code_deploy_gas);
206205
state_.set_code(contract_addr, {evm_res.output_data, evm_res.output_size});

0 commit comments

Comments
 (0)