document encipher decipher
This commit is contained in:
@@ -1,115 +1,115 @@
|
|||||||
# Encipher and Decipher nKode
|
# Encipher and Decipher nKode
|
||||||
|
|
||||||
### Customer Policy
|
## Customer Policy
|
||||||
- max nkode length: 10
|
- max nkode length: 10
|
||||||
- number of keys: 6
|
- number of keys: 6
|
||||||
- properties per key: 9
|
- properties per key: 9
|
||||||
- total number of properties: 54
|
- total number of properties: 54
|
||||||
|
|
||||||
### Customer Cipher
|
## Customer Cipher
|
||||||
- property key: [50817 32783 33745 35836 30092 4212 15938 64571 58354 41241 3649 38852
|
- property key: [32025 56251 54239 48726 57043 21466 36907 63872 5185 40361 24862 17007
|
||||||
37860 47294 10501 43278 9946 60484 34443 38446 57997 32874 49251 58321
|
15817 35928 23390 44980 24388 9693 29079 42520 27552 55989 21064 47245
|
||||||
15849 40891 43566 53732 31357 5248 22060 15762 23773 10428 22850 7975
|
31415 33398 15649 37888 60649 19865 33780 9215 998 23952 774 36297
|
||||||
11108 23454 32723 40871 6994 35130 41638 13889 6569 20765 56191 37770
|
56975 53701 54205 26202 57035 1589 27142 51011 41787 17416 14611 52249
|
||||||
4448 37031 30452 43080 24525 44717]
|
24554 2826 51850 29516 15825 40218]
|
||||||
- position key: [25392 13634 17753 25555 61290 50870 49934 53104 9796]
|
- position key: [12958 41262 53564 57128 61719 22386 19660 14119 45982]
|
||||||
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
### User Cipher
|
## User Cipher
|
||||||
- property key: [35724 37130 47630 20125 52673 62248 61979 44917 17470 11483 20317 56084
|
- property key: [62675 55318 20994 6862 11923 60069 48390 49437 49481 16571 8941 56614
|
||||||
34699 49571 32249 15009 43246 57623 21032 62384 61961 34049 1963 5370
|
10716 5617 39088 5352 303 46293 35634 37801 3265 31330 43043 35493
|
||||||
1121 47700 26633 59166 16526 38173 56846 41594 54438 8714 46049 25028
|
381 22746 14834 21538 11121 1556 31651 46121 26370 30287 43028 991
|
||||||
38681 2017 39749 42164 38277 19216 23760 35115 23020 18954 26604 50262
|
23653 3275 18911 25823 25799 46792 47794 37441 62612 49574 53766 19506
|
||||||
21588 62239 30226 58722 12644 39141]
|
22024 38690 14853 51773 46825 63850]
|
||||||
- passcode key: [51522 14440 21036 1484 4829 51359 61560 41543 23848 29080]
|
- passcode key: [37275 57463 39825 1075 60548 11847 57381 15417 51401 34599]
|
||||||
- combined position key: [14972 5803 54986 46940 19674 32943 38431 42194 29083]
|
- combined position key: [10840 53435 61304 62480 44024 35399 25077 63411 2973]
|
||||||
- mask key: [15948 8251 52095 4511 25902 21701 15340 4458 15137 44295]
|
- mask key: [14299 50705 35900 48569 35541 57915 43280 32407 20229 24566]
|
||||||
|
|
||||||
#### Combined Postion Key
|
### Combined Postion Key
|
||||||
```mermaid
|
```mermaid
|
||||||
block-beta
|
block-beta
|
||||||
columns 2
|
columns 2
|
||||||
user_pos["user position key:\n[22860 9193 37779 54415 41904 17945 21777 27554 22495]"]
|
user_pos["user position key:\n[ 6342 29077 15940 11064 23279 56629 11577 49300 47107]"]
|
||||||
customer_pos["customer position key:\n[25392 13634 17753 25555 61290 50870 49934 53104 9796]"]
|
customer_pos["customer position key:\n[12958 41262 53564 57128 61719 22386 19660 14119 45982]"]
|
||||||
space:2
|
space:2
|
||||||
xor(("XOR")):2
|
xor(("XOR")):2
|
||||||
user_pos --> xor
|
user_pos --> xor
|
||||||
customer_pos --> xor
|
customer_pos --> xor
|
||||||
space:2
|
space:2
|
||||||
comb_pos["combined position key\n[14972 5803 54986 46940 19674 32943 38431 42194 29083]"]:2
|
comb_pos["combined position key\n[10840 53435 61304 62480 44024 35399 25077 63411 2973]"]:2
|
||||||
xor --> comb_pos
|
xor --> comb_pos
|
||||||
```
|
```
|
||||||
|
|
||||||
### User Keypad
|
## User Keypad
|
||||||
- keypad:
|
- keypad:
|
||||||
- user passcode indices: [22, 6, 38, 21]
|
- user passcode indices: [26, 31, 1, 53]
|
||||||
|
|
||||||
### nKode Cipher
|
## nKode Cipher
|
||||||
|
|
||||||
#### Passcode Hash
|
### Passcode Hash
|
||||||
```mermaid
|
```mermaid
|
||||||
block-beta
|
block-beta
|
||||||
columns 2
|
columns 2
|
||||||
cprop["customer_property_key\n[50817 32783 33745 35836 30092 4212 15938 64571 58354 41241 3649 38852
|
cprop["customer_property_key\n[32025 56251 54239 48726 57043 21466 36907 63872 5185 40361 24862 17007
|
||||||
37860 47294 10501 43278 9946 60484 34443 38446 57997 32874 49251 58321
|
15817 35928 23390 44980 24388 9693 29079 42520 27552 55989 21064 47245
|
||||||
15849 40891 43566 53732 31357 5248 22060 15762 23773 10428 22850 7975
|
31415 33398 15649 37888 60649 19865 33780 9215 998 23952 774 36297
|
||||||
11108 23454 32723 40871 6994 35130 41638 13889 6569 20765 56191 37770
|
56975 53701 54205 26202 57035 1589 27142 51011 41787 17416 14611 52249
|
||||||
4448 37031 30452 43080 24525 44717]"]
|
24554 2826 51850 29516 15825 40218]"]
|
||||||
uprop["user_property_key\n[35724 37130 47630 20125 52673 62248 61979 44917 17470 11483 20317 56084
|
uprop["user_property_key\n[62675 55318 20994 6862 11923 60069 48390 49437 49481 16571 8941 56614
|
||||||
34699 49571 32249 15009 43246 57623 21032 62384 61961 34049 1963 5370
|
10716 5617 39088 5352 303 46293 35634 37801 3265 31330 43043 35493
|
||||||
1121 47700 26633 59166 16526 38173 56846 41594 54438 8714 46049 25028
|
381 22746 14834 21538 11121 1556 31651 46121 26370 30287 43028 991
|
||||||
38681 2017 39749 42164 38277 19216 23760 35115 23020 18954 26604 50262
|
23653 3275 18911 25823 25799 46792 47794 37441 62612 49574 53766 19506
|
||||||
21588 62239 30226 58722 12644 39141]"]
|
22024 38690 14853 51773 46825 63850]"]
|
||||||
space:2
|
space:2
|
||||||
xor1(("XOR")):2
|
xor1(("XOR")):2
|
||||||
cprop --> xor1
|
cprop --> xor1
|
||||||
uprop --> xor1
|
uprop --> xor1
|
||||||
space:2
|
space:2
|
||||||
prop["combined_property_key\n[19725 4357 14815 50529 47181 58204 52313 21326 42956 36290 16668 19664
|
prop["combined_property_key\n[35274 941 33245 42136 61504 47487 11565 14493 54536 56594 17395 40777
|
||||||
5231 31005 21756 37807 36404 3411 54435 26014 4228 1387 51144 63275
|
5141 39337 50158 47964 24171 37128 64165 13745 26465 41175 64107 12840
|
||||||
14728 9711 49703 14074 15091 33181 34850 40936 34939 2742 60067 32483
|
31690 55980 1235 49186 51096 19341 63575 38870 25828 11231 43794 36374
|
||||||
48253 23679 58518 15123 36567 49706 65142 49002 16453 6935 48275 22492
|
33514 56590 39522 645 47628 45309 53428 21762 22447 34222 60181 32811
|
||||||
17716 25528 230 19754 28329 13896]"]
|
2530 39976 61583 47473 35640 25712]"]
|
||||||
xor1 --> prop
|
xor1 --> prop
|
||||||
pass["user_passcode_indices\n[22, 6, 38, 21]"]
|
pass["user_passcode_indices\n[26, 31, 1, 53]"]
|
||||||
space:2
|
space:2
|
||||||
sel(("select\properties")):2
|
sel(("select\nproperties")):2
|
||||||
pass --> sel
|
pass --> sel
|
||||||
prop --> sel
|
prop --> sel
|
||||||
space:2
|
space:2
|
||||||
passcode["user passcode properties:\n[51144 52313 58518 1387]"]:2
|
passcode["user passcode properties:\n[ 1235 38870 941 25712]"]:2
|
||||||
sel --> passcode
|
sel --> passcode
|
||||||
space:2
|
space:2
|
||||||
pad["zero pad to\nmax nkode length: 10"]:2
|
pad["zero pad to\nmax nkode length: 10"]:2
|
||||||
passcode -->pad
|
passcode -->pad
|
||||||
space:2
|
space:2
|
||||||
paddedpasscode["padded passcode:\n[51144 52313 58518 1387 0 0 0 0 0 0]"]
|
paddedpasscode["padded passcode:\n[ 1235 38870 941 25712 0 0 0 0 0 0]"]
|
||||||
pad --> paddedpasscode
|
pad --> paddedpasscode
|
||||||
passkey["passcode key:\n[51522 14440 21036 1484 4829 51359 61560 41543 23848 29080]"]
|
passkey["passcode key:\n[37275 57463 39825 1075 60548 11847 57381 15417 51401 34599]"]
|
||||||
space:2
|
space:2
|
||||||
xor2(("XOR")):2
|
xor2(("XOR")):2
|
||||||
passkey --> xor2
|
passkey --> xor2
|
||||||
paddedpasscode --> xor2
|
paddedpasscode --> xor2
|
||||||
space:2
|
space:2
|
||||||
cipheredpass["ciphered passcode:\n[ 3722 62513 46778 167 4829 51359 61560 41543 23848 29080]"]:2
|
cipheredpass["ciphered passcode:\n[38216 30625 38972 24643 60548 11847 57381 15417 51401 34599]"]:2
|
||||||
xor2 --> cipheredpass
|
xor2 --> cipheredpass
|
||||||
space:2
|
space:2
|
||||||
hash(("hash")):2
|
hash(("hash")):2
|
||||||
cipheredpass --> hash
|
cipheredpass --> hash
|
||||||
space:2
|
space:2
|
||||||
cipheredhashed["hashed ciphered passcode:\n$2b$12$AQRZP88momhTaKGYaPzdiuBybg7V49SiZ8y9PQMoT0plZrEsbYO.K"]:2
|
cipheredhashed["hashed ciphered passcode:\n$2b$12$6WJQ1Ilu7fZunT61eo.0e.nN81TiuW5BYHfFrEz.jBwE4dotjOX7e"]:2
|
||||||
hash --> cipheredhashed
|
hash --> cipheredhashed
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Mask Encipher
|
### Mask Encipher
|
||||||
```mermaid
|
```mermaid
|
||||||
block-beta
|
block-beta
|
||||||
columns 3
|
columns 3
|
||||||
passcode_idx["passcode indices:\n[22, 6, 38, 21]"]
|
passcode_idx["passcode indices:\n[26, 31, 1, 53]"]
|
||||||
comb_pos["combined position key:\n[14972 5803 54986 46940 19674 32943 38431 42194 29083]"]
|
comb_pos["combined position key:\n[10840 53435 61304 62480 44024 35399 25077 63411 2973]"]
|
||||||
cust_pos["customer position key:\n[25392 13634 17753 25555 61290 50870 49934 53104 9796]"]
|
cust_pos["customer position key:\n[12958 41262 53564 57128 61719 22386 19660 14119 45982]"]
|
||||||
|
|
||||||
space:3
|
space:3
|
||||||
propidx(["Get Position Idx:\nmap each to element mod props_per_key"])
|
propidx(["Get Position Idx:\nmap each to element mod props_per_key"])
|
||||||
@@ -120,7 +120,7 @@ block-beta
|
|||||||
cust_pos --> xor1
|
cust_pos --> xor1
|
||||||
|
|
||||||
space:3
|
space:3
|
||||||
passcode_position_idx["passcode poition indices:\n[4, 6, 2, 3]"]
|
passcode_position_idx["passcode poition indices:\n[8, 4, 1, 8]"]
|
||||||
propidx --> passcode_position_idx
|
propidx --> passcode_position_idx
|
||||||
|
|
||||||
space:5
|
space:5
|
||||||
@@ -128,10 +128,10 @@ block-beta
|
|||||||
passcode_position_idx --> pad1
|
passcode_position_idx --> pad1
|
||||||
|
|
||||||
space:5
|
space:5
|
||||||
posidx["Padded Passcode Position Indices:\n[4, 6, 2, 3, 7, 1, 8, 0, 5, 4]"]
|
posidx["Padded Passcode Position Indices:\n[8, 4, 1, 8, 5, 4, 0, 1, 2, 3]"]
|
||||||
pad1 --> posidx
|
pad1 --> posidx
|
||||||
space:1
|
space:1
|
||||||
user_pos["user position key:\n[22860 9193 37779 54415 41904 17945 21777 27554 22495]"]
|
user_pos["user position key:\n[ 6342 29077 15940 11064 23279 56629 11577 49300 47107]"]
|
||||||
xor1 --> user_pos
|
xor1 --> user_pos
|
||||||
|
|
||||||
space:4
|
space:4
|
||||||
@@ -139,14 +139,107 @@ block-beta
|
|||||||
user_pos --> sel
|
user_pos --> sel
|
||||||
posidx --> sel
|
posidx --> sel
|
||||||
space:5
|
space:5
|
||||||
passcode_pos["passcode positions:\n[41904 21777 37779 54415 27554 9193 22495 22860 17945 41904]"]
|
passcode_pos["ordered user passcode positions:\n[47107 23279 29077 47107 56629 23279 6342 29077 15940 11064]"]
|
||||||
sel --> passcode_pos
|
sel --> passcode_pos
|
||||||
mask_key["mask key\n[15948 8251 52095 4511 25902 21701 15340 4458 15137 44295]"]
|
mask_key["mask key\n[14299 50705 35900 48569 35541 57915 43280 32407 20229 24566]"]
|
||||||
space:4
|
space:4
|
||||||
xor2(("XOR"))
|
xor2(("XOR"))
|
||||||
mask_key --> xor2
|
mask_key --> xor2
|
||||||
passcode_pos --> xor2
|
passcode_pos --> xor2
|
||||||
space:5
|
space:5
|
||||||
mask["enciphered mask:\n [40444 29994 22764 50448 3724 30508 27699 18470 32056 3767]"]
|
mask["enciphered mask:\n [36824 40190 64937 1466 22496 47316 45526 3842 28993 29902]"]
|
||||||
xor2 --> mask
|
xor2 --> mask
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### Validate nKode
|
||||||
|
|
||||||
|
```mermaid
|
||||||
|
block-beta
|
||||||
|
columns 4
|
||||||
|
selected_keys["selected keys:\n[2, 4, 4, 4]"]
|
||||||
|
login_keypad["login keypad:\nKey 0: [27 28 20 3 4 41 33 52 35]
|
||||||
|
Key 1: [18 10 38 39 40 5 6 34 8]
|
||||||
|
Key 2: [ 0 37 29 21 49 32 24 16 26]
|
||||||
|
Key 3: [36 19 2 48 13 23 42 25 44]
|
||||||
|
Key 4: [45 1 47 30 31 14 15 43 53]
|
||||||
|
Key 5: [ 9 46 11 12 22 50 51 7 17]
|
||||||
|
"]
|
||||||
|
mask["enciphered mask:\n [36824 40190 64937 1466 22496 47316 45526 3842 28993 29902]"]
|
||||||
|
mask_key["mask key:\n[14299 50705 35900 48569 35541 57915 43280 32407 20229 24566]"]
|
||||||
|
space:4
|
||||||
|
|
||||||
|
selectkeys(("select keys"))
|
||||||
|
space:2
|
||||||
|
xor1(("XOR"))
|
||||||
|
mask --> xor1
|
||||||
|
mask_key --> xor1
|
||||||
|
selected_keys -->selectkeys
|
||||||
|
login_keypad --> selectkeys
|
||||||
|
space:4
|
||||||
|
|
||||||
|
ordered_keys["ordered keys:\n[[ 0 37 29 21 49 32 24 16 26]
|
||||||
|
[45 1 47 30 31 14 15 43 53]
|
||||||
|
[45 1 47 30 31 14 15 43 53]
|
||||||
|
[45 1 47 30 31 14 15 43 53]]"]
|
||||||
|
space:1
|
||||||
|
user_position_key["user position key:\n[ 6342 29077 15940 11064 23279 56629 11577 49300 47107]"]
|
||||||
|
passcode_pos["ordered user passcode positions:\n[47107 23279 29077 47107 56629 23279 6342 29077 15940 11064]"]
|
||||||
|
selectkeys --> ordered_keys
|
||||||
|
xor1 --> passcode_pos
|
||||||
|
space:7
|
||||||
|
|
||||||
|
get_passcode_idxs(("recover passcode\nposition indices"))
|
||||||
|
user_position_key --> get_passcode_idxs
|
||||||
|
passcode_pos --> get_passcode_idxs
|
||||||
|
space:7
|
||||||
|
|
||||||
|
passcode_pos_idxs["padded passcode position indices:\n[8, 4, 1, 8, 5, 4, 0, 1, 2, 3]"]
|
||||||
|
get_passcode_idxs --> passcode_pos_idxs
|
||||||
|
space:4
|
||||||
|
|
||||||
|
get_presumed_idxs(("recover passcode\nproperty indices"))
|
||||||
|
ordered_keys --> get_presumed_idxs
|
||||||
|
passcode_pos_idxs --> get_presumed_idxs
|
||||||
|
space:7
|
||||||
|
|
||||||
|
passcode_prop_idxs["presumed passcode property indices:\n[26, 31, 1, 53]"]
|
||||||
|
space:1
|
||||||
|
prop["combined_property_key\n[35274 941 33245 42136 61504 47487 11565 14493 54536 56594 17395 40777
|
||||||
|
5141 39337 50158 47964 24171 37128 64165 13745 26465 41175 64107 12840
|
||||||
|
31690 55980 1235 49186 51096 19341 63575 38870 25828 11231 43794 36374
|
||||||
|
33514 56590 39522 645 47628 45309 53428 21762 22447 34222 60181 32811
|
||||||
|
2530 39976 61583 47473 35640 25712]"]
|
||||||
|
cipheredhashed["hashed ciphered passcode:\n$2b$12$6WJQ1Ilu7fZunT61eo.0e.nN81TiuW5BYHfFrEz.jBwE4dotjOX7e"]
|
||||||
|
get_presumed_idxs --> passcode_pos_idxs
|
||||||
|
get_presumed_idxs --> passcode_prop_idxs
|
||||||
|
space:5
|
||||||
|
|
||||||
|
sel(("select\nproperties"))
|
||||||
|
passcode_prop_idxs --> sel
|
||||||
|
prop --> sel
|
||||||
|
space:7
|
||||||
|
|
||||||
|
passcode_prop["presumed passcode properties:\n[ 1235 38870 941 25712]"]
|
||||||
|
sel --> passcode_prop
|
||||||
|
space:7
|
||||||
|
|
||||||
|
cipher(("encipher"))
|
||||||
|
passcode_prop --> cipher
|
||||||
|
space:7
|
||||||
|
|
||||||
|
cipheredpass["ciphered passcode:\n[38216 30625 38972 24643 60548 11847 57381 15417 51401 34599]"]
|
||||||
|
cipher --> cipheredpass
|
||||||
|
space:8
|
||||||
|
|
||||||
|
|
||||||
|
comp(["compare"])
|
||||||
|
cipheredpass --> comp
|
||||||
|
cipheredhashed --> comp
|
||||||
|
space:7
|
||||||
|
|
||||||
|
suc(("valid"))
|
||||||
|
fail(("invalid"))
|
||||||
|
comp --> suc
|
||||||
|
comp --> fail
|
||||||
|
|
||||||
|
```
|
||||||
@@ -11,6 +11,14 @@ from src.models import NKodePolicy, KeypadSize
|
|||||||
from src.nkode_api import NKodeAPI
|
from src.nkode_api import NKodeAPI
|
||||||
from src.utils import select_keys_with_passcode_values
|
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__":
|
if __name__ == "__main__":
|
||||||
api = NKodeAPI()
|
api = NKodeAPI()
|
||||||
|
|
||||||
@@ -54,6 +62,9 @@ if __name__ == "__main__":
|
|||||||
ordered_user_position_key = user_position_key[padded_passcode_position_indices]
|
ordered_user_position_key = user_position_key[padded_passcode_position_indices]
|
||||||
mask = ordered_user_position_key ^ user.cipher.mask_key
|
mask = ordered_user_position_key ^ user.cipher.mask_key
|
||||||
encoded_mask = user.cipher.encode_base64_str(mask)
|
encoded_mask = user.cipher.encode_base64_str(mask)
|
||||||
|
login_keypad = api.get_login_keypad(username, customer_id)
|
||||||
|
selected_keys_login = select_keys_with_passcode_values(passcode_property_indices, login_keypad,
|
||||||
|
keypad_size.props_per_key)
|
||||||
context = {
|
context = {
|
||||||
"max_nkode_len": policy.max_nkode_len,
|
"max_nkode_len": policy.max_nkode_len,
|
||||||
"numb_of_keys": keypad_size.numb_of_keys,
|
"numb_of_keys": keypad_size.numb_of_keys,
|
||||||
@@ -75,5 +86,8 @@ if __name__ == "__main__":
|
|||||||
"pad_user_passcode_idxs": padded_passcode_position_indices,
|
"pad_user_passcode_idxs": padded_passcode_position_indices,
|
||||||
"ordered_user_position_key":ordered_user_position_key,
|
"ordered_user_position_key":ordered_user_position_key,
|
||||||
"mask": mask,
|
"mask": mask,
|
||||||
|
"selected_keys": selected_keys_login,
|
||||||
|
"login_keypad": display_keypad(login_keypad, keypad_size.props_per_key),
|
||||||
|
"ordered_keys": login_keypad.reshape(-1, keypad_size.props_per_key)[selected_keys_login],
|
||||||
}
|
}
|
||||||
render_markdown_template(Path("../templates/encipher_decipher_nkode.template.md"), Path("../encipher_decipher_nkode.md"), context)
|
render_markdown_template(Path("../templates/encipher_decipher_nkode.template.md"), Path("../encipher_decipher_nkode.md"), context)
|
||||||
@@ -140,34 +140,73 @@ block-beta
|
|||||||
login_keypad["login keypad:\n{{login_keypad}}"]
|
login_keypad["login keypad:\n{{login_keypad}}"]
|
||||||
mask["enciphered mask:\n {{mask}}"]
|
mask["enciphered mask:\n {{mask}}"]
|
||||||
mask_key["mask key:\n{{mask_key}}"]
|
mask_key["mask key:\n{{mask_key}}"]
|
||||||
space:6
|
|
||||||
|
|
||||||
user_position_key["user position key:\n{{user_position_key}}"]
|
|
||||||
passcode_pos["ordered user passcode positions:\n{{ordered_user_position_key}}"]
|
|
||||||
space:4
|
space:4
|
||||||
|
|
||||||
|
selectkeys(("select keys"))
|
||||||
space:2
|
space:2
|
||||||
|
xor1(("XOR"))
|
||||||
|
mask --> xor1
|
||||||
|
mask_key --> xor1
|
||||||
|
selected_keys -->selectkeys
|
||||||
|
login_keypad --> selectkeys
|
||||||
|
space:4
|
||||||
|
|
||||||
|
ordered_keys["ordered keys:\n{{ordered_keys}}"]
|
||||||
|
space:1
|
||||||
|
user_position_key["user position key:\n{{user_position_key}}"]
|
||||||
|
passcode_pos["ordered user passcode positions:\n{{ordered_user_position_key}}"]
|
||||||
|
selectkeys --> ordered_keys
|
||||||
|
xor1 --> passcode_pos
|
||||||
|
space:7
|
||||||
|
|
||||||
get_passcode_idxs(("recover passcode\nposition indices"))
|
get_passcode_idxs(("recover passcode\nposition indices"))
|
||||||
|
user_position_key --> get_passcode_idxs
|
||||||
|
passcode_pos --> get_passcode_idxs
|
||||||
space:7
|
space:7
|
||||||
|
|
||||||
passcode_pos_idxs["padded passcode position indices:\n{{pad_user_passcode_idxs}}"]
|
passcode_pos_idxs["padded passcode position indices:\n{{pad_user_passcode_idxs}}"]
|
||||||
space:5
|
get_passcode_idxs --> passcode_pos_idxs
|
||||||
|
space:4
|
||||||
|
|
||||||
get_presumed_idxs(("recover passcode\nproperty indices"))
|
get_presumed_idxs(("recover passcode\nproperty indices"))
|
||||||
|
ordered_keys --> get_presumed_idxs
|
||||||
|
passcode_pos_idxs --> get_presumed_idxs
|
||||||
space:7
|
space:7
|
||||||
|
|
||||||
passcode_prop_idxs["presumed passcode property indices:\n{{user_passcode_idxs}}"]
|
passcode_prop_idxs["presumed passcode property indices:\n{{user_passcode_idxs}}"]
|
||||||
space:7
|
|
||||||
|
|
||||||
sel(("select\nproperties"))
|
|
||||||
space:1
|
space:1
|
||||||
prop["combined_property_key\n{{combined_property_key}}"]
|
prop["combined_property_key\n{{combined_property_key}}"]
|
||||||
space:5
|
|
||||||
passcode_prop["presumed passcode properties:\n{{user_passcode_props}}"]
|
|
||||||
space:1
|
|
||||||
cipheredhashed["hashed ciphered passcode:\n{{code}}"]
|
cipheredhashed["hashed ciphered passcode:\n{{code}}"]
|
||||||
space:6
|
get_presumed_idxs --> passcode_pos_idxs
|
||||||
|
get_presumed_idxs --> passcode_prop_idxs
|
||||||
|
space:5
|
||||||
|
|
||||||
comp(("compare"))
|
sel(("select\nproperties"))
|
||||||
|
passcode_prop_idxs --> sel
|
||||||
|
prop --> sel
|
||||||
|
space:7
|
||||||
|
|
||||||
|
passcode_prop["presumed passcode properties:\n{{user_passcode_props}}"]
|
||||||
|
sel --> passcode_prop
|
||||||
|
space:7
|
||||||
|
|
||||||
|
cipher(("encipher"))
|
||||||
|
passcode_prop --> cipher
|
||||||
|
space:7
|
||||||
|
|
||||||
|
cipheredpass["ciphered passcode:\n{{ciphered_passcode}}"]
|
||||||
|
cipher --> cipheredpass
|
||||||
|
space:8
|
||||||
|
|
||||||
|
|
||||||
|
comp(["compare"])
|
||||||
|
cipheredpass --> comp
|
||||||
|
cipheredhashed --> comp
|
||||||
|
space:7
|
||||||
|
|
||||||
|
suc(("valid"))
|
||||||
|
fail(("invalid"))
|
||||||
|
comp --> suc
|
||||||
|
comp --> fail
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|||||||
Reference in New Issue
Block a user