Merge pull request #3018 from ethereum/bump-dep
Bump dep packages version and fix lint issues
This commit is contained in:
commit
3552e2f6e8
2
Makefile
2
Makefile
|
@ -143,7 +143,7 @@ lint: pyspec
|
||||||
|
|
||||||
lint_generators: pyspec
|
lint_generators: pyspec
|
||||||
. venv/bin/activate; cd $(TEST_GENERATORS_DIR); \
|
. venv/bin/activate; cd $(TEST_GENERATORS_DIR); \
|
||||||
flake8 --config $(LINTER_CONFIG_FILE)
|
flake8 --config $(LINTER_CONFIG_FILE)
|
||||||
|
|
||||||
compile_deposit_contract:
|
compile_deposit_contract:
|
||||||
@cd $(SOLIDITY_DEPOSIT_CONTRACT_DIR)
|
@cd $(SOLIDITY_DEPOSIT_CONTRACT_DIR)
|
||||||
|
|
38
setup.py
38
setup.py
|
@ -20,7 +20,7 @@ from collections import OrderedDict
|
||||||
def installPackage(package: str):
|
def installPackage(package: str):
|
||||||
subprocess.check_call([sys.executable, '-m', 'pip', 'install', package])
|
subprocess.check_call([sys.executable, '-m', 'pip', 'install', package])
|
||||||
|
|
||||||
RUAMEL_YAML_VERSION = "ruamel.yaml==0.16.5"
|
RUAMEL_YAML_VERSION = "ruamel.yaml==0.17.21"
|
||||||
try:
|
try:
|
||||||
import ruamel.yaml
|
import ruamel.yaml
|
||||||
except ImportError:
|
except ImportError:
|
||||||
|
@ -78,6 +78,7 @@ class VariableDefinition(NamedTuple):
|
||||||
type_name: Optional[str]
|
type_name: Optional[str]
|
||||||
value: str
|
value: str
|
||||||
comment: Optional[str] # e.g. "noqa: E501"
|
comment: Optional[str] # e.g. "noqa: E501"
|
||||||
|
type_hint: Optional[str] # e.g., "Final"
|
||||||
|
|
||||||
|
|
||||||
class SpecObject(NamedTuple):
|
class SpecObject(NamedTuple):
|
||||||
|
@ -152,18 +153,18 @@ def _get_eth2_spec_comment(child: LinkRefDef) -> Optional[str]:
|
||||||
return title[len(ETH2_SPEC_COMMENT_PREFIX):].strip()
|
return title[len(ETH2_SPEC_COMMENT_PREFIX):].strip()
|
||||||
|
|
||||||
|
|
||||||
def _parse_value(name: str, typed_value: str) -> VariableDefinition:
|
def _parse_value(name: str, typed_value: str, type_hint: Optional[str]=None) -> VariableDefinition:
|
||||||
comment = None
|
comment = None
|
||||||
if name == "BLS12_381_Q":
|
if name == "BLS12_381_Q":
|
||||||
comment = "noqa: E501"
|
comment = "noqa: E501"
|
||||||
|
|
||||||
typed_value = typed_value.strip()
|
typed_value = typed_value.strip()
|
||||||
if '(' not in typed_value:
|
if '(' not in typed_value:
|
||||||
return VariableDefinition(type_name=None, value=typed_value, comment=comment)
|
return VariableDefinition(type_name=None, value=typed_value, comment=comment, type_hint=type_hint)
|
||||||
i = typed_value.index('(')
|
i = typed_value.index('(')
|
||||||
type_name = typed_value[:i]
|
type_name = typed_value[:i]
|
||||||
|
|
||||||
return VariableDefinition(type_name=type_name, value=typed_value[i+1:-1], comment=comment)
|
return VariableDefinition(type_name=type_name, value=typed_value[i+1:-1], comment=comment, type_hint=type_hint)
|
||||||
|
|
||||||
|
|
||||||
def get_spec(file_name: Path, preset: Dict[str, str], config: Dict[str, str]) -> SpecObject:
|
def get_spec(file_name: Path, preset: Dict[str, str], config: Dict[str, str]) -> SpecObject:
|
||||||
|
@ -241,10 +242,13 @@ def get_spec(file_name: Path, preset: Dict[str, str], config: Dict[str, str]) ->
|
||||||
|
|
||||||
value_def = _parse_value(name, value)
|
value_def = _parse_value(name, value)
|
||||||
if name in preset:
|
if name in preset:
|
||||||
preset_vars[name] = VariableDefinition(value_def.type_name, preset[name], value_def.comment)
|
preset_vars[name] = VariableDefinition(value_def.type_name, preset[name], value_def.comment, None)
|
||||||
elif name in config:
|
elif name in config:
|
||||||
config_vars[name] = VariableDefinition(value_def.type_name, config[name], value_def.comment)
|
config_vars[name] = VariableDefinition(value_def.type_name, config[name], value_def.comment, None)
|
||||||
else:
|
else:
|
||||||
|
if name == 'ENDIANNESS':
|
||||||
|
# Deal with mypy Literal typing check
|
||||||
|
value_def = _parse_value(name, value, type_hint='Final')
|
||||||
constant_vars[name] = value_def
|
constant_vars[name] = value_def
|
||||||
|
|
||||||
elif isinstance(child, LinkRefDef):
|
elif isinstance(child, LinkRefDef):
|
||||||
|
@ -337,7 +341,7 @@ from dataclasses import (
|
||||||
field,
|
field,
|
||||||
)
|
)
|
||||||
from typing import (
|
from typing import (
|
||||||
Any, Callable, Dict, Set, Sequence, Tuple, Optional, TypeVar, NamedTuple
|
Any, Callable, Dict, Set, Sequence, Tuple, Optional, TypeVar, NamedTuple, Final
|
||||||
)
|
)
|
||||||
|
|
||||||
from eth2spec.utils.ssz.ssz_impl import hash_tree_root, copy, uint_to_bytes
|
from eth2spec.utils.ssz.ssz_impl import hash_tree_root, copy, uint_to_bytes
|
||||||
|
@ -703,7 +707,10 @@ def objects_to_spec(preset_name: str,
|
||||||
|
|
||||||
def format_constant(name: str, vardef: VariableDefinition) -> str:
|
def format_constant(name: str, vardef: VariableDefinition) -> str:
|
||||||
if vardef.type_name is None:
|
if vardef.type_name is None:
|
||||||
out = f'{name} = {vardef.value}'
|
if vardef.type_hint is None:
|
||||||
|
out = f'{name} = {vardef.value}'
|
||||||
|
else:
|
||||||
|
out = f'{name}: {vardef.type_hint} = {vardef.value}'
|
||||||
else:
|
else:
|
||||||
out = f'{name} = {vardef.type_name}({vardef.value})'
|
out = f'{name} = {vardef.type_name}({vardef.value})'
|
||||||
if vardef.comment is not None:
|
if vardef.comment is not None:
|
||||||
|
@ -1115,19 +1122,18 @@ setup(
|
||||||
python_requires=">=3.8, <4",
|
python_requires=">=3.8, <4",
|
||||||
extras_require={
|
extras_require={
|
||||||
"test": ["pytest>=4.4", "pytest-cov", "pytest-xdist"],
|
"test": ["pytest>=4.4", "pytest-cov", "pytest-xdist"],
|
||||||
"lint": ["flake8==3.7.7", "mypy==0.812", "pylint==2.12.2"],
|
"lint": ["flake8==5.0.4", "mypy==0.981", "pylint==2.15.3"],
|
||||||
"generator": ["python-snappy==0.5.4", "filelock"],
|
"generator": ["python-snappy==0.6.1", "filelock"],
|
||||||
},
|
},
|
||||||
install_requires=[
|
install_requires=[
|
||||||
"eth-utils>=1.3.0,<2",
|
"eth-utils>=2.0.0,<3",
|
||||||
"eth-typing>=2.1.0,<3.0.0",
|
"eth-typing>=3.2.0,<4.0.0",
|
||||||
"pycryptodome==3.9.4",
|
"pycryptodome==3.15.0",
|
||||||
"py_ecc==5.2.0",
|
"py_ecc==6.0.0",
|
||||||
"milagro_bls_binding==1.9.0",
|
"milagro_bls_binding==1.9.0",
|
||||||
"dataclasses==0.6",
|
|
||||||
"remerkleable==0.1.24",
|
"remerkleable==0.1.24",
|
||||||
RUAMEL_YAML_VERSION,
|
RUAMEL_YAML_VERSION,
|
||||||
"lru-dict==1.1.6",
|
"lru-dict==1.1.8",
|
||||||
MARKO_VERSION,
|
MARKO_VERSION,
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
|
|
|
@ -101,13 +101,13 @@ def reverse_bits(n: int, order: int) -> int:
|
||||||
#### `bit_reversal_permutation`
|
#### `bit_reversal_permutation`
|
||||||
|
|
||||||
```python
|
```python
|
||||||
def bit_reversal_permutation(l: Sequence[T]) -> Sequence[T]:
|
def bit_reversal_permutation(sequence: Sequence[T]) -> Sequence[T]:
|
||||||
"""
|
"""
|
||||||
Return a copy with bit-reversed permutation. The permutation is an involution (inverts itself).
|
Return a copy with bit-reversed permutation. The permutation is an involution (inverts itself).
|
||||||
|
|
||||||
The input and output are a sequence of generic type ``T`` objects.
|
The input and output are a sequence of generic type ``T`` objects.
|
||||||
"""
|
"""
|
||||||
return [l[reverse_bits(i, len(l))] for i in range(len(l))]
|
return [sequence[reverse_bits(i, len(sequence))] for i in range(len(sequence))]
|
||||||
```
|
```
|
||||||
|
|
||||||
### BLS12-381 helpers
|
### BLS12-381 helpers
|
||||||
|
|
|
@ -46,7 +46,7 @@ def test_from_syncing_to_invalid(spec, state):
|
||||||
|
|
||||||
# Block 0
|
# Block 0
|
||||||
block_0 = build_empty_block_for_next_slot(spec, state)
|
block_0 = build_empty_block_for_next_slot(spec, state)
|
||||||
block_0.body.execution_payload.block_hash = spec.hash(bytes(f'block_0', 'UTF-8'))
|
block_0.body.execution_payload.block_hash = spec.hash(bytes('block_0', 'UTF-8'))
|
||||||
signed_block = state_transition_and_sign_block(spec, state, block_0)
|
signed_block = state_transition_and_sign_block(spec, state, block_0)
|
||||||
yield from add_optimistic_block(spec, mega_store, signed_block, test_steps, status=PayloadStatusV1Status.VALID)
|
yield from add_optimistic_block(spec, mega_store, signed_block, test_steps, status=PayloadStatusV1Status.VALID)
|
||||||
assert spec.get_head(mega_store.fc_store) == mega_store.opt_store.head_block_root
|
assert spec.get_head(mega_store.fc_store) == mega_store.opt_store.head_block_root
|
||||||
|
@ -84,7 +84,7 @@ def test_from_syncing_to_invalid(spec, state):
|
||||||
|
|
||||||
# Now add block 4 to chain `b` with INVALID
|
# Now add block 4 to chain `b` with INVALID
|
||||||
block = build_empty_block_for_next_slot(spec, state)
|
block = build_empty_block_for_next_slot(spec, state)
|
||||||
block.body.execution_payload.block_hash = spec.hash(bytes(f'chain_b_3', 'UTF-8'))
|
block.body.execution_payload.block_hash = spec.hash(bytes('chain_b_3', 'UTF-8'))
|
||||||
block.body.execution_payload.parent_hash = signed_blocks_b[-1].message.body.execution_payload.block_hash
|
block.body.execution_payload.parent_hash = signed_blocks_b[-1].message.body.execution_payload.block_hash
|
||||||
signed_block = state_transition_and_sign_block(spec, state, block)
|
signed_block = state_transition_and_sign_block(spec, state, block)
|
||||||
payload_status = PayloadStatusV1(
|
payload_status = PayloadStatusV1(
|
||||||
|
|
|
@ -89,7 +89,7 @@ def case01_sign():
|
||||||
# Edge case: privkey == 0
|
# Edge case: privkey == 0
|
||||||
expect_exception(bls.Sign, ZERO_PRIVKEY, message)
|
expect_exception(bls.Sign, ZERO_PRIVKEY, message)
|
||||||
expect_exception(milagro_bls.Sign, ZERO_PRIVKEY_BYTES, message)
|
expect_exception(milagro_bls.Sign, ZERO_PRIVKEY_BYTES, message)
|
||||||
yield f'sign_case_zero_privkey', {
|
yield 'sign_case_zero_privkey', {
|
||||||
'input': {
|
'input': {
|
||||||
'privkey': encode_hex(ZERO_PRIVKEY_BYTES),
|
'privkey': encode_hex(ZERO_PRIVKEY_BYTES),
|
||||||
'message': encode_hex(message),
|
'message': encode_hex(message),
|
||||||
|
@ -153,7 +153,7 @@ def case02_verify():
|
||||||
# Invalid pubkey and signature with the point at infinity
|
# Invalid pubkey and signature with the point at infinity
|
||||||
assert not bls.Verify(G1_POINT_AT_INFINITY, SAMPLE_MESSAGE, G2_POINT_AT_INFINITY)
|
assert not bls.Verify(G1_POINT_AT_INFINITY, SAMPLE_MESSAGE, G2_POINT_AT_INFINITY)
|
||||||
assert not milagro_bls.Verify(G1_POINT_AT_INFINITY, SAMPLE_MESSAGE, G2_POINT_AT_INFINITY)
|
assert not milagro_bls.Verify(G1_POINT_AT_INFINITY, SAMPLE_MESSAGE, G2_POINT_AT_INFINITY)
|
||||||
yield f'verify_infinity_pubkey_and_infinity_signature', {
|
yield 'verify_infinity_pubkey_and_infinity_signature', {
|
||||||
'input': {
|
'input': {
|
||||||
'pubkey': encode_hex(G1_POINT_AT_INFINITY),
|
'pubkey': encode_hex(G1_POINT_AT_INFINITY),
|
||||||
'message': encode_hex(SAMPLE_MESSAGE),
|
'message': encode_hex(SAMPLE_MESSAGE),
|
||||||
|
@ -177,7 +177,7 @@ def case03_aggregate():
|
||||||
expect_exception(bls.Aggregate, [])
|
expect_exception(bls.Aggregate, [])
|
||||||
# No signatures to aggregate. Follow IETF BLS spec, return `None` to represent INVALID.
|
# No signatures to aggregate. Follow IETF BLS spec, return `None` to represent INVALID.
|
||||||
# https://tools.ietf.org/html/draft-irtf-cfrg-bls-signature-04#section-2.8
|
# https://tools.ietf.org/html/draft-irtf-cfrg-bls-signature-04#section-2.8
|
||||||
yield f'aggregate_na_signatures', {
|
yield 'aggregate_na_signatures', {
|
||||||
'input': [],
|
'input': [],
|
||||||
'output': None,
|
'output': None,
|
||||||
}
|
}
|
||||||
|
@ -185,7 +185,7 @@ def case03_aggregate():
|
||||||
# Valid to aggregate G2 point at infinity
|
# Valid to aggregate G2 point at infinity
|
||||||
aggregate_sig = bls.Aggregate([G2_POINT_AT_INFINITY])
|
aggregate_sig = bls.Aggregate([G2_POINT_AT_INFINITY])
|
||||||
assert aggregate_sig == milagro_bls.Aggregate([G2_POINT_AT_INFINITY]) == G2_POINT_AT_INFINITY
|
assert aggregate_sig == milagro_bls.Aggregate([G2_POINT_AT_INFINITY]) == G2_POINT_AT_INFINITY
|
||||||
yield f'aggregate_infinity_signature', {
|
yield 'aggregate_infinity_signature', {
|
||||||
'input': [encode_hex(G2_POINT_AT_INFINITY)],
|
'input': [encode_hex(G2_POINT_AT_INFINITY)],
|
||||||
'output': encode_hex(aggregate_sig),
|
'output': encode_hex(aggregate_sig),
|
||||||
}
|
}
|
||||||
|
@ -244,7 +244,7 @@ def case04_fast_aggregate_verify():
|
||||||
# Invalid pubkeys and signature -- len(pubkeys) == 0 and signature == Z1_SIGNATURE
|
# Invalid pubkeys and signature -- len(pubkeys) == 0 and signature == Z1_SIGNATURE
|
||||||
assert not bls.FastAggregateVerify([], message, G2_POINT_AT_INFINITY)
|
assert not bls.FastAggregateVerify([], message, G2_POINT_AT_INFINITY)
|
||||||
assert not milagro_bls.FastAggregateVerify([], message, G2_POINT_AT_INFINITY)
|
assert not milagro_bls.FastAggregateVerify([], message, G2_POINT_AT_INFINITY)
|
||||||
yield f'fast_aggregate_verify_na_pubkeys_and_infinity_signature', {
|
yield 'fast_aggregate_verify_na_pubkeys_and_infinity_signature', {
|
||||||
'input': {
|
'input': {
|
||||||
'pubkeys': [],
|
'pubkeys': [],
|
||||||
'message': encode_hex(message),
|
'message': encode_hex(message),
|
||||||
|
@ -256,7 +256,7 @@ def case04_fast_aggregate_verify():
|
||||||
# Invalid pubkeys and signature -- len(pubkeys) == 0 and signature == 0x00...
|
# Invalid pubkeys and signature -- len(pubkeys) == 0 and signature == 0x00...
|
||||||
assert not bls.FastAggregateVerify([], message, ZERO_SIGNATURE)
|
assert not bls.FastAggregateVerify([], message, ZERO_SIGNATURE)
|
||||||
assert not milagro_bls.FastAggregateVerify([], message, ZERO_SIGNATURE)
|
assert not milagro_bls.FastAggregateVerify([], message, ZERO_SIGNATURE)
|
||||||
yield f'fast_aggregate_verify_na_pubkeys_and_zero_signature', {
|
yield 'fast_aggregate_verify_na_pubkeys_and_zero_signature', {
|
||||||
'input': {
|
'input': {
|
||||||
'pubkeys': [],
|
'pubkeys': [],
|
||||||
'message': encode_hex(message),
|
'message': encode_hex(message),
|
||||||
|
@ -272,7 +272,7 @@ def case04_fast_aggregate_verify():
|
||||||
aggregate_signature = bls.Aggregate(signatures)
|
aggregate_signature = bls.Aggregate(signatures)
|
||||||
assert not bls.FastAggregateVerify(pubkeys_with_infinity, SAMPLE_MESSAGE, aggregate_signature)
|
assert not bls.FastAggregateVerify(pubkeys_with_infinity, SAMPLE_MESSAGE, aggregate_signature)
|
||||||
assert not milagro_bls.FastAggregateVerify(pubkeys_with_infinity, SAMPLE_MESSAGE, aggregate_signature)
|
assert not milagro_bls.FastAggregateVerify(pubkeys_with_infinity, SAMPLE_MESSAGE, aggregate_signature)
|
||||||
yield f'fast_aggregate_verify_infinity_pubkey', {
|
yield 'fast_aggregate_verify_infinity_pubkey', {
|
||||||
'input': {
|
'input': {
|
||||||
'pubkeys': [encode_hex(pubkey) for pubkey in pubkeys_with_infinity],
|
'pubkeys': [encode_hex(pubkey) for pubkey in pubkeys_with_infinity],
|
||||||
'message': encode_hex(SAMPLE_MESSAGE),
|
'message': encode_hex(SAMPLE_MESSAGE),
|
||||||
|
@ -300,7 +300,7 @@ def case05_aggregate_verify():
|
||||||
aggregate_signature = bls.Aggregate(sigs)
|
aggregate_signature = bls.Aggregate(sigs)
|
||||||
assert bls.AggregateVerify(pubkeys, messages, aggregate_signature)
|
assert bls.AggregateVerify(pubkeys, messages, aggregate_signature)
|
||||||
assert milagro_bls.AggregateVerify(pubkeys, messages, aggregate_signature)
|
assert milagro_bls.AggregateVerify(pubkeys, messages, aggregate_signature)
|
||||||
yield f'aggregate_verify_valid', {
|
yield 'aggregate_verify_valid', {
|
||||||
'input': {
|
'input': {
|
||||||
'pubkeys': pubkeys_serial,
|
'pubkeys': pubkeys_serial,
|
||||||
'messages': messages_serial,
|
'messages': messages_serial,
|
||||||
|
@ -312,7 +312,7 @@ def case05_aggregate_verify():
|
||||||
tampered_signature = aggregate_signature[:4] + b'\xff\xff\xff\xff'
|
tampered_signature = aggregate_signature[:4] + b'\xff\xff\xff\xff'
|
||||||
assert not bls.AggregateVerify(pubkey, messages, tampered_signature)
|
assert not bls.AggregateVerify(pubkey, messages, tampered_signature)
|
||||||
assert not milagro_bls.AggregateVerify(pubkeys, messages, tampered_signature)
|
assert not milagro_bls.AggregateVerify(pubkeys, messages, tampered_signature)
|
||||||
yield f'aggregate_verify_tampered_signature', {
|
yield 'aggregate_verify_tampered_signature', {
|
||||||
'input': {
|
'input': {
|
||||||
'pubkeys': pubkeys_serial,
|
'pubkeys': pubkeys_serial,
|
||||||
'messages': messages_serial,
|
'messages': messages_serial,
|
||||||
|
@ -324,7 +324,7 @@ def case05_aggregate_verify():
|
||||||
# Invalid pubkeys and signature -- len(pubkeys) == 0 and signature == Z1_SIGNATURE
|
# Invalid pubkeys and signature -- len(pubkeys) == 0 and signature == Z1_SIGNATURE
|
||||||
assert not bls.AggregateVerify([], [], G2_POINT_AT_INFINITY)
|
assert not bls.AggregateVerify([], [], G2_POINT_AT_INFINITY)
|
||||||
assert not milagro_bls.AggregateVerify([], [], G2_POINT_AT_INFINITY)
|
assert not milagro_bls.AggregateVerify([], [], G2_POINT_AT_INFINITY)
|
||||||
yield f'aggregate_verify_na_pubkeys_and_infinity_signature', {
|
yield 'aggregate_verify_na_pubkeys_and_infinity_signature', {
|
||||||
'input': {
|
'input': {
|
||||||
'pubkeys': [],
|
'pubkeys': [],
|
||||||
'messages': [],
|
'messages': [],
|
||||||
|
@ -336,7 +336,7 @@ def case05_aggregate_verify():
|
||||||
# Invalid pubkeys and signature -- len(pubkeys) == 0 and signature == 0x00...
|
# Invalid pubkeys and signature -- len(pubkeys) == 0 and signature == 0x00...
|
||||||
assert not bls.AggregateVerify([], [], ZERO_SIGNATURE)
|
assert not bls.AggregateVerify([], [], ZERO_SIGNATURE)
|
||||||
assert not milagro_bls.AggregateVerify([], [], ZERO_SIGNATURE)
|
assert not milagro_bls.AggregateVerify([], [], ZERO_SIGNATURE)
|
||||||
yield f'aggregate_verify_na_pubkeys_and_zero_signature', {
|
yield 'aggregate_verify_na_pubkeys_and_zero_signature', {
|
||||||
'input': {
|
'input': {
|
||||||
'pubkeys': [],
|
'pubkeys': [],
|
||||||
'messages': [],
|
'messages': [],
|
||||||
|
@ -350,7 +350,7 @@ def case05_aggregate_verify():
|
||||||
messages_with_sample = messages + [SAMPLE_MESSAGE]
|
messages_with_sample = messages + [SAMPLE_MESSAGE]
|
||||||
assert not bls.AggregateVerify(pubkeys_with_infinity, messages_with_sample, aggregate_signature)
|
assert not bls.AggregateVerify(pubkeys_with_infinity, messages_with_sample, aggregate_signature)
|
||||||
assert not milagro_bls.AggregateVerify(pubkeys_with_infinity, messages_with_sample, aggregate_signature)
|
assert not milagro_bls.AggregateVerify(pubkeys_with_infinity, messages_with_sample, aggregate_signature)
|
||||||
yield f'aggregate_verify_infinity_pubkey', {
|
yield 'aggregate_verify_infinity_pubkey', {
|
||||||
'input': {
|
'input': {
|
||||||
'pubkeys': [encode_hex(pubkey) for pubkey in pubkeys_with_infinity],
|
'pubkeys': [encode_hex(pubkey) for pubkey in pubkeys_with_infinity],
|
||||||
'messages': [encode_hex(message) for message in messages_with_sample],
|
'messages': [encode_hex(message) for message in messages_with_sample],
|
||||||
|
@ -375,7 +375,7 @@ def case06_eth_aggregate_pubkeys():
|
||||||
# Valid pubkeys
|
# Valid pubkeys
|
||||||
aggregate_pubkey = spec.eth_aggregate_pubkeys(PUBKEYS)
|
aggregate_pubkey = spec.eth_aggregate_pubkeys(PUBKEYS)
|
||||||
assert aggregate_pubkey == milagro_bls._AggregatePKs(PUBKEYS)
|
assert aggregate_pubkey == milagro_bls._AggregatePKs(PUBKEYS)
|
||||||
yield f'eth_aggregate_pubkeys_valid_pubkeys', {
|
yield 'eth_aggregate_pubkeys_valid_pubkeys', {
|
||||||
'input': [encode_hex(pubkey) for pubkey in PUBKEYS],
|
'input': [encode_hex(pubkey) for pubkey in PUBKEYS],
|
||||||
'output': encode_hex(aggregate_pubkey),
|
'output': encode_hex(aggregate_pubkey),
|
||||||
}
|
}
|
||||||
|
@ -383,7 +383,7 @@ def case06_eth_aggregate_pubkeys():
|
||||||
# Invalid pubkeys -- len(pubkeys) == 0
|
# Invalid pubkeys -- len(pubkeys) == 0
|
||||||
expect_exception(spec.eth_aggregate_pubkeys, [])
|
expect_exception(spec.eth_aggregate_pubkeys, [])
|
||||||
expect_exception(milagro_bls._AggregatePKs, [])
|
expect_exception(milagro_bls._AggregatePKs, [])
|
||||||
yield f'eth_aggregate_pubkeys_empty_list', {
|
yield 'eth_aggregate_pubkeys_empty_list', {
|
||||||
'input': [],
|
'input': [],
|
||||||
'output': None,
|
'output': None,
|
||||||
}
|
}
|
||||||
|
@ -391,7 +391,7 @@ def case06_eth_aggregate_pubkeys():
|
||||||
# Invalid pubkeys -- [ZERO_PUBKEY]
|
# Invalid pubkeys -- [ZERO_PUBKEY]
|
||||||
expect_exception(spec.eth_aggregate_pubkeys, [ZERO_PUBKEY])
|
expect_exception(spec.eth_aggregate_pubkeys, [ZERO_PUBKEY])
|
||||||
expect_exception(milagro_bls._AggregatePKs, [ZERO_PUBKEY])
|
expect_exception(milagro_bls._AggregatePKs, [ZERO_PUBKEY])
|
||||||
yield f'eth_aggregate_pubkeys_zero_pubkey', {
|
yield 'eth_aggregate_pubkeys_zero_pubkey', {
|
||||||
'input': [encode_hex(ZERO_PUBKEY)],
|
'input': [encode_hex(ZERO_PUBKEY)],
|
||||||
'output': None,
|
'output': None,
|
||||||
}
|
}
|
||||||
|
@ -399,7 +399,7 @@ def case06_eth_aggregate_pubkeys():
|
||||||
# Invalid pubkeys -- G1 point at infinity
|
# Invalid pubkeys -- G1 point at infinity
|
||||||
expect_exception(spec.eth_aggregate_pubkeys, [G1_POINT_AT_INFINITY])
|
expect_exception(spec.eth_aggregate_pubkeys, [G1_POINT_AT_INFINITY])
|
||||||
expect_exception(milagro_bls._AggregatePKs, [G1_POINT_AT_INFINITY])
|
expect_exception(milagro_bls._AggregatePKs, [G1_POINT_AT_INFINITY])
|
||||||
yield f'eth_aggregate_pubkeys_infinity_pubkey', {
|
yield 'eth_aggregate_pubkeys_infinity_pubkey', {
|
||||||
'input': [encode_hex(G1_POINT_AT_INFINITY)],
|
'input': [encode_hex(G1_POINT_AT_INFINITY)],
|
||||||
'output': None,
|
'output': None,
|
||||||
}
|
}
|
||||||
|
@ -408,7 +408,7 @@ def case06_eth_aggregate_pubkeys():
|
||||||
x40_pubkey = b'\x40' + b'\00' * 47
|
x40_pubkey = b'\x40' + b'\00' * 47
|
||||||
expect_exception(spec.eth_aggregate_pubkeys, [x40_pubkey])
|
expect_exception(spec.eth_aggregate_pubkeys, [x40_pubkey])
|
||||||
expect_exception(milagro_bls._AggregatePKs, [x40_pubkey])
|
expect_exception(milagro_bls._AggregatePKs, [x40_pubkey])
|
||||||
yield f'eth_aggregate_pubkeys_x40_pubkey', {
|
yield 'eth_aggregate_pubkeys_x40_pubkey', {
|
||||||
'input': [encode_hex(x40_pubkey)],
|
'input': [encode_hex(x40_pubkey)],
|
||||||
'output': None,
|
'output': None,
|
||||||
}
|
}
|
||||||
|
@ -455,7 +455,7 @@ def case07_eth_fast_aggregate_verify():
|
||||||
tampered_signature = aggregate_signature[:-4] + b'\xff\xff\xff\xff'
|
tampered_signature = aggregate_signature[:-4] + b'\xff\xff\xff\xff'
|
||||||
identifier = f'{pubkeys_serial}_{encode_hex(message)}'
|
identifier = f'{pubkeys_serial}_{encode_hex(message)}'
|
||||||
assert not spec.eth_fast_aggregate_verify(pubkeys, message, tampered_signature)
|
assert not spec.eth_fast_aggregate_verify(pubkeys, message, tampered_signature)
|
||||||
yield f'eth_fast_aggregate_verify_tampered_signature_{(hash(bytes(identifier, "utf-8"))[:8]).hex()}', {
|
yield 'eth_fast_aggregate_verify_tampered_signature_{(hash(bytes(identifier, "utf-8"))[:8]).hex()}', {
|
||||||
'input': {
|
'input': {
|
||||||
'pubkeys': pubkeys_serial,
|
'pubkeys': pubkeys_serial,
|
||||||
'message': encode_hex(message),
|
'message': encode_hex(message),
|
||||||
|
@ -466,7 +466,7 @@ def case07_eth_fast_aggregate_verify():
|
||||||
|
|
||||||
# NOTE: Unlike `FastAggregateVerify`, len(pubkeys) == 0 and signature == G2_POINT_AT_INFINITY is VALID
|
# NOTE: Unlike `FastAggregateVerify`, len(pubkeys) == 0 and signature == G2_POINT_AT_INFINITY is VALID
|
||||||
assert spec.eth_fast_aggregate_verify([], message, G2_POINT_AT_INFINITY)
|
assert spec.eth_fast_aggregate_verify([], message, G2_POINT_AT_INFINITY)
|
||||||
yield f'eth_fast_aggregate_verify_na_pubkeys_and_infinity_signature', {
|
yield 'eth_fast_aggregate_verify_na_pubkeys_and_infinity_signature', {
|
||||||
'input': {
|
'input': {
|
||||||
'pubkeys': [],
|
'pubkeys': [],
|
||||||
'message': encode_hex(message),
|
'message': encode_hex(message),
|
||||||
|
@ -477,7 +477,7 @@ def case07_eth_fast_aggregate_verify():
|
||||||
|
|
||||||
# Invalid pubkeys and signature -- len(pubkeys) == 0 and signature == 0x00...
|
# Invalid pubkeys and signature -- len(pubkeys) == 0 and signature == 0x00...
|
||||||
assert not spec.eth_fast_aggregate_verify([], message, ZERO_SIGNATURE)
|
assert not spec.eth_fast_aggregate_verify([], message, ZERO_SIGNATURE)
|
||||||
yield f'eth_fast_aggregate_verify_na_pubkeys_and_zero_signature', {
|
yield 'eth_fast_aggregate_verify_na_pubkeys_and_zero_signature', {
|
||||||
'input': {
|
'input': {
|
||||||
'pubkeys': [],
|
'pubkeys': [],
|
||||||
'message': encode_hex(message),
|
'message': encode_hex(message),
|
||||||
|
@ -492,7 +492,7 @@ def case07_eth_fast_aggregate_verify():
|
||||||
signatures = [bls.Sign(privkey, SAMPLE_MESSAGE) for privkey in PRIVKEYS]
|
signatures = [bls.Sign(privkey, SAMPLE_MESSAGE) for privkey in PRIVKEYS]
|
||||||
aggregate_signature = bls.Aggregate(signatures)
|
aggregate_signature = bls.Aggregate(signatures)
|
||||||
assert not spec.eth_fast_aggregate_verify(pubkeys_with_infinity, SAMPLE_MESSAGE, aggregate_signature)
|
assert not spec.eth_fast_aggregate_verify(pubkeys_with_infinity, SAMPLE_MESSAGE, aggregate_signature)
|
||||||
yield f'eth_fast_aggregate_verify_infinity_pubkey', {
|
yield 'eth_fast_aggregate_verify_infinity_pubkey', {
|
||||||
'input': {
|
'input': {
|
||||||
'pubkeys': [encode_hex(pubkey) for pubkey in pubkeys_with_infinity],
|
'pubkeys': [encode_hex(pubkey) for pubkey in pubkeys_with_infinity],
|
||||||
'message': encode_hex(SAMPLE_MESSAGE),
|
'message': encode_hex(SAMPLE_MESSAGE),
|
||||||
|
|
Loading…
Reference in New Issue