import hashlib import hmac from ictlogin.protocol import ( checksum, custom_base64, encode_info, hmac_md5, login_parameters, ) def test_hmac_md5_matches_portal_md5_helper(): assert ( hmac_md5("password", "token") == hmac.new(b"token", b"password", hashlib.md5).hexdigest() ) def test_custom_base64_alphabet(): assert custom_base64(b"abc") == "ZaRk" def test_login_parameters_are_self_consistent(): params = login_parameters( username="alice", password="secret", ip="10.208.16.60", ac_id="1", token="0123456789abcdef0123456789abcdef", ) expected = checksum( params["password"][5:] and "0123456789abcdef0123456789abcdef", "alice", params["password"][5:], "1", "10.208.16.60", params["info"], ) assert params["chksum"] == expected assert params["info"].startswith("{SRBX1}") assert params["password"].startswith("{MD5}") def test_known_info_is_deterministic(): token = "0123456789abcdef0123456789abcdef" first = encode_info("alice", "secret", "10.208.16.60", "1", token) second = encode_info("alice", "secret", "10.208.16.60", "1", token) assert first == second def test_browser_compatible_info_vector(): token = "0123456789abcdef0123456789abcdef" assert encode_info("alice", "secret", "10.208.16.60", "1", token) == ( "{SRBX1}0o4inQiaHwW7y5JpHN8VD90N6xFNpZTtn0AXMsitCTUCwNKGNypce0RXMvQhFZ4Eir85FjJW6Rhk/lLkIoqATc8mywXQOVTQFhF3BZCTwMP+Jp4PD2Rob52dxvouN2Gs" )