blob: 5053df4bd8a776b7e3e6f345f0dce885749c527c [file] [log] [blame]
import oqs
import platform # to learn the OS we're on
import random
# Sigs for which unit testing is disabled
disabled_sig_patterns = []
if platform.system() == "Windows":
disabled_sig_patterns = ["Rainbow-V"]
def test_correctness():
for alg_name in oqs.get_enabled_sig_mechanisms():
if any(item in alg_name for item in disabled_sig_patterns):
continue
yield check_correctness, alg_name
def check_correctness(alg_name):
with oqs.Signature(alg_name) as sig:
message = bytes(random.getrandbits(8) for _ in range(100))
public_key = sig.generate_keypair()
signature = sig.sign(message)
assert sig.verify(message, signature, public_key)
def test_wrong_message():
for alg_name in oqs.get_enabled_sig_mechanisms():
if any(item in alg_name for item in disabled_sig_patterns):
continue
yield check_wrong_message, alg_name
def check_wrong_message(alg_name):
with oqs.Signature(alg_name) as sig:
message = bytes(random.getrandbits(8) for _ in range(100))
public_key = sig.generate_keypair()
signature = sig.sign(message)
wrong_message = bytes(random.getrandbits(8) for _ in range(len(message)))
assert not (sig.verify(wrong_message, signature, public_key))
def test_wrong_signature():
for alg_name in oqs.get_enabled_sig_mechanisms():
if any(item in alg_name for item in disabled_sig_patterns):
continue
yield check_wrong_signature, alg_name
def check_wrong_signature(alg_name):
with oqs.Signature(alg_name) as sig:
message = bytes(random.getrandbits(8) for _ in range(100))
public_key = sig.generate_keypair()
signature = sig.sign(message)
wrong_signature = bytes(random.getrandbits(8) for _ in range(len(signature)))
assert not (sig.verify(message, wrong_signature, public_key))
def test_wrong_public_key():
for alg_name in oqs.get_enabled_sig_mechanisms():
if any(item in alg_name for item in disabled_sig_patterns):
continue
yield check_wrong_public_key, alg_name
def check_wrong_public_key(alg_name):
with oqs.Signature(alg_name) as sig:
message = bytes(random.getrandbits(8) for _ in range(100))
public_key = sig.generate_keypair()
signature = sig.sign(message)
wrong_public_key = bytes(random.getrandbits(8) for _ in range(len(public_key)))
assert not (sig.verify(message, signature, wrong_public_key))
def test_not_supported():
try:
with oqs.Signature("bogus") as sig:
raise AssertionError("oqs.MechanismNotSupportedError was not raised.")
except oqs.MechanismNotSupportedError:
pass
except Exception as ex:
raise AssertionError("An unexpected exception was raised. " + ex)
def test_not_enabled():
# TODO: test broken as the compiled lib determines which algorithms are supported and enabled
for alg_name in oqs.get_supported_sig_mechanisms():
if alg_name not in oqs.get_enabled_sig_mechanisms():
# Found a non-enabled but supported alg
try:
with oqs.Signature(alg_name) as sig:
raise AssertionError("oqs.MechanismNotEnabledError was not raised.")
except oqs.MechanismNotEnabledError:
pass
except Exception as ex:
raise AssertionError("An unexpected exception was raised. " + ex)
if __name__ == "__main__":
try:
import nose2
nose2.main()
except ImportError:
import nose
nose.runmodule()