60 lines
1.7 KiB
Plaintext
60 lines
1.7 KiB
Plaintext
func calcpass passw$ nonce$ .
|
|
start = 1
|
|
passw = number passw$
|
|
for c$ in strchars nonce$
|
|
if c$ <> "0"
|
|
if start = 1 : num2 = passw
|
|
start = 0
|
|
.
|
|
if c$ = "1"
|
|
num1 = bitshift bitand num2 0xFFFFFF80 -7
|
|
num2 = bitshift num2 25
|
|
elif c$ = "2"
|
|
num1 = bitshift bitand num2 0xFFFFFFF0 -4
|
|
num2 = bitshift num2 28
|
|
elif c$ = "3"
|
|
num1 = bitshift bitand num2 0xFFFFFFF8 -3
|
|
num2 = bitshift num2 29
|
|
elif c$ = "4"
|
|
num1 = bitshift num2 1
|
|
num2 = bitshift num2 -31
|
|
elif c$ = "5"
|
|
num1 = bitshift num2 5
|
|
num2 = bitshift num2 -27
|
|
elif c$ = "6"
|
|
num1 = bitshift num2 12
|
|
num2 = bitshift num2 -20
|
|
elif c$ = "7"
|
|
h1 = bitand num2 0x0000FF00
|
|
h2 = bitshift bitand num2 0x000000FF 24
|
|
h3 = bitshift bitand num2 0x00FF0000 -16
|
|
num1 = bitor bitor h1 h2 h3
|
|
num2 = bitshift bitand num2 0xFF000000 -8
|
|
elif c$ = "8"
|
|
num1 = bitor bitshift bitand num2 0x0000FFFF 16 bitshift num2 -24
|
|
num2 = bitshift bitand num2 0x00FF0000 -8
|
|
elif c$ = "9"
|
|
num1 = bitnot num2
|
|
else
|
|
num1 = num2
|
|
.
|
|
if c$ <> "0" and c$ <> "9"
|
|
num1 = bitor num1 num2
|
|
.
|
|
num2 = bitand 0xffffffff num1
|
|
.
|
|
return bitand 0xffffffff num1
|
|
.
|
|
proc test_passwd passwd$ nonce$ expected$ .
|
|
res = calcpass passwd$ nonce$
|
|
m$ = passwd$ & " " & nonce$ & " " & res & " " & expected$
|
|
if res = number expected$
|
|
print "PASS " & m$
|
|
else
|
|
print "FAIL " & m$
|
|
.
|
|
.
|
|
test_passwd "12345" "603356072" "25280520"
|
|
test_passwd "12345" "410501656" "119537670"
|
|
test_passwd "12345" "630292165" "4269684735"
|