Skip to content

Commit

Permalink
evmmax: Add ate pairing unit tests.
Browse files Browse the repository at this point in the history
  • Loading branch information
rodiazet committed Apr 2, 2024
1 parent 5e2e777 commit db9e78e
Show file tree
Hide file tree
Showing 2 changed files with 172 additions and 0 deletions.
1 change: 1 addition & 0 deletions test/unittests/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ target_sources(
evm_benchmark_test.cpp
evmmax_bn254_add_test.cpp
evmmax_bn254_mul_test.cpp
evmmax_bn254_pairing_test.cpp
evmmax_test.cpp
evmmax_secp256k1_test.cpp
evmone_test.cpp
Expand Down
171 changes: 171 additions & 0 deletions test/unittests/evmmax_bn254_pairing_test.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,171 @@
// evmone: Fast Ethereum Virtual Machine implementation
// Copyright 2023 The evmone Authors.
// SPDX-License-Identifier: Apache-2.0

#include "evmone_precompiles/bn254.hpp"
#include <gtest/gtest.h>

using namespace evmmax::bn254;
using namespace intx;


TEST(evmmax, bn254_pairing)
{
{
// vG1[0] == -vG1[1]
const std::vector<Point> vG1{
{
0x1c76476f4def4bb94541d57ebba1193381ffa7aa76ada664dd31c16024c43f59_u256,
0x3034dd2920f673e204fee2811c678745fc819b55d3e9d294e45c9b03a76aef41_u256,
},
{
0x1c76476f4def4bb94541d57ebba1193381ffa7aa76ada664dd31c16024c43f59_u256,
0x2f7149c03b2c47b35163356519d1179affcf3b9487f7f857c3f11331120e06_u256,
},
};

const std::vector<ExtPoint> vG2{
{
{
0x04bf11ca01483bfa8b34b43561848d28905960114c8ac04049af4b6315a41678_u256,
0x209dd15ebff5d46c4bd888e51a93cf99a7329636c63514396b4a452003a35bf7_u256,
},
{
0x120a2a4cf30c1bf9845f20c6fe39e07ea2cce61f0c9bb048165fe5e4de877550_u256,
0x2bb8324af6cfc93537a2ad1a445cfd0ca2a71acd7ac41fadbf933c2a51be344d_u256,
},
},
{
{
0x04bf11ca01483bfa8b34b43561848d28905960114c8ac04049af4b6315a41678_u256,
0x209dd15ebff5d46c4bd888e51a93cf99a7329636c63514396b4a452003a35bf7_u256,
},
{
0x120a2a4cf30c1bf9845f20c6fe39e07ea2cce61f0c9bb048165fe5e4de877550_u256,
0x2bb8324af6cfc93537a2ad1a445cfd0ca2a71acd7ac41fadbf933c2a51be344d_u256,
},
},
};

EXPECT_EQ(pairing(vG2, vG1), true);
}

{
// vG2[0] == -vG2[1]
const std::vector<Point> vG1{
{
0x1c76476f4def4bb94541d57ebba1193381ffa7aa76ada664dd31c16024c43f59_u256,
0x3034dd2920f673e204fee2811c678745fc819b55d3e9d294e45c9b03a76aef41_u256,
},
{
0x1c76476f4def4bb94541d57ebba1193381ffa7aa76ada664dd31c16024c43f59_u256,
0x3034dd2920f673e204fee2811c678745fc819b55d3e9d294e45c9b03a76aef41_u256,
},
};

const std::vector<ExtPoint> vG2{
{
{
0x04bf11ca01483bfa8b34b43561848d28905960114c8ac04049af4b6315a41678_u256,
0x209dd15ebff5d46c4bd888e51a93cf99a7329636c63514396b4a452003a35bf7_u256,
},
{
0x120a2a4cf30c1bf9845f20c6fe39e07ea2cce61f0c9bb048165fe5e4de877550_u256,
0x2bb8324af6cfc93537a2ad1a445cfd0ca2a71acd7ac41fadbf933c2a51be344d_u256,
},
},
{
{
0x04bf11ca01483bfa8b34b43561848d28905960114c8ac04049af4b6315a41678_u256,
0x209dd15ebff5d46c4bd888e51a93cf99a7329636c63514396b4a452003a35bf7_u256,
},
{
0x1e5a2425ee25843033f124ef834777def4b484725bd61a4525c0a631f9f587f7_u256,
0x4ac1c27ea61d6f480ad989c3d245b50f4da4fc3edadaadf7c8d4fec86bec8fa_u256,
},
},
};

EXPECT_EQ(pairing(vG2, vG1), true);
}

{
// vG1[0] = vG1[0] * 17
const std::vector<Point> vG1{
{
0x22980b2e458ec77e258b19ca3a7b46181f63c6536307acae03eea236f6919eeb_u256,
0x4eab993e2ba2cca2b08c216645e3fbcf80ae67515b2c49806c17b90c9d3cad3_u256,
},
{
0x1c76476f4def4bb94541d57ebba1193381ffa7aa76ada664dd31c16024c43f59_u256,
0x3034dd2920f673e204fee2811c678745fc819b55d3e9d294e45c9b03a76aef41_u256,
},
};

// vG2[1] = -vG2[1] * 16
const std::vector<ExtPoint> vG2{
{
{
0x04bf11ca01483bfa8b34b43561848d28905960114c8ac04049af4b6315a41678_u256,
0x209dd15ebff5d46c4bd888e51a93cf99a7329636c63514396b4a452003a35bf7_u256,
},
{
0x120a2a4cf30c1bf9845f20c6fe39e07ea2cce61f0c9bb048165fe5e4de877550_u256,
0x2bb8324af6cfc93537a2ad1a445cfd0ca2a71acd7ac41fadbf933c2a51be344d_u256,
},
},
{
{
0x14191bd65f51663a1d4ad71d8480c3c3260d598aab6ed95681f773abade7fd7a_u256,
0x299c79589dfb51fd6925fce3a7fc15c441fdafaa24f0d09b7c443befdddde4e5_u256,
},
{
0x1d710ac19a995c6395f33be7f3dcd75e0632a006d196da6b4c9ba78708b6bb78_u256,
0xcae1001513ae5ddf742aa6dc2f52457d9b14e17765dd74fc098ad06045d434e_u256,
},
},
};

EXPECT_EQ(pairing(vG2, vG1), false);
}

{
// vG1[0] = vG1[0] * 17
const std::vector<Point> vG1{
{
0x22980b2e458ec77e258b19ca3a7b46181f63c6536307acae03eea236f6919eeb_u256,
0x4eab993e2ba2cca2b08c216645e3fbcf80ae67515b2c49806c17b90c9d3cad3_u256,
},
{
0x1c76476f4def4bb94541d57ebba1193381ffa7aa76ada664dd31c16024c43f59_u256,
0x3034dd2920f673e204fee2811c678745fc819b55d3e9d294e45c9b03a76aef41_u256,
},
};

// vG2[1] = -vG2[1] * 17
const std::vector<ExtPoint> vG2{
{
{
0x04bf11ca01483bfa8b34b43561848d28905960114c8ac04049af4b6315a41678_u256,
0x209dd15ebff5d46c4bd888e51a93cf99a7329636c63514396b4a452003a35bf7_u256,
},
{
0x120a2a4cf30c1bf9845f20c6fe39e07ea2cce61f0c9bb048165fe5e4de877550_u256,
0x2bb8324af6cfc93537a2ad1a445cfd0ca2a71acd7ac41fadbf933c2a51be344d_u256,
},
},
{
{
0x11eeb08db4fe0df9d7617f11f5f8f488d643510f825f3730ffb038c84c9260fd_u256,
0x12bf46039aa40a61762bf97b1bb028cebc6d42e46bbbe67f715eda54808b74c4_u256,
},
{
0x42b65e62de1fd24534db81fd72e7ee832637948c1c466ccb08171e503f23e72_u256,
0x197a5efb333448885788690df5af2211c1697dd8b7b1f8845b4e30a909d2b0f5_u256,
},
},
};

EXPECT_EQ(pairing(vG2, vG1), true);
}
}

0 comments on commit db9e78e

Please sign in to comment.