Merge pull request 'old updates' (#1) from updates into main
Reviewed-on: https://zanboar.com/dkelly/pynkode/pulls/1
This commit is contained in:
@@ -53,7 +53,13 @@ class NKodeAPI(BaseModel):
|
|||||||
self.signup_sessions[session_id].set_user_nkode(username, key_selection)
|
self.signup_sessions[session_id].set_user_nkode(username, key_selection)
|
||||||
return self.signup_sessions[session_id].confirm_interface
|
return self.signup_sessions[session_id].confirm_interface
|
||||||
|
|
||||||
def confirm_nkode(self, username: str, customer_id: UUID, confirm_key_entry: list[int], session_id: UUID) -> bool:
|
def confirm_nkode(
|
||||||
|
self,
|
||||||
|
username: str,
|
||||||
|
customer_id: UUID,
|
||||||
|
confirm_key_entry: list[int],
|
||||||
|
session_id: UUID
|
||||||
|
) -> bool:
|
||||||
assert (
|
assert (
|
||||||
session_id in self.signup_sessions.keys() and
|
session_id in self.signup_sessions.keys() and
|
||||||
customer_id == self.signup_sessions[session_id].customer_id and
|
customer_id == self.signup_sessions[session_id].customer_id and
|
||||||
|
|||||||
@@ -20,12 +20,12 @@ class Customer(BaseModel):
|
|||||||
|
|
||||||
def valid_key_entry(self, username, selected_keys) -> bool:
|
def valid_key_entry(self, username, selected_keys) -> bool:
|
||||||
assert (username in self.users.keys())
|
assert (username in self.users.keys())
|
||||||
assert (all(key_idx < self.attributes.keypad_size.numb_of_keys for key_idx in selected_keys))
|
assert (all(0 <= key_idx < self.attributes.keypad_size.numb_of_keys for key_idx in selected_keys))
|
||||||
passcode_len = len(selected_keys)
|
passcode_len = len(selected_keys)
|
||||||
user = self.users[username]
|
user = self.users[username]
|
||||||
|
|
||||||
passcode_set_vals = user.user_keys.decipher_mask(
|
passcode_set_vals = user.user_keys.decipher_mask(
|
||||||
user.enciphered_passcode.mask, self.attributes.set_vals, len(selected_keys))
|
user.enciphered_passcode.mask, self.attributes.set_vals, passcode_len)
|
||||||
set_vals_idx = [self.attributes.get_set_index(set_val) for set_val in passcode_set_vals]
|
set_vals_idx = [self.attributes.get_set_index(set_val) for set_val in passcode_set_vals]
|
||||||
|
|
||||||
presumed_selected_attributes_idx = []
|
presumed_selected_attributes_idx = []
|
||||||
@@ -54,6 +54,7 @@ class Customer(BaseModel):
|
|||||||
set_xor = xor_lists(new_sets, old_sets)
|
set_xor = xor_lists(new_sets, old_sets)
|
||||||
for user in self.users.values():
|
for user in self.users.values():
|
||||||
user.renew_keys(set_xor, attrs_xor)
|
user.renew_keys(set_xor, attrs_xor)
|
||||||
|
self.users[user.username] = user
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def valid_new_nkode(self, passcode_attr_idx: list[int]) -> bool:
|
def valid_new_nkode(self, passcode_attr_idx: list[int]) -> bool:
|
||||||
|
|||||||
@@ -1,11 +1,6 @@
|
|||||||
from pydantic import BaseModel
|
from pydantic import BaseModel
|
||||||
|
|
||||||
|
|
||||||
class NKodeAttribute(BaseModel):
|
|
||||||
attr_val: int
|
|
||||||
set_val: int
|
|
||||||
|
|
||||||
|
|
||||||
class EncipheredNKode(BaseModel):
|
class EncipheredNKode(BaseModel):
|
||||||
code: str
|
code: str
|
||||||
mask: str
|
mask: str
|
||||||
@@ -17,6 +12,8 @@ class NKodePolicy(BaseModel):
|
|||||||
distinct_sets: int = 0
|
distinct_sets: int = 0
|
||||||
distinct_attributes: int = 4
|
distinct_attributes: int = 4
|
||||||
byte_len: int = 2 # Todo: this should change the total number of bytes an attribute or set value can be
|
byte_len: int = 2 # Todo: this should change the total number of bytes an attribute or set value can be
|
||||||
|
lock_out: int = 5
|
||||||
|
expiration: int = -1 # in seconds -1 means never expires
|
||||||
|
|
||||||
|
|
||||||
class KeypadSize(BaseModel):
|
class KeypadSize(BaseModel):
|
||||||
|
|||||||
@@ -98,6 +98,7 @@ class UserInterface(BaseModel):
|
|||||||
|
|
||||||
def get_attr_idx_by_keynumb_setidx(self, key_numb: int, set_idx: int) -> int:
|
def get_attr_idx_by_keynumb_setidx(self, key_numb: int, set_idx: int) -> int:
|
||||||
assert (0 <= key_numb < self.keypad_size.numb_of_keys)
|
assert (0 <= key_numb < self.keypad_size.numb_of_keys)
|
||||||
|
assert (0 <= set_idx < self.keypad_size.attrs_per_key)
|
||||||
keypad_attr_idx = self.interface_keypad_matrix()
|
keypad_attr_idx = self.interface_keypad_matrix()
|
||||||
|
|
||||||
return keypad_attr_idx[key_numb][set_idx]
|
return keypad_attr_idx[key_numb][set_idx]
|
||||||
|
|||||||
@@ -9,11 +9,10 @@ def user_interface():
|
|||||||
|
|
||||||
|
|
||||||
def test_dispersion(user_interface):
|
def test_dispersion(user_interface):
|
||||||
pre_dispersion_graph = user_interface.attribute_adjacency_graph()
|
|
||||||
user_interface.disperse_interface()
|
|
||||||
post_dispersion_graph = user_interface.attribute_adjacency_graph()
|
|
||||||
|
|
||||||
for _ in range(10000):
|
for _ in range(10000):
|
||||||
|
pre_dispersion_graph = user_interface.attribute_adjacency_graph()
|
||||||
|
user_interface.disperse_interface()
|
||||||
|
post_dispersion_graph = user_interface.attribute_adjacency_graph()
|
||||||
for attr, adj_graph in pre_dispersion_graph.items():
|
for attr, adj_graph in pre_dispersion_graph.items():
|
||||||
assert (adj_graph.isdisjoint(post_dispersion_graph[attr]))
|
assert (adj_graph.isdisjoint(post_dispersion_graph[attr]))
|
||||||
|
|
||||||
@@ -28,10 +27,9 @@ def test_shuffle_attrs(user_interface):
|
|||||||
pre_shuffle_interface = user_interface.interface
|
pre_shuffle_interface = user_interface.interface
|
||||||
user_interface.partial_interface_shuffle()
|
user_interface.partial_interface_shuffle()
|
||||||
post_shuffle_interface = user_interface.interface
|
post_shuffle_interface = user_interface.interface
|
||||||
for i in range(1000):
|
assert (not all(
|
||||||
assert (not all(
|
post_shuffle_interface[idx] == pre_shuffle_interface[idx] for idx in range(len(post_shuffle_interface))
|
||||||
post_shuffle_interface[idx] == pre_shuffle_interface[idx] for idx in range(len(post_shuffle_interface))
|
))
|
||||||
))
|
assert (not all(
|
||||||
assert (not all(
|
post_shuffle_interface[idx] != pre_shuffle_interface[idx] for idx in range(len(post_shuffle_interface))
|
||||||
post_shuffle_interface[idx] != pre_shuffle_interface[idx] for idx in range(len(post_shuffle_interface))
|
))
|
||||||
))
|
|
||||||
|
|||||||
Reference in New Issue
Block a user