32 lines
1.2 KiB
Python
32 lines
1.2 KiB
Python
from uuid import UUID
|
|
|
|
from pydantic import BaseModel
|
|
|
|
|
|
class SessionCache(BaseModel):
|
|
session_id: UUID
|
|
set_interface: list[int] | None = None
|
|
confirm_interface: list[int] | None = None
|
|
set_key_entry: list[int] | None = None
|
|
confirm_key_entry: list[int] | None = None
|
|
username: str | None = None
|
|
customer_id: UUID
|
|
|
|
def deduce_passcode(self, attrs_per_key, confirm_key_entry: list[int]) -> list[int]:
|
|
set_key_entry = self.set_key_entry
|
|
assert (len(set_key_entry) == len(confirm_key_entry))
|
|
set_interface = self.set_interface
|
|
confirm_interface = self.confirm_interface
|
|
set_key_vals = [set_interface[key * attrs_per_key:(key + 1) * attrs_per_key] for key in set_key_entry]
|
|
confirm_key_vals = [confirm_interface[key * attrs_per_key:(key + 1) * attrs_per_key] for key in
|
|
confirm_key_entry]
|
|
|
|
passcode = []
|
|
for idx in range(len(set_key_entry)):
|
|
set_key = set(set_key_vals[idx])
|
|
confirm_key = set(confirm_key_vals[idx])
|
|
intersection = list(set_key.intersection(confirm_key))
|
|
assert (len(intersection) == 1)
|
|
passcode.append(intersection[0])
|
|
return passcode
|