ictlogin/tests/test_protocol.py

57 lines
1.5 KiB
Python

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"
)