"""Installation code (install_code) for the Windows installer EXE flow. Covers central/app/enrollment.py install-code functions: Crockford Base32 generation, normalization (case + hyphen), hashing, and the grouped display format. Never stores the plaintext code. """ import re import pytest from central.app import enrollment def test_generated_code_is_16_crockford_chars_in_4_groups(): for _ in range(50): code = enrollment.generate_install_code() assert re.fullmatch(r"[0-9A-HJKMNP-TV-Z]{4}-[0-9A-HJKMNP-TV-Z]{4}-[0-9A-HJKMNP-TV-Z]{4}-[0-9A-HJKMNP-TV-Z]{4}", code) def test_generated_code_has_good_entropy(): seen = {enrollment.generate_install_code() for _ in range(2000)} assert len(seen) > 1900 # 80 bits of entropy: collisions essentially impossible def test_crockford_alphabet_excludes_ambiguous_chars(): alphabet = set(enrollment.INSTALL_CODE_ALPHABET) for ambiguous in "ILOU": assert ambiguous not in alphabet def test_normalization_uppercases_and_strips_separators(): assert enrollment.normalize_install_code("abcd-efgh-jkmn-pqrz") == "ABCDEFGHJKMNPQRZ" assert enrollment.normalize_install_code(" abcd efgh jkmn pqrz ") == "ABCDEFGHJKMNPQRZ" assert enrollment.normalize_install_code("ABCD-EFGH-JKMN-PQRZ") == "ABCDEFGHJKMNPQRZ" def test_normalization_maps_crockford_lookalikes(): # Crockford Base32 treats 0/O and 1/I/L as transliterations; a human # retyping "O" and "I/L" means "0" and "1". assert enrollment.normalize_install_code("OOOI-LLLL-0000-0001") == "0001111100000001" assert enrollment.normalize_install_code("0O0O-1L1I-0000-0001") == enrollment.normalize_install_code("0000-1111-0000-0001") def test_digest_is_sha256_hex_and_deterministic(): code = enrollment.generate_install_code() normalized = enrollment.normalize_install_code(code) assert enrollment.install_code_digest(code) == enrollment.install_code_digest(normalized) assert enrollment.install_code_digest(code) == enrollment.install_code_digest(code.lower().replace("-", "")) assert len(enrollment.install_code_digest(code)) == 64 def test_hashes_cannot_be_reversed_into_plaintext(): code = enrollment.generate_install_code() digest = enrollment.install_code_digest(code) assert digest != code assert code not in digest def test_valid_install_code(): code = enrollment.generate_install_code() assert enrollment.valid_install_code(code) assert enrollment.valid_install_code(code.lower().replace("-", "")) assert not enrollment.valid_install_code("") assert not enrollment.valid_install_code("ABCD-EFGH-JKMN-PQRU") # U excluded from Crockford assert not enrollment.valid_install_code("ABCD") assert not enrollment.valid_install_code("!BCD-EFGH-JKMN-PQRZ")