Some checks failed
CI / lint (push) Successful in 1m37s
CI / test-python (push) Successful in 1m49s
CI / test-zig (push) Successful in 1m39s
CI / test-wasm (push) Successful in 1m54s
CI / test (push) Successful in 14m44s
CI / miri (push) Successful in 14m18s
CI / build (push) Successful in 1m9s
CI / fuzz-regression (push) Successful in 9m9s
CI / publish (push) Failing after 1m10s
CI / publish-python (push) Failing after 1m46s
CI / publish-wasm (push) Has been cancelled
Signed-off-by: Kamal Tufekcic <kamal@lo.sh>
78 lines
2 KiB
Python
78 lines
2 KiB
Python
"""Tests for identity key management."""
|
|
|
|
import soliton
|
|
|
|
|
|
def test_keygen():
|
|
with soliton.Identity.generate() as id:
|
|
pk = id.public_key()
|
|
sk = id.secret_key()
|
|
assert len(pk) == 3200 # SOLITON_PUBLIC_KEY_SIZE
|
|
assert len(sk) == 2496 # SOLITON_SECRET_KEY_SIZE
|
|
|
|
|
|
def test_fingerprint():
|
|
with soliton.Identity.generate() as id:
|
|
fp = id.fingerprint()
|
|
assert len(fp) == 32
|
|
assert fp != b"\x00" * 32
|
|
|
|
|
|
def test_fingerprint_hex():
|
|
with soliton.Identity.generate() as id:
|
|
hex_fp = id.fingerprint_hex()
|
|
assert len(hex_fp) == 64
|
|
|
|
|
|
def test_sign_verify():
|
|
with soliton.Identity.generate() as id:
|
|
msg = b"test message"
|
|
sig = id.sign(msg)
|
|
assert len(sig) == 3373 # SOLITON_HYBRID_SIG_SIZE
|
|
# Verify with same identity.
|
|
id.verify(msg, sig)
|
|
|
|
|
|
def test_sign_verify_wrong_message():
|
|
with soliton.Identity.generate() as id:
|
|
sig = id.sign(b"correct")
|
|
try:
|
|
id.verify(b"wrong", sig)
|
|
assert False, "should have raised"
|
|
except soliton.VerificationError:
|
|
pass
|
|
|
|
|
|
def test_context_manager_zeroizes():
|
|
id = soliton.Identity.generate()
|
|
with id:
|
|
_ = id.secret_key()
|
|
# After exiting context, secret key should be gone.
|
|
try:
|
|
id.secret_key()
|
|
assert False, "should have raised"
|
|
except soliton.InvalidDataError:
|
|
pass
|
|
|
|
|
|
def test_from_bytes_roundtrip():
|
|
with soliton.Identity.generate() as id:
|
|
pk = id.public_key()
|
|
sk = id.secret_key()
|
|
# Reconstruct.
|
|
id2 = soliton.Identity.from_bytes(pk, sk)
|
|
msg = b"roundtrip"
|
|
sig = id2.sign(msg)
|
|
id2.verify(msg, sig)
|
|
id2.close()
|
|
|
|
|
|
def test_public_only_cannot_sign():
|
|
with soliton.Identity.generate() as id:
|
|
pk = id.public_key()
|
|
pub_only = soliton.Identity.from_public_bytes(pk)
|
|
try:
|
|
pub_only.sign(b"test")
|
|
assert False, "should have raised"
|
|
except soliton.InvalidDataError:
|
|
pass
|