eth2.0-specs/tests/core/pyspec/eth2spec/utils/bls.py

54 lines
1.4 KiB
Python
Raw Normal View History

2020-01-07 19:52:20 +00:00
from py_ecc.bls import G2ProofOfPossession as bls
from py_ecc.bls.g2_primatives import signature_to_G2 as _signature_to_G2
2019-05-13 21:15:02 +00:00
# Flag to make BLS active or not. Used for testing, do not ignore BLS in production unless you know what you are doing.
bls_active = True
STUB_SIGNATURE = b'\x11' * 96
STUB_PUBKEY = b'\x22' * 48
2020-01-07 19:52:20 +00:00
STUB_COORDINATES = _signature_to_G2(bls.Sign(0, b""))
2019-05-13 21:15:02 +00:00
def only_with_bls(alt_return=None):
"""
Decorator factory to make a function only run when BLS is active. Otherwise return the default.
"""
def runner(fn):
def entry(*args, **kw):
if bls_active:
return fn(*args, **kw)
else:
return alt_return
return entry
return runner
@only_with_bls(alt_return=True)
2019-12-17 10:04:56 +00:00
def Verify(PK, message, signature):
2020-01-07 19:52:20 +00:00
return bls.Verify(PK, message, signature)
2019-12-17 10:04:56 +00:00
2019-12-17 13:33:37 +00:00
@only_with_bls(alt_return=True)
2020-01-07 19:52:20 +00:00
def AggregateVerify(pairs, signature):
return bls.AggregateVerify(pairs, signature)
2019-05-13 21:15:02 +00:00
@only_with_bls(alt_return=True)
2019-12-17 10:04:56 +00:00
def FastAggregateVerify(PKs, message, signature):
2020-01-07 19:52:20 +00:00
return bls.FastAggregateVerify(PKs, message, signature)
2019-05-13 21:15:02 +00:00
@only_with_bls(alt_return=STUB_SIGNATURE)
2019-12-17 10:04:56 +00:00
def Aggregate(signatures):
2020-01-07 19:52:20 +00:00
return bls.Aggregate(signatures)
2019-05-15 16:37:11 +00:00
@only_with_bls(alt_return=STUB_SIGNATURE)
2019-12-17 10:04:56 +00:00
def Sign(SK, message):
2020-01-07 19:52:20 +00:00
return bls.Sign(SK, message)
@only_with_bls(alt_return=STUB_COORDINATES)
2019-12-20 06:41:46 +00:00
def signature_to_G2(signature):
2020-01-07 19:52:20 +00:00
return _signature_to_G2(signature)