Skip to content

Commit

Permalink
Split testcases into modules
Browse files Browse the repository at this point in the history
  • Loading branch information
h114mx001 committed Jun 5, 2024
1 parent 1e8e956 commit 632de48
Show file tree
Hide file tree
Showing 6 changed files with 241 additions and 212 deletions.
8 changes: 8 additions & 0 deletions test/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
import configparser
from base64 import b64decode

cfg = configparser.RawConfigParser()
config_path = "setup.cfg"
cfg.read(config_path)
cfg_dict = dict(cfg.items("keys"))
secret_seed = b64decode(cfg_dict["secret_seed"])
212 changes: 0 additions & 212 deletions test/test_LamportSignature.py

This file was deleted.

79 changes: 79 additions & 0 deletions test/test_task_1_LamportSignature.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
from LamportSignature.Lamport import LamportSignature, LamportSigningKeyPair, Lamport_ChaCha20_SHA256_keygen
from test import secret_seed
from os import urandom
from random import randint
import pytest

# from LamportSignature.PRSignatureTree import LamportPRSignatureTree, LamportSignatureTree_Signature, LamportDeterministicSignatureTree

@pytest.mark.task1
def test_Lamport_Primitive():
message = urandom(32)
sign_key_0 = [urandom(32) for _ in range(256)]
sign_key_1 = [urandom(32) for _ in range(256)]
sign_key = LamportSigningKeyPair(sign_key_0, sign_key_1)
verify_key = sign_key.get_verify_key_pairs()
signature = sign_key.sign_primitive(message)
assert verify_key.verify_primitive(message, signature) == True

@pytest.mark.task1
def test_Lamport_malformed_signature():
message = urandom(32)
sign_key_0 = [urandom(32) for _ in range(256)]
sign_key_1 = [urandom(32) for _ in range(256)]
sign_key = LamportSigningKeyPair(sign_key_0, sign_key_1)
verify_key = sign_key.get_verify_key_pairs()
signature = sign_key.sign_primitive(message)
# signature will be flipped a random bit
rand_bit = randint(0, 32 * 256 - 1)
signature.signature = signature.signature[:rand_bit] + bytes([signature.signature[rand_bit] ^ 1]) + signature.signature[rand_bit + 1:]
assert verify_key.verify_primitive(message, signature) == False

@pytest.mark.task1
def test_Lamport_Primitive_serialization():
message = urandom(32)
sign_key_0 = [urandom(32) for _ in range(256)]
sign_key_1 = [urandom(32) for _ in range(256)]
sign_key = LamportSigningKeyPair(sign_key_0, sign_key_1)
verify_key = sign_key.get_verify_key_pairs()
signature = sign_key.sign_primitive(message)
assert verify_key.verify_primitive(message, signature) == True
serialized = signature.serialize()
new_signature = LamportSignature.deserialize(serialized)
assert verify_key.verify_primitive(message, new_signature) == True

@pytest.mark.task1
def test_Lamport_ChaCha20_SHA256_256bit_message():
message = urandom(32)
seed = secret_seed
sign_key = Lamport_ChaCha20_SHA256_keygen(seed)
verify_key = sign_key.get_verify_key_pairs()
signature = sign_key.hash_and_sign(message)
assert verify_key.hash_and_verify(message, signature) == True
serialized = signature.serialize()
new_signature = LamportSignature.deserialize(serialized)
assert verify_key.hash_and_verify(message, new_signature) == True

@pytest.mark.task1
def test_Lamport_ChaCha20_SHA256_arbitrary_length_message():
length = randint(1, 1000)
message = urandom(length)
seed = secret_seed
sign_key = Lamport_ChaCha20_SHA256_keygen(seed)
verify_key = sign_key.get_verify_key_pairs()
signature = sign_key.hash_and_sign(message)
assert verify_key.hash_and_verify(message, signature) == True
serialized = signature.serialize()
new_signature = LamportSignature.deserialize(serialized)
assert verify_key.hash_and_verify(message, new_signature) == True

@pytest.mark.task1
def test_Lamport_Primitive_forty_times_256_bit_messages():
for _ in range(40):
message = urandom(32)
sign_key_0 = [urandom(32) for _ in range(256)]
sign_key_1 = [urandom(32) for _ in range(256)]
sign_key = LamportSigningKeyPair(sign_key_0, sign_key_1)
verify_key = sign_key.get_verify_key_pairs()
signature = sign_key.sign_primitive(message)
assert verify_key.verify_primitive(message, signature) == True
46 changes: 46 additions & 0 deletions test/test_task_2_SignatureChain.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
from LamportSignature.SignatureChain import LamportSignatureChain_Signature, LamportSignatureChain
from test import secret_seed

from os import urandom
from random import randint
import pytest



# @pytest.mark.skip(reason="temporarily disable for debugging")
@pytest.mark.task2
def test_one_time_signature_chain_256_bit_messages():
sc = LamportSignatureChain(secret_seed)
message = urandom(32)
signature = sc.sign(message)
assert LamportSignatureChain.verify(1, message, signature) == True

# @pytest.mark.skip(reason="temporarily disable for debugging")
@pytest.mark.task2
def test_five_times_signature_chain_256_bit_messages():
sc = LamportSignatureChain(secret_seed)
for state in range(1, 5+1):
message = urandom(32)
signature = sc.sign(message)
assert LamportSignatureChain.verify(state, message, signature) == True

# @pytest.mark.skip(reason="temporarily disable for debugging")
@pytest.mark.task2
def test_forty_times_signature_chain_arbitrary_length_messages():
sc = LamportSignatureChain(secret_seed)
for state in range(1, 40+1):
message = urandom(randint(1, 1000))
signature = sc.sign(message)
assert LamportSignatureChain.verify(state, message, signature) == True

# @pytest.mark.skip(reason="temporarily disable for debugging")
@pytest.mark.task2
def test_five_times_serialize_deserialize_signature_chain():
sc = LamportSignatureChain(secret_seed)
for state in range(1, 5+1):
message = urandom(randint(1, 1000))
signature = sc.sign(message)
assert LamportSignatureChain.verify(state, message, signature) == True
serialized = signature.serialize()
new_signature = LamportSignatureChain_Signature.deserialize(serialized)
assert LamportSignatureChain.verify(state, message, new_signature) == True
Loading

0 comments on commit 632de48

Please sign in to comment.