# Encipher and Decipher nKode ### Customer Policy - max nkode length: {{ max_nkode_len }} - number of keys: {{ numb_of_keys }} - properties per key: {{ props_per_key }} - total number of properties: {{ numb_of_keys * props_per_key }} ### Customer Cipher - property key: {{ customer_property_key }} - position key: {{ customer_position_key }} --- ### User Cipher - property key: {{ user_property_key }} - passcode key: {{ pass_key }} - combined position key: {{ combined_position_key }} - mask key: {{ mask_key }} #### Combined Postion Key ```mermaid block-beta columns 2 user_pos["user postion key:\n{{user_postion_key}}"] customer_pos["customer postion key:\n{{customer_position_key}}"] space:2 xor(("XOR")):2 user_pos --> xor customer_pos --> xor space:2 comb_pos["combined postion key\n{{combined_postion_key}}"]:2 xor --> comb_pos ``` ### User Keypad - keypad: {{ user_keypad}} - user passcode indicies: {{ user_passcode_idxs}} ### nKode Cipher #### Passcode Hash ```mermaid block-beta columns 2 cprop["customer_property_key\n{{customer_property_key}}"] uprop["user_property_key\n{{user_property_key}}"] space:2 xor1(("XOR")):2 cprop --> xor1 uprop --> xor1 space:2 prop["combined_properity_key\n{{combined_property_key}}"] xor1 --> prop pass["user_passcode_indicies\n{{user_passcode_idxs}}"] space:2 sel(("select\nproperites")):2 pass --> sel prop --> sel space:2 passcode["passcode vals:\n{{passcode_vals}}"]:2 sel --> passcode space:2 pad["zero pad to\nmax nkode length: {{max_nkode_len}}"]:2 passcode -->pad space:2 paddedpasscode["padded passcode:\n{{padded_passcode}}"] pad --> paddedpasscode passkey["passcode key:\n{{pass_key}}"] space:2 xor2(("XOR")):2 passkey --> xor2 paddedpasscode --> xor2 space:2 cipheredpass["ciphered passcode:\n{{ciphered_passcode}}"]:2 xor2 --> cipheredpass space:2 hash(("hash")):2 cipheredpass --> hash space:2 cipheredhashed["hashed ciphered passcode:\n{{code}}"]:2 hash --> cipheredhashed ``` #### Mask Encipher ```mermaid block-beta columns 3 passcode_idx["passcode indicies:\n{{user_passcode_idxs}}"] comb_pos["combined position key"] cust_pos["customer position key"] space:3 pad1(("Pad with\nrandom indices")) space:1 xor1(("XOR")) comb_pos --> xor1 cust_pos --> xor1 passcode_idx --> pad1 space:3 padded_passcode_idx["padded passcode indices:\n{{pad_user_passcode_idxs}}"] pad1 --> padded_passcode_idx space:5 propidx(["Get Postion Idx:\nmap each to\nelement mod props_per_key"]) padded_passcode_idx --> propidx space:5 posidx["Passcode Position Indices:\n{{passcode_pos_idx}}"] propidx --> posidx space:1 user_pos["user position key"] xor1 --> user_pos space:4 sel(("select\npositions")) user_pos --> sel posidx --> sel space:5 passcode_pos["passcode positions:\n{{ordered_user_position_key}}"] sel --> passcode_pos mask_key["mask key\n{{mask_key}}"] space:4 xor2(("XOR")) mask_key --> xor2 passcode_pos --> xor2 space:5 mask["enciphered mask:\n {{mask}}"] xor2 --> mask ```