update documentation

This commit is contained in:
2025-12-03 11:36:43 -06:00
parent 64ddd9f348
commit ccf1bac337
14 changed files with 1235 additions and 266 deletions

View File

@@ -0,0 +1,69 @@
from pathlib import Path
import numpy as np
from docs.scripts.utils import render_markdown_template
from src.models import NKodePolicy, KeypadSize
from src.user_keypad import UserKeypad
from src.nkode_cipher_v2.nkode_cipher import NKodeCipher
from src.utils import select_keys_with_passcode_values
def display_keypad(icons_array: np.ndarray, props_per_key: int) -> str:
icons = ""
for idx, row in enumerate(icons_array.reshape(-1, props_per_key)):
icons += f"Key {idx}: "
icons += str(row)
icons += "\n"
return icons
if __name__ == "__main__":
policy = NKodePolicy(
max_nkode_len=10,
min_nkode_len=4,
distinct_positions=0,
distinct_properties=4,
)
keypad_size = KeypadSize(
numb_of_keys=6,
props_per_key=9
)
user_keys = NKodeCipher.create(keypad_size=keypad_size, max_nkode_len=policy.max_nkode_len)
passcode_len = 4
passcode_property_indices = np.random.choice([i for i in range(keypad_size.total_props)], size=passcode_len,
replace=False)
user_passcode = user_keys.property_key[passcode_property_indices]
pad_len = policy.max_nkode_len - passcode_len
padded_passcode = np.concatenate((user_passcode, np.zeros(pad_len, dtype=user_passcode.dtype)))
ciphered_passcode = padded_passcode ^ user_keys.pass_key
cipher = user_keys.encipher_nkode(passcode_property_indices.tolist())
padded_passcode_position_indices = user_keys.get_passcode_position_indices_padded(
passcode_property_indices.tolist())
ordered_user_position_key = user_keys.position_key[padded_passcode_position_indices]
login_keypad = UserKeypad.create(keypad_size)
selected_keys_login = select_keys_with_passcode_values(passcode_property_indices, login_keypad.keypad,
keypad_size.props_per_key)
context = {
"max_nkode_len": policy.max_nkode_len,
"numb_of_keys": keypad_size.numb_of_keys,
"props_per_key": keypad_size.props_per_key,
"user_property_key": user_keys.property_key,
"pass_key": user_keys.pass_key,
"user_position_key": user_keys.position_key,
"mask_key": user_keys.mask_key,
"user_passcode_idxs": passcode_property_indices,
"user_passcode_props": user_passcode,
"padded_passcode": padded_passcode,
"ciphered_passcode": ciphered_passcode,
"code": cipher.code,
"passcode_position_idxs": padded_passcode_position_indices[:passcode_len],
"pad_user_passcode_idxs": padded_passcode_position_indices,
"ordered_user_position_key": ordered_user_position_key,
"mask": cipher.mask,
"login_keypad": display_keypad(login_keypad.keypad, keypad_size.props_per_key),
"selected_keys": selected_keys_login,
"ordered_keys": login_keypad.keypad.reshape(-1, keypad_size.props_per_key)[selected_keys_login],
}
render_markdown_template(Path("../templates/encipher_decipher_renew_nkode_v2.template.md"),
Path("../encipher_decipher_renew_nkode_v2.md"), context)

View File

@@ -0,0 +1,70 @@
from pathlib import Path
import numpy as np
from docs.scripts.utils import render_markdown_template
from src.models import NKodePolicy, KeypadSize
from src.user_keypad import UserKeypad
from src.nkode_cipher_v2.nkode_cipher import NKodeCipher
from src.utils import select_keys_with_passcode_values
def display_keypad(icons_array: np.ndarray, props_per_key: int) -> str:
icons = ""
for idx, row in enumerate(icons_array.reshape(-1, props_per_key)):
icons += f"Key {idx}: "
icons += str(row)
icons += "\n"
return icons
if __name__ == "__main__":
policy = NKodePolicy(
max_nkode_len=10,
min_nkode_len=4,
distinct_positions=0,
distinct_properties=4,
)
keypad_size = KeypadSize(
numb_of_keys=6,
props_per_key=9
)
user_keys = NKodeCipher.create(keypad_size=keypad_size, max_nkode_len=policy.max_nkode_len)
passcode_len = 4
passcode_property_indices = np.random.choice([i for i in range(keypad_size.total_props)], size=passcode_len,
replace=False)
user_passcode = user_keys.property_key[passcode_property_indices]
pad_len = policy.max_nkode_len - passcode_len
padded_passcode = np.concatenate((user_passcode, np.zeros(pad_len, dtype=user_passcode.dtype)))
ciphered_passcode = padded_passcode ^ user_keys.pass_key
cipher = user_keys.encipher_nkode(passcode_property_indices.tolist())
padded_passcode_position_indices = user_keys.get_passcode_position_indices_padded(
passcode_property_indices.tolist())
ordered_user_position_key = user_keys.position_key[padded_passcode_position_indices]
login_keypad = UserKeypad.create(keypad_size)
selected_keys_login = select_keys_with_passcode_values(passcode_property_indices, login_keypad.keypad,
keypad_size.props_per_key)
context = {
"max_nkode_len": policy.max_nkode_len,
"numb_of_keys": keypad_size.numb_of_keys,
"props_per_key": keypad_size.props_per_key,
"user_property_key": user_keys.property_key,
"pass_key": user_keys.pass_key,
"user_position_key": user_keys.position_key,
"mask_key": user_keys.mask_key,
"user_passcode_idxs": passcode_property_indices,
"user_passcode_props": user_passcode,
"padded_passcode": padded_passcode,
"ciphered_passcode": ciphered_passcode,
"code": cipher.code,
"passcode_position_idxs": padded_passcode_position_indices[:passcode_len],
"pad_user_passcode_idxs": padded_passcode_position_indices,
"ordered_user_position_key": ordered_user_position_key,
"mask": cipher.mask,
"login_keypad": display_keypad(login_keypad.keypad, keypad_size.props_per_key),
"selected_keys": selected_keys_login,
"ordered_keys": login_keypad.keypad.reshape(-1, keypad_size.props_per_key)[selected_keys_login],
}
render_markdown_template(Path("../templates/zero_trust_nkode.template.md"),
Path("../zero_trust_nkode.md"), context)