Skip to content

Commit d60b904

Browse files
type(refactor): EIP-7951 secp256r1 Test Vector File Reorganization (#2184)
* Separate first three secp256r1 vector topic files * Extract another two topic files * Three more topic separations * Generalize infinity point topic, add test cases * Additional grouping * More sorting * Final test cases sorted * Delete original file * Apply suggestions from code review Co-authored-by: spencer <[email protected]> * Small fixes * Linting --------- Co-authored-by: spencer <[email protected]>
1 parent 6907b09 commit d60b904

12 files changed

+2119
-2064
lines changed

tests/osaka/eip7951_p256verify_precompiles/test_p256verify.py

Lines changed: 41 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,16 +30,53 @@
3030

3131
@pytest.mark.parametrize(
3232
"input_data,expected_output,vector_gas_value",
33-
vectors_from_file("secp256r1_test.json"),
34-
# Test vectors generated from Wycheproof's ECDSA secp256r1 SHA-256 test suite
33+
vectors_from_file("secp256r1_signature_specific.json")
34+
+ vectors_from_file("secp256r1_shamir_multiplication.json")
35+
+ vectors_from_file("secp256r1_special_case_hash.json")
36+
+ vectors_from_file("secp256r1_u1_u2.json")
37+
+ vectors_from_file("secp256r1_k_and_s.json")
38+
+ vectors_from_file("secp256r1_public_key.json"),
39+
# Test vectors generated from Wycheproof's ECDSA secp256r1 SHA-256 test suite, valid cases
3540
# Source: https://github.com/C2SP/wycheproof/blob/main/testvectors/ecdsa_secp256r1_sha256_test.json
3641
)
3742
@pytest.mark.parametrize("precompile_address", [Spec.P256VERIFY], ids=[""])
3843
@EIPChecklist.Precompile.Test.CallContexts.Normal()
3944
@EIPChecklist.Precompile.Test.Inputs.Valid()
4045
@EIPChecklist.Precompile.Test.Inputs.MaxValues()
41-
def test_valid(state_test: StateTestFiller, pre: Alloc, post: dict, tx: Transaction):
42-
"""Test P256Verify precompile."""
46+
def test_wycheproof_valid(state_test: StateTestFiller, pre: Alloc, post: dict, tx: Transaction):
47+
"""Test P256Verify precompile with Wycheproof test suite (valid cases)."""
48+
state_test(env=Environment(), pre=pre, post=post, tx=tx)
49+
50+
51+
@pytest.mark.parametrize(
52+
"input_data,expected_output,vector_gas_value",
53+
vectors_from_file("secp256r1_special_case_r_s.json")
54+
+ vectors_from_file("secp256r1_modified_r_s.json"),
55+
# Test vectors generated from Wycheproof's ECDSA secp256r1 SHA-256 test suite, invalid cases
56+
# Source: https://github.com/C2SP/wycheproof/blob/main/testvectors/ecdsa_secp256r1_sha256_test.json
57+
)
58+
@pytest.mark.parametrize("precompile_address", [Spec.P256VERIFY], ids=[""])
59+
@EIPChecklist.Precompile.Test.CallContexts.Normal()
60+
@EIPChecklist.Precompile.Test.Inputs.Invalid()
61+
@EIPChecklist.Precompile.Test.Inputs.MaxValues()
62+
def test_wycheproof_invalid(state_test: StateTestFiller, pre: Alloc, post: dict, tx: Transaction):
63+
"""Test P256Verify precompile with Wycheproof test suite (invalid cases)."""
64+
state_test(env=Environment(), pre=pre, post=post, tx=tx)
65+
66+
67+
@pytest.mark.parametrize(
68+
"input_data,expected_output,vector_gas_value",
69+
vectors_from_file("secp256r1_small_large_r_s.json")
70+
+ vectors_from_file("secp256r1_special_points.json"),
71+
# Test vectors generated from Wycheproof's ECDSA secp256r1 SHA-256 test suite,
72+
# valid/invalid cases
73+
# Source: https://github.com/C2SP/wycheproof/blob/main/testvectors/ecdsa_secp256r1_sha256_test.json
74+
)
75+
@pytest.mark.parametrize("precompile_address", [Spec.P256VERIFY], ids=[""])
76+
@EIPChecklist.Precompile.Test.CallContexts.Normal()
77+
@EIPChecklist.Precompile.Test.Inputs.MaxValues()
78+
def test_wycheproof_extra(state_test: StateTestFiller, pre: Alloc, post: dict, tx: Transaction):
79+
"""Test P256Verify precompile with Wycheproof test suite (mixed valid/invalid cases)."""
4380
state_test(env=Environment(), pre=pre, post=post, tx=tx)
4481

4582

Lines changed: 170 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,170 @@
1+
[
2+
{
3+
"Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050237cf27b188d034f7e8a52380304b51ac3c08969e277f21b35a60b48fc47669978555555550000000055555555555555553ef7a8e48d07df81a693439654210c704fea55b32cb32aca0c12c4cd0abfb4e64b0f5a516e578c016591a93f5a0fbcc5d7d3fd10b2be668c547b212f6bb14c88f0fecd38a8a4b2c785ed3be62ce4b280",
4+
"Expected": "0000000000000000000000000000000000000000000000000000000000000001",
5+
"Gas": 6900,
6+
"Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #176: extreme value for k and edgecase s",
7+
"NoBenchmark": false
8+
},
9+
{
10+
"Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050237cf27b188d034f7e8a52380304b51ac3c08969e277f21b35a60b48fc47669978b6db6db6249249254924924924924924625bd7a09bec4ca81bcdd9f8fd6b63ccc6a771527024227792170a6f8eee735bf32b7f98af669ead299802e32d7c3107bc3b4b5e65ab887bbd343572b3e5619261fe3a073e2ffd78412f726867db589e",
11+
"Expected": "0000000000000000000000000000000000000000000000000000000000000001",
12+
"Gas": 6900,
13+
"Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #177: extreme value for k and s^-1",
14+
"NoBenchmark": false
15+
},
16+
{
17+
"Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050237cf27b188d034f7e8a52380304b51ac3c08969e277f21b35a60b48fc47669978cccccccc00000000cccccccccccccccc971f2ef152794b9d8fc7d568c9e8eaa7851c2bbad08e54ec7a9af99f49f03644d6ec6d59b207fec98de85a7d15b956efcee9960283045075684b410be8d0f7494b91aa2379f60727319f10ddeb0fe9d6",
18+
"Expected": "0000000000000000000000000000000000000000000000000000000000000001",
19+
"Gas": 6900,
20+
"Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #178: extreme value for k and s^-1",
21+
"NoBenchmark": false
22+
},
23+
{
24+
"Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050237cf27b188d034f7e8a52380304b51ac3c08969e277f21b35a60b48fc476699783333333300000000333333333333333325c7cbbc549e52e763f1f55a327a3aaaf6417c8a670584e388676949e53da7fc55911ff68318d1bf3061205acb19c48f8f2b743df34ad0f72674acb7505929784779cd9ac916c3669ead43026ab6d43f",
25+
"Expected": "0000000000000000000000000000000000000000000000000000000000000001",
26+
"Gas": 6900,
27+
"Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #179: extreme value for k and s^-1",
28+
"NoBenchmark": false
29+
},
30+
{
31+
"Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050237cf27b188d034f7e8a52380304b51ac3c08969e277f21b35a60b48fc4766997849249248db6db6dbb6db6db6db6db6db5a8b230d0b2b51dcd7ebf0c9fef7c185501421277be45a5eefec6c639930d636032565af420cf3373f557faa7f8a06438673d6cb6076e1cfcdc7dfe7384c8e5cac08d74501f2ae6e89cad195d0aa1371",
32+
"Expected": "0000000000000000000000000000000000000000000000000000000000000001",
33+
"Gas": 6900,
34+
"Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #180: extreme value for k and s^-1",
35+
"NoBenchmark": false
36+
},
37+
{
38+
"Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050237cf27b188d034f7e8a52380304b51ac3c08969e277f21b35a60b48fc4766997816a4502e2781e11ac82cbc9d1edd8c981584d13e18411e2f6e0478c34416e3bb0d935bf9ffc115a527735f729ca8a4ca23ee01a4894adf0e3415ac84e808bb343195a3762fea29ed38912bd9ea6c4fde70c3050893a4375850ce61d82eba33c5",
39+
"Expected": "0000000000000000000000000000000000000000000000000000000000000001",
40+
"Gas": 6900,
41+
"Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #181: extreme value for k",
42+
"NoBenchmark": false
43+
},
44+
{
45+
"Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050236b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296555555550000000055555555555555553ef7a8e48d07df81a693439654210c705e59f50708646be8a589355014308e60b668fb670196206c41e748e64e4dca215de37fee5c97bcaf7144d5b459982f52eeeafbdf03aacbafef38e213624a01de",
46+
"Expected": "0000000000000000000000000000000000000000000000000000000000000001",
47+
"Gas": 6900,
48+
"Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #182: extreme value for k and edgecase s",
49+
"NoBenchmark": false
50+
},
51+
{
52+
"Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050236b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296b6db6db6249249254924924924924924625bd7a09bec4ca81bcdd9f8fd6b63cc169fb797325843faff2f7a5b5445da9e2fd6226f7ef90ef0bfe924104b02db8e7bbb8de662c7b9b1cf9b22f7a2e582bd46d581d68878efb2b861b131d8a1d667",
53+
"Expected": "0000000000000000000000000000000000000000000000000000000000000001",
54+
"Gas": 6900,
55+
"Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #183: extreme value for k and s^-1",
56+
"NoBenchmark": false
57+
},
58+
{
59+
"Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050236b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296cccccccc00000000cccccccccccccccc971f2ef152794b9d8fc7d568c9e8eaa7271cd89c000143096b62d4e9e4ca885aef2f7023d18affdaf8b7b548981487540a1c6e954e32108435b55fa385b0f76481a609b9149ccb4b02b2ca47fe8e4da5",
60+
"Expected": "0000000000000000000000000000000000000000000000000000000000000001",
61+
"Gas": 6900,
62+
"Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #184: extreme value for k and s^-1",
63+
"NoBenchmark": false
64+
},
65+
{
66+
"Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050236b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c2963333333300000000333333333333333325c7cbbc549e52e763f1f55a327a3aaa3d0bc7ed8f09d2cb7ddb46ebc1ed799ab1563a9ab84bf524587a220afe499c12e22dc3b3c103824a4f378d96adb0a408abf19ce7d68aa6244f78cb216fa3f8df",
67+
"Expected": "0000000000000000000000000000000000000000000000000000000000000001",
68+
"Gas": 6900,
69+
"Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #185: extreme value for k and s^-1",
70+
"NoBenchmark": false
71+
},
72+
{
73+
"Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050236b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c29649249248db6db6dbb6db6db6db6db6db5a8b230d0b2b51dcd7ebf0c9fef7c185a6c885ade1a4c566f9bb010d066974abb281797fa701288c721bcbd23663a9b72e424b690957168d193a6096fc77a2b004a9c7d467e007e1f2058458f98af316",
74+
"Expected": "0000000000000000000000000000000000000000000000000000000000000001",
75+
"Gas": 6900,
76+
"Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #186: extreme value for k and s^-1",
77+
"NoBenchmark": false
78+
},
79+
{
80+
"Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050236b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c29616a4502e2781e11ac82cbc9d1edd8c981584d13e18411e2f6e0478c34416e3bb8d3c2c2c3b765ba8289e6ac3812572a25bf75df62d87ab7330c3bdbad9ebfa5c4c6845442d66935b238578d43aec54f7caa1621d1af241d4632e0b780c423f5d",
81+
"Expected": "0000000000000000000000000000000000000000000000000000000000000001",
82+
"Gas": 6900,
83+
"Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #187: extreme value for k",
84+
"NoBenchmark": false
85+
},
86+
{
87+
"Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e257cf27b188d034f7e8a52380304b51ac3c08969e277f21b35a60b48fc47669978555555550000000055555555555555553ef7a8e48d07df81a693439654210c70961691a5e960d07a301dbbad4d86247ec27d7089faeb3ddd1add395efff1e0fe7254622cc371866cdf990d2c5377790e37d1f1519817f09a231bd260a9e78aeb",
88+
"Expected": "0000000000000000000000000000000000000000000000000000000000000001",
89+
"Gas": 6900,
90+
"Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #694: extreme value for k and edgecase s",
91+
"NoBenchmark": false
92+
},
93+
{
94+
"Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e257cf27b188d034f7e8a52380304b51ac3c08969e277f21b35a60b48fc47669978b6db6db6249249254924924924924924625bd7a09bec4ca81bcdd9f8fd6b63cc5d283e13ce8ca60da868e3b0fb33e6b4f1074793274e2928250e71e2aca63e9c214dc74fa25371fb4d9e506d418ed9a1bfd6d0c8bb6591d3e0f44505a84886ce",
95+
"Expected": "0000000000000000000000000000000000000000000000000000000000000001",
96+
"Gas": 6900,
97+
"Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #695: extreme value for k and s^-1",
98+
"NoBenchmark": false
99+
},
100+
{
101+
"Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e257cf27b188d034f7e8a52380304b51ac3c08969e277f21b35a60b48fc47669978cccccccc00000000cccccccccccccccc971f2ef152794b9d8fc7d568c9e8eaa70fc351da038ae0803bd1d86514ae0462f9f8216551d9315aa9d297f792eef6a341c74eed786f2d33da35360ca7aa925e753f00d6077a1e9e5fc339d634019c73",
102+
"Expected": "0000000000000000000000000000000000000000000000000000000000000001",
103+
"Gas": 6900,
104+
"Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #696: extreme value for k and s^-1",
105+
"NoBenchmark": false
106+
},
107+
{
108+
"Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e257cf27b188d034f7e8a52380304b51ac3c08969e277f21b35a60b48fc476699783333333300000000333333333333333325c7cbbc549e52e763f1f55a327a3aaaa1e34c8f16d138673fee55c080547c2bfd4de7550065f638322bba9430ce4b60662be9bb512663aa4d7df8ab3f3b4181c5d44a7bdf42436620b7d8a6b81ac936",
109+
"Expected": "0000000000000000000000000000000000000000000000000000000000000001",
110+
"Gas": 6900,
111+
"Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #697: extreme value for k and s^-1",
112+
"NoBenchmark": false
113+
},
114+
{
115+
"Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e257cf27b188d034f7e8a52380304b51ac3c08969e277f21b35a60b48fc4766997849249248db6db6dbb6db6db6db6db6db5a8b230d0b2b51dcd7ebf0c9fef7c1857e1a8a8338d7fd8cf41d322a302d2078a87a23c7186150ed7cda6e52817c1bdfd0a9135a89d21ce821e29014b2898349254d748272b2d4eb8d59ee34c615377f",
116+
"Expected": "0000000000000000000000000000000000000000000000000000000000000001",
117+
"Gas": 6900,
118+
"Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #698: extreme value for k and s^-1",
119+
"NoBenchmark": false
120+
},
121+
{
122+
"Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e257cf27b188d034f7e8a52380304b51ac3c08969e277f21b35a60b48fc4766997816a4502e2781e11ac82cbc9d1edd8c981584d13e18411e2f6e0478c34416e3bb5c19fe227a61abc65c61ee7a018cc9571b2c6f663ea33583f76a686f64be078b7b4a0d734940f613d52bc48673b457c2cf78492490a5cc5606c0541d17b24ddb",
123+
"Expected": "0000000000000000000000000000000000000000000000000000000000000001",
124+
"Gas": 6900,
125+
"Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #699: extreme value for k",
126+
"NoBenchmark": false
127+
},
128+
{
129+
"Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e256b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296555555550000000055555555555555553ef7a8e48d07df81a693439654210c70db02d1f3421d600e9d9ef9e47419dba3208eed08c2d4189a5db63abeb2739666e0ed26967b9ada9ed7ffe480827f90a0d210d5fd8ec628e31715e6b24125512a",
130+
"Expected": "0000000000000000000000000000000000000000000000000000000000000001",
131+
"Gas": 6900,
132+
"Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #700: extreme value for k and edgecase s",
133+
"NoBenchmark": false
134+
},
135+
{
136+
"Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e256b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296b6db6db6249249254924924924924924625bd7a09bec4ca81bcdd9f8fd6b63cc6222d1962655501893c29e441395b6c05711bd3ed5a0ef72cfab338b88229c4baaae079cb44a1af070362aaa520ee24cac2626423b0bf81af1c54311d8e2fd23",
137+
"Expected": "0000000000000000000000000000000000000000000000000000000000000001",
138+
"Gas": 6900,
139+
"Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #701: extreme value for k and s^-1",
140+
"NoBenchmark": false
141+
},
142+
{
143+
"Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e256b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296cccccccc00000000cccccccccccccccc971f2ef152794b9d8fc7d568c9e8eaa74ccfa24c67f3def7fa81bc99c70bb0419c0952ba599f4c03361da184b04cdca5db76b797f7f41d9c729a2219478a7e629728df870800be8cf6ca7a0a82153bfa",
144+
"Expected": "0000000000000000000000000000000000000000000000000000000000000001",
145+
"Gas": 6900,
146+
"Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #702: extreme value for k and s^-1",
147+
"NoBenchmark": false
148+
},
149+
{
150+
"Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e256b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c2963333333300000000333333333333333325c7cbbc549e52e763f1f55a327a3aaaea1c72c91034036bac71402b6e9ecc4af3dbde7a99dc574061e99fefff9d84dab7dd057e75b78ac6f56e34eb048f0a9d29d5d055408c90d02bc2ea918c18cb63",
151+
"Expected": "0000000000000000000000000000000000000000000000000000000000000001",
152+
"Gas": 6900,
153+
"Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #703: extreme value for k and s^-1",
154+
"NoBenchmark": false
155+
},
156+
{
157+
"Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e256b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c29649249248db6db6dbb6db6db6db6db6db5a8b230d0b2b51dcd7ebf0c9fef7c185c2879a66d86cb20b820b7795da2da62b38924f7817d1cd350d936988e90e79bc5431a7268ff6931c7a759de024eff90bcb0177216db6fd1f3aaaa11fa3b6a083",
158+
"Expected": "0000000000000000000000000000000000000000000000000000000000000001",
159+
"Gas": 6900,
160+
"Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #704: extreme value for k and s^-1",
161+
"NoBenchmark": false
162+
},
163+
{
164+
"Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e256b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c29616a4502e2781e11ac82cbc9d1edd8c981584d13e18411e2f6e0478c34416e3bbab1c0f273f74abc2b848c75006f2ef3c54c26df27711b06558f455079aee0ba3df510f2ecef6d9a05997c776f14ad6456c179f0a13af1771e4d6c37fa48b47f2",
165+
"Expected": "0000000000000000000000000000000000000000000000000000000000000001",
166+
"Gas": 6900,
167+
"Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #705: extreme value for k",
168+
"NoBenchmark": false
169+
}
170+
]

0 commit comments

Comments
 (0)