import hashlib import pytest from quantumpipe.kdf import kdf def test_matches_reference_construction(): items = [b"info", b"\x01\x02", b""] h = hashlib.sha512(len(items).to_bytes(8, "little")) for it in items: h.update(len(it).to_bytes(8, "little")) h.update(it) assert kdf(*items) == h.digest()[:32] def test_str_args_are_encoded(): assert kdf("info", b"data") == kdf(b"info", b"data") # length counted after encoding: "é" is 2 bytes assert kdf("é") == kdf("é".encode()) def test_length_framing_prevents_concat_ambiguity(): assert kdf("i", b"ab", b"c") != kdf("i", b"a", b"bc") assert kdf("i", b"") != kdf("i") def test_length_limits(): assert len(kdf("x", length=64)) == 64 assert len(kdf("x", length=1)) == 1 with pytest.raises(ValueError): kdf("x", length=65) with pytest.raises(ValueError): kdf("x", length=0)