Skip to content

Commit f40d1d6

Browse files
committed
EVMHost: Add size%192 check to bn128pairing
And also refactor resultWithFailure
1 parent 8b70108 commit f40d1d6

File tree

2 files changed

+15
-8
lines changed

2 files changed

+15
-8
lines changed

test/EVMHost.cpp

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -495,9 +495,7 @@ evmc::result EVMHost::precompileIdentity(evmc_message const& _message) noexcept
495495
evmc::result EVMHost::precompileModExp(evmc_message const&) noexcept
496496
{
497497
// TODO implement
498-
evmc::result result({});
499-
result.status_code = EVMC_FAILURE;
500-
return result;
498+
return resultWithFailure();
501499
}
502500

503501
evmc::result EVMHost::precompileALTBN128G1Add(evmc_message const& _message) noexcept
@@ -773,6 +771,11 @@ evmc::result EVMHost::precompileALTBN128G1Mul(evmc_message const& _message) noex
773771

774772
evmc::result EVMHost::precompileALTBN128PairingProduct(evmc_message const& _message) noexcept
775773
{
774+
// Input must be divisible by 192.
775+
// TODO: validate points
776+
if (_message.input_size % 192)
777+
return resultWithFailure();
778+
776779
// This is a partial implementation - it always returns "success"
777780
bytes static data = fromHex("0000000000000000000000000000000000000000000000000000000000000001");
778781
return resultWithGas(_message, data);
@@ -786,11 +789,14 @@ evmc::result EVMHost::precompileGeneric(
786789
if (_inOut.count(input))
787790
return resultWithGas(_message, _inOut.at(input));
788791
else
789-
{
790-
evmc::result result({});
791-
result.status_code = EVMC_FAILURE;
792-
return result;
793-
}
792+
return resultWithFailure();
793+
}
794+
795+
evmc::result EVMHost::resultWithFailure() noexcept
796+
{
797+
evmc::result result({});
798+
result.status_code = EVMC_FAILURE;
799+
return result;
794800
}
795801

796802
evmc::result EVMHost::resultWithGas(

test/EVMHost.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,7 @@ class EVMHost: public evmc::MockedHost
116116
/// @returns a result object with no gas usage and result data taken from @a _data.
117117
/// @note The return value is only valid as long as @a _data is alive!
118118
static evmc::result resultWithGas(evmc_message const& _message, bytes const& _data) noexcept;
119+
static evmc::result resultWithFailure() noexcept;
119120

120121
evmc::VM& m_vm;
121122
/// EVM version requested by the testing tool

0 commit comments

Comments
 (0)