test create user
This commit is contained in:
@@ -37,12 +37,12 @@ class CustomerInterface(BaseModel):
|
|||||||
return secure_fisher_yates_shuffle(list(range(len(self.interface))))
|
return secure_fisher_yates_shuffle(list(range(len(self.interface))))
|
||||||
|
|
||||||
def get_attr_set_val(self, attr: int) -> int:
|
def get_attr_set_val(self, attr: int) -> int:
|
||||||
assert(attr in self.interface)
|
assert(attr in self.customer_interface)
|
||||||
attr_idx = self.interface.index(attr)
|
attr_idx = self.customer_interface.index(attr)
|
||||||
set_idx = attr_idx % self.numb_of_sets
|
set_idx = attr_idx % self.attrs_per_key
|
||||||
return self.set_vals[set_idx]
|
return self.set_vals[set_idx]
|
||||||
|
|
||||||
def get_set_index(self, set_val: int) -> int:
|
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)
|
return self.set_vals.index(set_val)
|
||||||
|
|
||||||
|
|||||||
@@ -84,7 +84,6 @@ class PseudoNKodeAPI(BaseModel):
|
|||||||
attrs_per_key = customer.interface.attrs_per_key
|
attrs_per_key = customer.interface.attrs_per_key
|
||||||
assert(all(0 <= key <= numb_of_keys for key in confirm_key_entry))
|
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)
|
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
|
set_values = customer.interface.set_vals
|
||||||
new_user_keys = UserCipherKeys.new_user_encipher_keys(numb_of_keys, attrs_per_key, set_values)
|
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)
|
enciphered_passcode = new_user_keys.encipher_nkode(passcode, customer.interface)
|
||||||
@@ -92,7 +91,11 @@ class PseudoNKodeAPI(BaseModel):
|
|||||||
username=username,
|
username=username,
|
||||||
enciphered_passcode=enciphered_passcode,
|
enciphered_passcode=enciphered_passcode,
|
||||||
user_keys=new_user_keys,
|
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)
|
self.customers[customer_id].users.append(new_user)
|
||||||
return "success"
|
return "success"
|
||||||
|
|||||||
@@ -47,14 +47,14 @@ class UserCipherKeys(BaseModel):
|
|||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def encode_base64_str(data: list[int]) -> str:
|
def encode_base64_str(data: list[int]) -> str:
|
||||||
return base64.b64encode(data).decode("utf-8")
|
return base64.b64encode(bytes(data)).decode("utf-8")
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def decode_base64_str(data: str) -> list[int]:
|
def decode_base64_str(data: str) -> list[int]:
|
||||||
return list(base64.b64decode(data))
|
return list(base64.b64decode(data))
|
||||||
|
|
||||||
def _hash_passcode(self, passcode: list[int]) -> str:
|
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)
|
hashed_data = bcrypt.hashpw(passcode_digest, self.salt)
|
||||||
return hashed_data.decode("utf-8")
|
return hashed_data.decode("utf-8")
|
||||||
|
|
||||||
@@ -65,7 +65,7 @@ class UserCipherKeys(BaseModel):
|
|||||||
) -> EncipheredNKode:
|
) -> EncipheredNKode:
|
||||||
max_nkode_len = 10
|
max_nkode_len = 10
|
||||||
passcode_len = len(nkode_attr_index)
|
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]
|
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)
|
mask_cipher = self.pad_user_mask(user_nkode_mask, customer_interface, max_nkode_len)
|
||||||
passcode_cipher = self.pass_key
|
passcode_cipher = self.pass_key
|
||||||
@@ -76,11 +76,10 @@ class UserCipherKeys(BaseModel):
|
|||||||
attr_val = user_nkode_attrs[idx]
|
attr_val = user_nkode_attrs[idx]
|
||||||
passcode_cipher[idx] ^= alpha ^ attr_val
|
passcode_cipher[idx] ^= alpha ^ attr_val
|
||||||
|
|
||||||
for idx in range(max_nkode_len):
|
|
||||||
set_idx = customer_interface.get_set_index(user_nkode_mask[idx])
|
set_idx = customer_interface.get_set_index(user_nkode_mask[idx])
|
||||||
mask_cipher[idx] ^= self.set_key[set_idx] ^ self.mask_key[idx]
|
mask_cipher[idx] ^= self.set_key[set_idx] ^ self.mask_key[idx]
|
||||||
|
|
||||||
return EncipheredNKode(
|
return EncipheredNKode(
|
||||||
code=self._hash_passcode(passcode_cipher),
|
code=self._hash_passcode(passcode_cipher),
|
||||||
mask=self.base64.b64encode(mask_cipher).decode("utf-8")
|
mask=self.encode_base64_str(mask_cipher)
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -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)
|
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)
|
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)
|
set_key_selection = key_selection(set_interface)
|
||||||
|
|
||||||
confirm_interface = pseudo_nkode_api.set_nkode(username, customer.customer_id, set_key_selection, session_id)
|
confirm_interface = pseudo_nkode_api.set_nkode(username, customer.customer_id, set_key_selection, session_id)
|
||||||
|
|||||||
Reference in New Issue
Block a user