test: add fingerprint consistency tests for key derivation

This commit is contained in:
thePR0M3TH3AN
2025-08-03 09:49:21 -04:00
parent cb37783354
commit 1e544a7d41

View File

@@ -1,5 +1,6 @@
import logging import logging
import pytest import pytest
from utils.fingerprint import generate_fingerprint
from utils.key_derivation import ( from utils.key_derivation import (
derive_key_from_password, derive_key_from_password,
derive_key_from_password_argon2, derive_key_from_password_argon2,
@@ -8,14 +9,19 @@ from utils.key_derivation import (
) )
def test_derive_key_deterministic(): def test_pbkdf2_fingerprint_affects_key():
password = "correct horse battery staple" password = "correct horse battery staple"
fp = "fp" fp1 = generate_fingerprint("seed one")
key1 = derive_key_from_password(password, fp, iterations=1) fp2 = generate_fingerprint("seed two")
key2 = derive_key_from_password(password, fp, iterations=1)
key1 = derive_key_from_password(password, fp1, iterations=1)
key2 = derive_key_from_password(password, fp1, iterations=1)
key3 = derive_key_from_password(password, fp2, iterations=1)
assert key1 == key2 assert key1 == key2
assert key1 != key3
assert len(key1) == 44 assert len(key1) == 44
logging.info("Deterministic key derivation succeeded") logging.info("PBKDF2 fingerprint behaviour verified")
def test_derive_key_empty_password_error(): def test_derive_key_empty_password_error():
@@ -37,14 +43,21 @@ def test_derive_index_key_seed_only():
assert derive_index_key(seed) == derive_index_key_seed_only(seed) assert derive_index_key(seed) == derive_index_key_seed_only(seed)
def test_argon2_key_deterministic(): def test_argon2_fingerprint_affects_key():
pw = "correct horse battery staple" password = "correct horse battery staple"
fp = "fp" fp1 = generate_fingerprint("seed one")
fp2 = generate_fingerprint("seed two")
k1 = derive_key_from_password_argon2( k1 = derive_key_from_password_argon2(
pw, fp, time_cost=1, memory_cost=8, parallelism=1 password, fp1, time_cost=1, memory_cost=8, parallelism=1
) )
k2 = derive_key_from_password_argon2( k2 = derive_key_from_password_argon2(
pw, fp, time_cost=1, memory_cost=8, parallelism=1 password, fp1, time_cost=1, memory_cost=8, parallelism=1
) )
k3 = derive_key_from_password_argon2(
password, fp2, time_cost=1, memory_cost=8, parallelism=1
)
assert k1 == k2 assert k1 == k2
assert k1 != k3
assert len(k1) == 44 assert len(k1) == 44