Captures TypeErrors in Cryptographer.get_compressed_pk and adds unit tests

This commit is contained in:
Sergi Delgado Segura
2020-03-27 16:41:19 +01:00
parent 7e6a4849e6
commit ae68cd33da
2 changed files with 32 additions and 3 deletions

View File

@@ -315,7 +315,7 @@ class Cryptographer:
if "failed to recover ECDSA public key" in str(e):
logger.error("Cannot recover public key from signature".format(type(rsig_recid)))
else:
logger.error("Unknown exception", error=e)
logger.error("Unknown exception", error=str(e))
return None
@@ -334,7 +334,6 @@ class Cryptographer:
return pk.point() == rpk.point()
# TODO: UNITTEST
@staticmethod
def get_compressed_pk(pk):
"""
@@ -351,4 +350,10 @@ class Cryptographer:
logger.error("The received data is not a PublicKey object")
return None
return hexlify(pk.format(compressed=True)).decode("utf-8")
try:
compressed_pk = pk.format(compressed=True)
return hexlify(compressed_pk).decode("utf-8")
except TypeError as e:
logger.error("PublicKey has invalid initializer", error=str(e))
return None

View File

@@ -255,3 +255,27 @@ def test_verify_pk_wrong():
rpk = Cryptographer.recover_pk(message, zbase32_sig)
assert not Cryptographer.verify_rpk(sk2.public_key, rpk)
def test_get_compressed_pk():
sk, pk = generate_keypair()
compressed_pk = Cryptographer.get_compressed_pk(pk)
assert isinstance(compressed_pk, str) and len(compressed_pk) == 66
assert compressed_pk[:2] in ["02", "03"]
def test_get_compressed_pk_wrong_key():
# pk should be properly initialized. Initializing from int will case it to not be recoverable
pk = PublicKey(0)
compressed_pk = Cryptographer.get_compressed_pk(pk)
assert compressed_pk is None
def test_get_compressed_pk_wrong_type():
# Passing a value that is not a PublicKey will make it to fail too
pk = get_random_value_hex(33)
compressed_pk = Cryptographer.get_compressed_pk(pk)
assert compressed_pk is None