Merge pull request #1302 from ethereum/v08x
backport py_ecc hotfix to dev
This commit is contained in:
commit
9cbc04be6a
|
@ -5,7 +5,9 @@ BLS test vectors generator
|
||||||
from typing import Tuple
|
from typing import Tuple
|
||||||
|
|
||||||
from eth_utils import (
|
from eth_utils import (
|
||||||
to_tuple, int_to_big_endian
|
encode_hex,
|
||||||
|
int_to_big_endian,
|
||||||
|
to_tuple,
|
||||||
)
|
)
|
||||||
from gen_base import gen_runner, gen_suite, gen_typing
|
from gen_base import gen_runner, gen_suite, gen_typing
|
||||||
|
|
||||||
|
@ -20,7 +22,7 @@ def int_to_hex(n: int, byte_length: int=None) -> str:
|
||||||
byte_value = int_to_big_endian(n)
|
byte_value = int_to_big_endian(n)
|
||||||
if byte_length:
|
if byte_length:
|
||||||
byte_value = byte_value.rjust(byte_length, b'\x00')
|
byte_value = byte_value.rjust(byte_length, b'\x00')
|
||||||
return '0x' + byte_value.hex()
|
return encode_hex(byte_value)
|
||||||
|
|
||||||
|
|
||||||
def hex_to_int(x: str) -> int:
|
def hex_to_int(x: str) -> int:
|
||||||
|
@ -28,11 +30,9 @@ def hex_to_int(x: str) -> int:
|
||||||
|
|
||||||
|
|
||||||
DOMAINS = [
|
DOMAINS = [
|
||||||
0,
|
b'\x00\x00\x00\x00\x00\x00\x00\x00',
|
||||||
1,
|
b'\x00\x00\x00\x00\x00\x00\x00\x01',
|
||||||
1234,
|
b'\xff\xff\xff\xff\xff\xff\xff\xff'
|
||||||
2**32-1,
|
|
||||||
2**64-1
|
|
||||||
]
|
]
|
||||||
|
|
||||||
MESSAGES = [
|
MESSAGES = [
|
||||||
|
@ -51,12 +51,12 @@ PRIVKEYS = [
|
||||||
|
|
||||||
|
|
||||||
def hash_message(msg: bytes,
|
def hash_message(msg: bytes,
|
||||||
domain: int) ->Tuple[Tuple[str, str], Tuple[str, str], Tuple[str, str]]:
|
domain: bytes) ->Tuple[Tuple[str, str], Tuple[str, str], Tuple[str, str]]:
|
||||||
"""
|
"""
|
||||||
Hash message
|
Hash message
|
||||||
Input:
|
Input:
|
||||||
- Message as bytes
|
- Message as bytes32
|
||||||
- domain as uint64
|
- domain as bytes8
|
||||||
Output:
|
Output:
|
||||||
- Message hash as a G2 point
|
- Message hash as a G2 point
|
||||||
"""
|
"""
|
||||||
|
@ -69,12 +69,12 @@ def hash_message(msg: bytes,
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
def hash_message_compressed(msg: bytes, domain: int) -> Tuple[str, str]:
|
def hash_message_compressed(msg: bytes, domain: bytes) -> Tuple[str, str]:
|
||||||
"""
|
"""
|
||||||
Hash message
|
Hash message
|
||||||
Input:
|
Input:
|
||||||
- Message as bytes
|
- Message as bytes32
|
||||||
- domain as uint64
|
- domain as bytes8
|
||||||
Output:
|
Output:
|
||||||
- Message hash as a compressed G2 point
|
- Message hash as a compressed G2 point
|
||||||
"""
|
"""
|
||||||
|
@ -88,8 +88,8 @@ def case01_message_hash_G2_uncompressed():
|
||||||
for domain in DOMAINS:
|
for domain in DOMAINS:
|
||||||
yield {
|
yield {
|
||||||
'input': {
|
'input': {
|
||||||
'message': '0x' + msg.hex(),
|
'message': encode_hex(msg),
|
||||||
'domain': int_to_hex(domain, byte_length=8)
|
'domain': encode_hex(domain),
|
||||||
},
|
},
|
||||||
'output': hash_message(msg, domain)
|
'output': hash_message(msg, domain)
|
||||||
}
|
}
|
||||||
|
@ -100,8 +100,8 @@ def case02_message_hash_G2_compressed():
|
||||||
for domain in DOMAINS:
|
for domain in DOMAINS:
|
||||||
yield {
|
yield {
|
||||||
'input': {
|
'input': {
|
||||||
'message': '0x' + msg.hex(),
|
'message': encode_hex(msg),
|
||||||
'domain': int_to_hex(domain, byte_length=8)
|
'domain': encode_hex(domain),
|
||||||
},
|
},
|
||||||
'output': hash_message_compressed(msg, domain)
|
'output': hash_message_compressed(msg, domain)
|
||||||
}
|
}
|
||||||
|
@ -125,10 +125,10 @@ def case04_sign_messages():
|
||||||
yield {
|
yield {
|
||||||
'input': {
|
'input': {
|
||||||
'privkey': int_to_hex(privkey),
|
'privkey': int_to_hex(privkey),
|
||||||
'message': '0x' + message.hex(),
|
'message': encode_hex(message),
|
||||||
'domain': int_to_hex(domain, byte_length=8)
|
'domain': encode_hex(domain),
|
||||||
},
|
},
|
||||||
'output': '0x' + sig.hex()
|
'output': encode_hex(sig)
|
||||||
}
|
}
|
||||||
|
|
||||||
# TODO: case05_verify_messages: Verify messages signed in case04
|
# TODO: case05_verify_messages: Verify messages signed in case04
|
||||||
|
@ -141,17 +141,17 @@ def case06_aggregate_sigs():
|
||||||
for message in MESSAGES:
|
for message in MESSAGES:
|
||||||
sigs = [bls.sign(message, privkey, domain) for privkey in PRIVKEYS]
|
sigs = [bls.sign(message, privkey, domain) for privkey in PRIVKEYS]
|
||||||
yield {
|
yield {
|
||||||
'input': ['0x' + sig.hex() for sig in sigs],
|
'input': [encode_hex(sig) for sig in sigs],
|
||||||
'output': '0x' + bls.aggregate_signatures(sigs).hex(),
|
'output': encode_hex(bls.aggregate_signatures(sigs)),
|
||||||
}
|
}
|
||||||
|
|
||||||
@to_tuple
|
@to_tuple
|
||||||
def case07_aggregate_pubkeys():
|
def case07_aggregate_pubkeys():
|
||||||
pubkeys = [bls.privtopub(privkey) for privkey in PRIVKEYS]
|
pubkeys = [bls.privtopub(privkey) for privkey in PRIVKEYS]
|
||||||
pubkeys_serial = ['0x' + pubkey.hex() for pubkey in pubkeys]
|
pubkeys_serial = [encode_hex(pubkey) for pubkey in pubkeys]
|
||||||
yield {
|
yield {
|
||||||
'input': pubkeys_serial,
|
'input': pubkeys_serial,
|
||||||
'output': '0x' + bls.aggregate_pubkeys(pubkeys).hex(),
|
'output': encode_hex(bls.aggregate_pubkeys(pubkeys)),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,3 @@
|
||||||
py-ecc==1.7.0
|
py_ecc==1.7.1
|
||||||
eth-utils==1.6.0
|
eth-utils==1.6.0
|
||||||
../../test_libs/gen_helpers
|
../../test_libs/gen_helpers
|
||||||
|
|
|
@ -24,13 +24,13 @@ def only_with_bls(alt_return=None):
|
||||||
@only_with_bls(alt_return=True)
|
@only_with_bls(alt_return=True)
|
||||||
def bls_verify(pubkey, message_hash, signature, domain):
|
def bls_verify(pubkey, message_hash, signature, domain):
|
||||||
return bls.verify(message_hash=message_hash, pubkey=pubkey,
|
return bls.verify(message_hash=message_hash, pubkey=pubkey,
|
||||||
signature=signature, domain=int.from_bytes(domain, byteorder='little'))
|
signature=signature, domain=domain)
|
||||||
|
|
||||||
|
|
||||||
@only_with_bls(alt_return=True)
|
@only_with_bls(alt_return=True)
|
||||||
def bls_verify_multiple(pubkeys, message_hashes, signature, domain):
|
def bls_verify_multiple(pubkeys, message_hashes, signature, domain):
|
||||||
return bls.verify_multiple(pubkeys=pubkeys, message_hashes=message_hashes,
|
return bls.verify_multiple(pubkeys=pubkeys, message_hashes=message_hashes,
|
||||||
signature=signature, domain=int.from_bytes(domain, byteorder='little'))
|
signature=signature, domain=domain)
|
||||||
|
|
||||||
|
|
||||||
@only_with_bls(alt_return=STUB_PUBKEY)
|
@only_with_bls(alt_return=STUB_PUBKEY)
|
||||||
|
@ -46,4 +46,4 @@ def bls_aggregate_signatures(signatures):
|
||||||
@only_with_bls(alt_return=STUB_SIGNATURE)
|
@only_with_bls(alt_return=STUB_SIGNATURE)
|
||||||
def bls_sign(message_hash, privkey, domain):
|
def bls_sign(message_hash, privkey, domain):
|
||||||
return bls.sign(message_hash=message_hash, privkey=privkey,
|
return bls.sign(message_hash=message_hash, privkey=privkey,
|
||||||
domain=int.from_bytes(domain, byteorder='little'))
|
domain=domain)
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
eth-utils>=1.3.0,<2
|
eth-utils>=1.3.0,<2
|
||||||
eth-typing>=2.1.0,<3.0.0
|
eth-typing>=2.1.0,<3.0.0
|
||||||
pycryptodome==3.7.3
|
pycryptodome==3.7.3
|
||||||
py_ecc>=1.6.0
|
py_ecc==1.7.1
|
||||||
dataclasses==0.6
|
dataclasses==0.6
|
||||||
ssz==0.1.0a10
|
ssz==0.1.0a10
|
||||||
|
|
|
@ -8,7 +8,7 @@ setup(
|
||||||
"eth-utils>=1.3.0,<2",
|
"eth-utils>=1.3.0,<2",
|
||||||
"eth-typing>=2.1.0,<3.0.0",
|
"eth-typing>=2.1.0,<3.0.0",
|
||||||
"pycryptodome==3.7.3",
|
"pycryptodome==3.7.3",
|
||||||
"py_ecc>=1.6.0",
|
"py_ecc==1.7.1",
|
||||||
"ssz==0.1.0a10",
|
"ssz==0.1.0a10",
|
||||||
"dataclasses==0.6",
|
"dataclasses==0.6",
|
||||||
]
|
]
|
||||||
|
|
Loading…
Reference in New Issue