Add more contrains to load_keys and updates unit tests

This commit is contained in:
Sergi Delgado Segura
2020-03-17 20:22:03 +01:00
parent 568d72a1ad
commit d18944e2ba
2 changed files with 57 additions and 34 deletions

View File

@@ -39,24 +39,39 @@ def load_keys(teos_pk_path, cli_sk_path, cli_pk_path):
encoded key if all keys can be loaded. ``None`` otherwise. encoded key if all keys can be loaded. ``None`` otherwise.
""" """
teos_pk_der = Cryptographer.load_key_file(teos_pk_path) if teos_pk_path is None:
teos_pk = PublicKey(teos_pk_der)
if teos_pk is None:
logger.error("TEOS's public key file not found. Please check your settings") logger.error("TEOS's public key file not found. Please check your settings")
return None return None
if cli_sk_path is None:
logger.error("Client's private key file not found. Please check your settings")
return None
if cli_pk_path is None:
logger.error("Client's public key file not found. Please check your settings")
return None
try:
teos_pk_der = Cryptographer.load_key_file(teos_pk_path)
teos_pk = PublicKey(teos_pk_der)
except ValueError:
logger.error("TEOS public key is invalid or cannot be parsed")
return None
cli_sk_der = Cryptographer.load_key_file(cli_sk_path) cli_sk_der = Cryptographer.load_key_file(cli_sk_path)
cli_sk = Cryptographer.load_private_key_der(cli_sk_der) cli_sk = Cryptographer.load_private_key_der(cli_sk_der)
if cli_sk is None: if cli_sk is None:
logger.error("Client's private key file not found. Please check your settings") logger.error("Client private key is invalid or cannot be parsed")
return None return None
cli_pk_der = Cryptographer.load_key_file(cli_pk_path) try:
cli_pk_der = Cryptographer.load_key_file(cli_pk_path)
PublicKey(cli_pk_der)
if cli_pk_der is None: except ValueError:
logger.error("Client's public key file not found. Please check your settings") logger.error("Client public key is invalid or cannot be parsed")
return None return None
return teos_pk, cli_sk, cli_pk_der return teos_pk, cli_sk, cli_pk_der

View File

@@ -52,8 +52,7 @@ dummy_appointment = Appointment.from_dict(dummy_appointment_full)
def load_dummy_keys(*args): def load_dummy_keys(*args):
# return dummy_pk, dummy_sk, dummy_pk_der return dummy_pk, dummy_sk, dummy_pk.format(compressed=True)
return dummy_pk
def get_dummy_signature(*args): def get_dummy_signature(*args):
@@ -64,30 +63,39 @@ def get_bad_signature(*args):
return Cryptographer.sign(dummy_appointment.serialize(), another_sk) return Cryptographer.sign(dummy_appointment.serialize(), another_sk)
# def test_load_keys(): def test_load_keys():
# # Let's first create a private key and public key files # Let's first create a private key and public key files
# private_key_file_path = "sk_test_file" private_key_file_path = "sk_test_file"
# public_key_file_path = "pk_test_file" public_key_file_path = "pk_test_file"
# with open(private_key_file_path, "wb") as f: empty_file_path = "empty_file"
# f.write(dummy_sk.to_der()) with open(private_key_file_path, "wb") as f:
# with open(public_key_file_path, "wb") as f: f.write(dummy_sk.to_der())
# f.write(dummy_pk_der) with open(public_key_file_path, "wb") as f:
# f.write(dummy_pk.format(compressed=True))
# # Now we can test the function passing the using this files (we'll use the same pk for both) with open(empty_file_path, "wb") as f:
# r = teos_cli.load_keys(public_key_file_path, private_key_file_path, public_key_file_path) pass
# assert isinstance(r, tuple)
# assert len(r) == 3 # Now we can test the function passing the using this files (we'll use the same pk for both)
# r = teos_cli.load_keys(public_key_file_path, private_key_file_path, public_key_file_path)
# # If any param does not match we should get None as result assert isinstance(r, tuple)
# assert teos_cli.load_keys(None, private_key_file_path, public_key_file_path) is None assert len(r) == 3
# assert teos_cli.load_keys(public_key_file_path, None, public_key_file_path) is None
# assert teos_cli.load_keys(public_key_file_path, private_key_file_path, None) is None # If any param does not match we should get None as result
# assert teos_cli.load_keys(None, private_key_file_path, public_key_file_path) is None
# # The same should happen if we pass a public key where a private should be, for instance assert teos_cli.load_keys(public_key_file_path, None, public_key_file_path) is None
# assert teos_cli.load_keys(private_key_file_path, public_key_file_path, private_key_file_path) is None assert teos_cli.load_keys(public_key_file_path, private_key_file_path, None) is None
#
# os.remove(private_key_file_path) # The same should happen if we pass a public key where a private should be, for instance
# os.remove(public_key_file_path) assert teos_cli.load_keys(private_key_file_path, public_key_file_path, private_key_file_path) is None
# Same if any of the files is empty
assert teos_cli.load_keys(empty_file_path, private_key_file_path, public_key_file_path) is None
assert teos_cli.load_keys(public_key_file_path, empty_file_path, public_key_file_path) is None
assert teos_cli.load_keys(public_key_file_path, private_key_file_path, empty_file_path) is None
os.remove(private_key_file_path)
os.remove(public_key_file_path)
os.remove(empty_file_path)
# TODO: 90-add-more-add-appointment-tests # TODO: 90-add-more-add-appointment-tests