35 lines
912 B
Python
35 lines
912 B
Python
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)
|