diff --git a/src/nkode_interface.py b/src/nkode_interface.py index 59eb105..4f5e5f9 100644 --- a/src/nkode_interface.py +++ b/src/nkode_interface.py @@ -37,12 +37,12 @@ class CustomerInterface(BaseModel): return secure_fisher_yates_shuffle(list(range(len(self.interface)))) def get_attr_set_val(self, attr: int) -> int: - assert(attr in self.interface) - attr_idx = self.interface.index(attr) - set_idx = attr_idx % self.numb_of_sets + assert(attr in self.customer_interface) + attr_idx = self.customer_interface.index(attr) + set_idx = attr_idx % self.attrs_per_key return self.set_vals[set_idx] def get_set_index(self, set_val: int) -> int: - assert(set_val in self.get_set_values()) + assert(set_val in self.set_vals) return self.set_vals.index(set_val) diff --git a/src/pseudo_nkode_api.py b/src/pseudo_nkode_api.py index e058f17..792e9db 100644 --- a/src/pseudo_nkode_api.py +++ b/src/pseudo_nkode_api.py @@ -84,7 +84,6 @@ class PseudoNKodeAPI(BaseModel): attrs_per_key = customer.interface.attrs_per_key assert(all(0 <= key <= numb_of_keys for key in confirm_key_entry)) passcode = self._deduce_passcode(session_id, numb_of_keys, attrs_per_key, confirm_key_entry) - attrs_per_key = customer.interface.numb_of_sets set_values = customer.interface.set_vals new_user_keys = UserCipherKeys.new_user_encipher_keys(numb_of_keys, attrs_per_key, set_values) enciphered_passcode = new_user_keys.encipher_nkode(passcode, customer.interface) @@ -92,7 +91,11 @@ class PseudoNKodeAPI(BaseModel): username=username, enciphered_passcode=enciphered_passcode, user_keys=new_user_keys, - user_interface=self.sessions[session_id].confirm_interface + user_interface=UserInterface( + interface_index=self.sessions[session_id].confirm_interface, + numb_sets=attrs_per_key, + numb_keys=numb_of_keys + ) ) self.customers[customer_id].users.append(new_user) return "success" diff --git a/src/user_cipher_keys.py b/src/user_cipher_keys.py index ac45664..9b87c15 100644 --- a/src/user_cipher_keys.py +++ b/src/user_cipher_keys.py @@ -47,14 +47,14 @@ class UserCipherKeys(BaseModel): @staticmethod def encode_base64_str(data: list[int]) -> str: - return base64.b64encode(data).decode("utf-8") + return base64.b64encode(bytes(data)).decode("utf-8") @staticmethod def decode_base64_str(data: str) -> list[int]: return list(base64.b64decode(data)) def _hash_passcode(self, passcode: list[int]) -> str: - passcode_digest = base64.b64encode(hashlib.sha256(passcode).digest()) + passcode_digest = base64.b64encode(hashlib.sha256(bytes(passcode)).digest()) hashed_data = bcrypt.hashpw(passcode_digest, self.salt) return hashed_data.decode("utf-8") @@ -65,7 +65,7 @@ class UserCipherKeys(BaseModel): ) -> EncipheredNKode: max_nkode_len = 10 passcode_len = len(nkode_attr_index) - user_nkode_attrs = [customer_interface.interface[idx] for idx in nkode_attr_index] + user_nkode_attrs = [customer_interface.customer_interface[idx] for idx in nkode_attr_index] user_nkode_mask = [customer_interface.get_attr_set_val(attr) for attr in user_nkode_attrs] mask_cipher = self.pad_user_mask(user_nkode_mask, customer_interface, max_nkode_len) passcode_cipher = self.pass_key @@ -76,11 +76,10 @@ class UserCipherKeys(BaseModel): attr_val = user_nkode_attrs[idx] passcode_cipher[idx] ^= alpha ^ attr_val - for idx in range(max_nkode_len): set_idx = customer_interface.get_set_index(user_nkode_mask[idx]) mask_cipher[idx] ^= self.set_key[set_idx] ^ self.mask_key[idx] return EncipheredNKode( code=self._hash_passcode(passcode_cipher), - mask=self.base64.b64encode(mask_cipher).decode("utf-8") + mask=self.encode_base64_str(mask_cipher) ) diff --git a/test/test_pseudo_nkode_api.py b/test/test_pseudo_nkode_api.py index 2d5b9a9..5564505 100644 --- a/test/test_pseudo_nkode_api.py +++ b/test/test_pseudo_nkode_api.py @@ -15,7 +15,7 @@ def test_create_new_user(pseudo_nkode_api, numb_keys, attrs_per_key, user_passco customer = pseudo_nkode_api.create_new_customer(numb_keys, attrs_per_key) session_id, set_interface = pseudo_nkode_api.generate_index_interface(customer.customer_id) - key_selection = lambda interface: [interface.index(attr) % attrs_per_key for attr in user_passcode] + key_selection = lambda interface: [interface.index(attr) // attrs_per_key for attr in user_passcode] set_key_selection = key_selection(set_interface) confirm_interface = pseudo_nkode_api.set_nkode(username, customer.customer_id, set_key_selection, session_id)