@pytest.mark.parametrize(
"input_data,expected_output,vector_gas_value",
# Test vectors from the reference spec (from the cryptography team)
vectors_from_file("mul_G1_bls.json")
+ [
# Basic multiplication test cases.
pytest.param(
Spec.INF_G1 + Scalar(0),
Spec.INF_G1,
None,
id="zero_times_inf",
),
pytest.param(
Spec.INF_G1 + Scalar(1),
Spec.INF_G1,
None,
id="one_times_inf",
),
pytest.param(
Spec.INF_G1 + Scalar(2),
Spec.INF_G1,
None,
id="two_times_inf",
),
pytest.param(
Spec.INF_G1 + Scalar(Spec.Q),
Spec.INF_G1,
None,
id="q_times_inf",
),
pytest.param(
Spec.INF_G1 + Scalar(2**256 - 1),
Spec.INF_G1,
None,
id="max_scalar_times_inf",
),
pytest.param(
Spec.G1 + Scalar(0),
Spec.INF_G1,
None,
id="zero_times_generator",
),
pytest.param(
Spec.P1 + Scalar(0),
Spec.INF_G1,
None,
id="zero_times_point",
),
pytest.param(
Spec.G1 + Scalar(1),
Spec.G1,
None,
id="one_times_generator",
),
pytest.param(
Spec.P1 + Scalar(1),
Spec.P1,
None,
id="one_times_point",
),
pytest.param(
Spec.P1 + Scalar(2**256 - 1),
PointG1(
0x3DA1F13DDEF2B8B5A46CD543CE56C0A90B8B3B0D6D43DEC95836A5FD2BACD6AA8F692601F870CF22E05DDA5E83F460B,
0x18D64F3C0E9785365CBDB375795454A8A4FA26F30B9C4F6E33CA078EB5C29B7AEA478B076C619BC1ED22B14C95569B2D,
),
None,
id="max_scalar_times_point",
),
# Subgroup related test cases.
pytest.param(
Spec.P1 + Scalar(Spec.Q - 1),
-Spec.P1, # negated P1
None,
id="q_minus_1_times_point",
),
pytest.param(
Spec.P1 + Scalar(Spec.Q),
Spec.INF_G1,
None,
id="q_times_point",
),
pytest.param(
Spec.G1 + Scalar(Spec.Q),
Spec.INF_G1,
None,
id="q_times_generator",
),
pytest.param(
Spec.P1 + Scalar(Spec.Q + 1),
Spec.P1,
None,
id="q_plus_1_times_point",
),
pytest.param(
Spec.P1 + Scalar(2 * Spec.Q),
Spec.INF_G1,
None,
id="2q_times_point",
),
pytest.param(
Spec.P1 + Scalar((2**256 // Spec.Q) * Spec.Q),
Spec.INF_G1,
None,
id="large_multiple_of_q_times_point",
),
],
)
def test_valid(
state_test: StateTestFiller,
pre: Alloc,
post: dict,
tx: Transaction,
) -> None:
"""Test the BLS12_G1MUL precompile."""
state_test(
env=Environment(),
pre=pre,
tx=tx,
post=post,
)