57 lines
1.5 KiB
Python
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"
|
|
)
|