Skip to content

Commit db9e78e

Browse files
committed
evmmax: Add ate pairing unit tests.
1 parent 5e2e777 commit db9e78e

File tree

2 files changed

+172
-0
lines changed

2 files changed

+172
-0
lines changed

test/unittests/CMakeLists.txt

+1
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ target_sources(
3838
evm_benchmark_test.cpp
3939
evmmax_bn254_add_test.cpp
4040
evmmax_bn254_mul_test.cpp
41+
evmmax_bn254_pairing_test.cpp
4142
evmmax_test.cpp
4243
evmmax_secp256k1_test.cpp
4344
evmone_test.cpp
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,171 @@
1+
// evmone: Fast Ethereum Virtual Machine implementation
2+
// Copyright 2023 The evmone Authors.
3+
// SPDX-License-Identifier: Apache-2.0
4+
5+
#include "evmone_precompiles/bn254.hpp"
6+
#include <gtest/gtest.h>
7+
8+
using namespace evmmax::bn254;
9+
using namespace intx;
10+
11+
12+
TEST(evmmax, bn254_pairing)
13+
{
14+
{
15+
// vG1[0] == -vG1[1]
16+
const std::vector<Point> vG1{
17+
{
18+
0x1c76476f4def4bb94541d57ebba1193381ffa7aa76ada664dd31c16024c43f59_u256,
19+
0x3034dd2920f673e204fee2811c678745fc819b55d3e9d294e45c9b03a76aef41_u256,
20+
},
21+
{
22+
0x1c76476f4def4bb94541d57ebba1193381ffa7aa76ada664dd31c16024c43f59_u256,
23+
0x2f7149c03b2c47b35163356519d1179affcf3b9487f7f857c3f11331120e06_u256,
24+
},
25+
};
26+
27+
const std::vector<ExtPoint> vG2{
28+
{
29+
{
30+
0x04bf11ca01483bfa8b34b43561848d28905960114c8ac04049af4b6315a41678_u256,
31+
0x209dd15ebff5d46c4bd888e51a93cf99a7329636c63514396b4a452003a35bf7_u256,
32+
},
33+
{
34+
0x120a2a4cf30c1bf9845f20c6fe39e07ea2cce61f0c9bb048165fe5e4de877550_u256,
35+
0x2bb8324af6cfc93537a2ad1a445cfd0ca2a71acd7ac41fadbf933c2a51be344d_u256,
36+
},
37+
},
38+
{
39+
{
40+
0x04bf11ca01483bfa8b34b43561848d28905960114c8ac04049af4b6315a41678_u256,
41+
0x209dd15ebff5d46c4bd888e51a93cf99a7329636c63514396b4a452003a35bf7_u256,
42+
},
43+
{
44+
0x120a2a4cf30c1bf9845f20c6fe39e07ea2cce61f0c9bb048165fe5e4de877550_u256,
45+
0x2bb8324af6cfc93537a2ad1a445cfd0ca2a71acd7ac41fadbf933c2a51be344d_u256,
46+
},
47+
},
48+
};
49+
50+
EXPECT_EQ(pairing(vG2, vG1), true);
51+
}
52+
53+
{
54+
// vG2[0] == -vG2[1]
55+
const std::vector<Point> vG1{
56+
{
57+
0x1c76476f4def4bb94541d57ebba1193381ffa7aa76ada664dd31c16024c43f59_u256,
58+
0x3034dd2920f673e204fee2811c678745fc819b55d3e9d294e45c9b03a76aef41_u256,
59+
},
60+
{
61+
0x1c76476f4def4bb94541d57ebba1193381ffa7aa76ada664dd31c16024c43f59_u256,
62+
0x3034dd2920f673e204fee2811c678745fc819b55d3e9d294e45c9b03a76aef41_u256,
63+
},
64+
};
65+
66+
const std::vector<ExtPoint> vG2{
67+
{
68+
{
69+
0x04bf11ca01483bfa8b34b43561848d28905960114c8ac04049af4b6315a41678_u256,
70+
0x209dd15ebff5d46c4bd888e51a93cf99a7329636c63514396b4a452003a35bf7_u256,
71+
},
72+
{
73+
0x120a2a4cf30c1bf9845f20c6fe39e07ea2cce61f0c9bb048165fe5e4de877550_u256,
74+
0x2bb8324af6cfc93537a2ad1a445cfd0ca2a71acd7ac41fadbf933c2a51be344d_u256,
75+
},
76+
},
77+
{
78+
{
79+
0x04bf11ca01483bfa8b34b43561848d28905960114c8ac04049af4b6315a41678_u256,
80+
0x209dd15ebff5d46c4bd888e51a93cf99a7329636c63514396b4a452003a35bf7_u256,
81+
},
82+
{
83+
0x1e5a2425ee25843033f124ef834777def4b484725bd61a4525c0a631f9f587f7_u256,
84+
0x4ac1c27ea61d6f480ad989c3d245b50f4da4fc3edadaadf7c8d4fec86bec8fa_u256,
85+
},
86+
},
87+
};
88+
89+
EXPECT_EQ(pairing(vG2, vG1), true);
90+
}
91+
92+
{
93+
// vG1[0] = vG1[0] * 17
94+
const std::vector<Point> vG1{
95+
{
96+
0x22980b2e458ec77e258b19ca3a7b46181f63c6536307acae03eea236f6919eeb_u256,
97+
0x4eab993e2ba2cca2b08c216645e3fbcf80ae67515b2c49806c17b90c9d3cad3_u256,
98+
},
99+
{
100+
0x1c76476f4def4bb94541d57ebba1193381ffa7aa76ada664dd31c16024c43f59_u256,
101+
0x3034dd2920f673e204fee2811c678745fc819b55d3e9d294e45c9b03a76aef41_u256,
102+
},
103+
};
104+
105+
// vG2[1] = -vG2[1] * 16
106+
const std::vector<ExtPoint> vG2{
107+
{
108+
{
109+
0x04bf11ca01483bfa8b34b43561848d28905960114c8ac04049af4b6315a41678_u256,
110+
0x209dd15ebff5d46c4bd888e51a93cf99a7329636c63514396b4a452003a35bf7_u256,
111+
},
112+
{
113+
0x120a2a4cf30c1bf9845f20c6fe39e07ea2cce61f0c9bb048165fe5e4de877550_u256,
114+
0x2bb8324af6cfc93537a2ad1a445cfd0ca2a71acd7ac41fadbf933c2a51be344d_u256,
115+
},
116+
},
117+
{
118+
{
119+
0x14191bd65f51663a1d4ad71d8480c3c3260d598aab6ed95681f773abade7fd7a_u256,
120+
0x299c79589dfb51fd6925fce3a7fc15c441fdafaa24f0d09b7c443befdddde4e5_u256,
121+
},
122+
{
123+
0x1d710ac19a995c6395f33be7f3dcd75e0632a006d196da6b4c9ba78708b6bb78_u256,
124+
0xcae1001513ae5ddf742aa6dc2f52457d9b14e17765dd74fc098ad06045d434e_u256,
125+
},
126+
},
127+
};
128+
129+
EXPECT_EQ(pairing(vG2, vG1), false);
130+
}
131+
132+
{
133+
// vG1[0] = vG1[0] * 17
134+
const std::vector<Point> vG1{
135+
{
136+
0x22980b2e458ec77e258b19ca3a7b46181f63c6536307acae03eea236f6919eeb_u256,
137+
0x4eab993e2ba2cca2b08c216645e3fbcf80ae67515b2c49806c17b90c9d3cad3_u256,
138+
},
139+
{
140+
0x1c76476f4def4bb94541d57ebba1193381ffa7aa76ada664dd31c16024c43f59_u256,
141+
0x3034dd2920f673e204fee2811c678745fc819b55d3e9d294e45c9b03a76aef41_u256,
142+
},
143+
};
144+
145+
// vG2[1] = -vG2[1] * 17
146+
const std::vector<ExtPoint> vG2{
147+
{
148+
{
149+
0x04bf11ca01483bfa8b34b43561848d28905960114c8ac04049af4b6315a41678_u256,
150+
0x209dd15ebff5d46c4bd888e51a93cf99a7329636c63514396b4a452003a35bf7_u256,
151+
},
152+
{
153+
0x120a2a4cf30c1bf9845f20c6fe39e07ea2cce61f0c9bb048165fe5e4de877550_u256,
154+
0x2bb8324af6cfc93537a2ad1a445cfd0ca2a71acd7ac41fadbf933c2a51be344d_u256,
155+
},
156+
},
157+
{
158+
{
159+
0x11eeb08db4fe0df9d7617f11f5f8f488d643510f825f3730ffb038c84c9260fd_u256,
160+
0x12bf46039aa40a61762bf97b1bb028cebc6d42e46bbbe67f715eda54808b74c4_u256,
161+
},
162+
{
163+
0x42b65e62de1fd24534db81fd72e7ee832637948c1c466ccb08171e503f23e72_u256,
164+
0x197a5efb333448885788690df5af2211c1697dd8b7b1f8845b4e30a909d2b0f5_u256,
165+
},
166+
},
167+
};
168+
169+
EXPECT_EQ(pairing(vG2, vG1), true);
170+
}
171+
}

0 commit comments

Comments
 (0)