?? sha1.idel
字號:
def 3 0 sprintf-hex { addr j x -- j if addr j 1 - x 4 >>> sprintf-hex then x 15 and hex.addr + c@ addr j + c! } ;def 3 0 digest { a u -- a u type 10 emit a u } SHA1-init SHA1-update SHA1-final dump-H H 20 wordcpy ;def 0 0 SHA1-init 0 hbits ! 0 lbits ! H SHA1-IV 20 wordcpy ;def 2 0 SHA1-update { pdata data-len -- lbits @ 3 >>> 63 and data-len 29 >>> hbits +! data-len 3 << { mlen low-bits -- low-bits lbits +! lbits @ low-bits < if 1 hbits +! then 64 mlen - data-len { x y -- x y u< if x else y then } { use -- W mlen + pdata use memcpy pdata use + data-len use - mlen use + SHA1-update-loop } } } ;def 3 0 SHA1-update-loop { data data-len mlen -- mlen 64 = if SHA1-transform 64 data-len { x y -- x y u< if x else y then } { use -- W data use memcpy data use + data-len use - use SHA1-update-loop } then } ;def 0 0 SHA1-final lbits @ 3 >>> 63 and { mlen -- 0x80 W mlen + c! mlen 1 + } { mlen -- 64 mlen - { padding -- padding 8 < if W mlen + 0 padding memset SHA1-transform W 0 64 8 - memset else W mlen + 0 padding 8 - memset then } } hbits @ W 64 + 8 - ! lbits @ W 64 + 4 - ! SHA1-transform ;def 0 0 SHA1-transform 0 @ 4 @ 8 @ 12 @ 16 @ { A B C D E -- A 5 << A 27 >>> or C D xor B and D xor + E + 20 @ + 1518500249 + A B 30 << B 2 >>> or C D } { A B C D E -- A 5 << A 27 >>> or C D xor B and D xor + E + 24 @ + 1518500249 + A B 30 << B 2 >>> or C D } { A B C D E -- A 5 << A 27 >>> or C D xor B and D xor + E + 28 @ + 1518500249 + A B 30 << B 2 >>> or C D } { A B C D E -- A 5 << A 27 >>> or C D xor B and D xor + E + 32 @ + 1518500249 + A B 30 << B 2 >>> or C D } { A B C D E -- A 5 << A 27 >>> or C D xor B and D xor + E + 36 @ + 1518500249 + A B 30 << B 2 >>> or C D } { A B C D E -- A 5 << A 27 >>> or C D xor B and D xor + E + 40 @ + 1518500249 + A B 30 << B 2 >>> or C D } { A B C D E -- A 5 << A 27 >>> or C D xor B and D xor + E + 44 @ + 1518500249 + A B 30 << B 2 >>> or C D } { A B C D E -- A 5 << A 27 >>> or C D xor B and D xor + E + 48 @ + 1518500249 + A B 30 << B 2 >>> or C D } { A B C D E -- A 5 << A 27 >>> or C D xor B and D xor + E + 52 @ + 1518500249 + A B 30 << B 2 >>> or C D } { A B C D E -- A 5 << A 27 >>> or C D xor B and D xor + E + 56 @ + 1518500249 + A B 30 << B 2 >>> or C D } { A B C D E -- A 5 << A 27 >>> or C D xor B and D xor + E + 60 @ + 1518500249 + A B 30 << B 2 >>> or C D } { A B C D E -- A 5 << A 27 >>> or C D xor B and D xor + E + 64 @ + 1518500249 + A B 30 << B 2 >>> or C D } { A B C D E -- A 5 << A 27 >>> or C D xor B and D xor + E + 68 @ + 1518500249 + A B 30 << B 2 >>> or C D } { A B C D E -- A 5 << A 27 >>> or C D xor B and D xor + E + 72 @ + 1518500249 + A B 30 << B 2 >>> or C D } { A B C D E -- A 5 << A 27 >>> or C D xor B and D xor + E + 76 @ + 1518500249 + A B 30 << B 2 >>> or C D } { A B C D E -- A 5 << A 27 >>> or C D xor B and D xor + E + 80 @ + 1518500249 + A B 30 << B 2 >>> or C D } { A B C D E -- A 5 << A 27 >>> or C D xor B and D xor + E + 72 @ 52 @ xor 28 @ xor 20 @ xor { x -- x 1 << x 31 >>> or } { x -- x 20 ! x } + 1518500249 + A B 30 << B 2 >>> or C D } { A B C D E -- A 5 << A 27 >>> or C D xor B and D xor + E + 76 @ 56 @ xor 32 @ xor 24 @ xor { x -- x 1 << x 31 >>> or } { x -- x 24 ! x } + 1518500249 + A B 30 << B 2 >>> or C D } { A B C D E -- A 5 << A 27 >>> or C D xor B and D xor + E + 80 @ 60 @ xor 36 @ xor 28 @ xor { x -- x 1 << x 31 >>> or } { x -- x 28 ! x } + 1518500249 + A B 30 << B 2 >>> or C D } { A B C D E -- A 5 << A 27 >>> or C D xor B and D xor + E + 20 @ 64 @ xor 40 @ xor 32 @ xor { x -- x 1 << x 31 >>> or } { x -- x 32 ! x } + 1518500249 + A B 30 << B 2 >>> or C D } { A B C D E -- A 5 << A 27 >>> or C D xor B xor + E + 24 @ 68 @ xor 44 @ xor 36 @ xor { x -- x 1 << x 31 >>> or } { x -- x 36 ! x } + 1859775393 + A B 30 << B 2 >>> or C D } { A B C D E -- A 5 << A 27 >>> or C D xor B xor + E + 28 @ 72 @ xor 48 @ xor 40 @ xor { x -- x 1 << x 31 >>> or } { x -- x 40 ! x } + 1859775393 + A B 30 << B 2 >>> or C D } { A B C D E -- A 5 << A 27 >>> or C D xor B xor + E + 32 @ 76 @ xor 52 @ xor 44 @ xor { x -- x 1 << x 31 >>> or } { x -- x 44 ! x } + 1859775393 + A B 30 << B 2 >>> or C D } { A B C D E -- A 5 << A 27 >>> or C D xor B xor + E + 36 @ 80 @ xor 56 @ xor 48 @ xor { x -- x 1 << x 31 >>> or } { x -- x 48 ! x } + 1859775393 + A B 30 << B 2 >>> or C D } { A B C D E -- A 5 << A 27 >>> or C D xor B xor + E + 40 @ 20 @ xor 60 @ xor 52 @ xor { x -- x 1 << x 31 >>> or } { x -- x 52 ! x } + 1859775393 + A B 30 << B 2 >>> or C D } { A B C D E -- A 5 << A 27 >>> or C D xor B xor + E + 44 @ 24 @ xor 64 @ xor 56 @ xor { x -- x 1 << x 31 >>> or } { x -- x 56 ! x } + 1859775393 + A B 30 << B 2 >>> or C D } { A B C D E -- A 5 << A 27 >>> or C D xor B xor + E + 48 @ 28 @ xor 68 @ xor 60 @ xor { x -- x 1 << x 31 >>> or } { x -- x 60 ! x } + 1859775393 + A B 30 << B 2 >>> or C D } { A B C D E -- A 5 << A 27 >>> or C D xor B xor + E + 52 @ 32 @ xor 72 @ xor 64 @ xor { x -- x 1 << x 31 >>> or } { x -- x 64 ! x } + 1859775393 + A B 30 << B 2 >>> or C D } { A B C D E -- A 5 << A 27 >>> or C D xor B xor + E + 56 @ 36 @ xor 76 @ xor 68 @ xor { x -- x 1 << x 31 >>> or } { x -- x 68 ! x } + 1859775393 + A B 30 << B 2 >>> or C D } { A B C D E -- A 5 << A 27 >>> or C D xor B xor + E + 60 @ 40 @ xor 80 @ xor 72 @ xor { x -- x 1 << x 31 >>> or } { x -- x 72 ! x } + 1859775393 + A B 30 << B 2 >>> or C D } { A B C D E -- A 5 << A 27 >>> or C D xor B xor + E + 64 @ 44 @ xor 20 @ xor 76 @ xor { x -- x 1 << x 31 >>> or } { x -- x 76 ! x } + 1859775393 + A B 30 << B 2 >>> or C D } { A B C D E -- A 5 << A 27 >>> or C D xor B xor + E + 68 @ 48 @ xor 24 @ xor 80 @ xor { x -- x 1 << x 31 >>> or } { x -- x 80 ! x } + 1859775393 + A B 30 << B 2 >>> or C D } { A B C D E -- A 5 << A 27 >>> or C D xor B xor + E + 72 @ 52 @ xor 28 @ xor 20 @ xor { x -- x 1 << x 31 >>> or } { x -- x 20 ! x } + 1859775393 + A B 30 << B 2 >>> or C D } { A B C D E -- A 5 << A 27 >>> or C D xor B xor + E + 76 @ 56 @ xor 32 @ xor 24 @ xor { x -- x 1 << x 31 >>> or } { x -- x 24 ! x } + 1859775393 + A B 30 << B 2 >>> or C D } { A B C D E -- A 5 << A 27 >>> or C D xor B xor + E + 80 @ 60 @ xor 36 @ xor 28 @ xor { x -- x 1 << x 31 >>> or } { x -- x 28 ! x } + 1859775393 + A B 30 << B 2 >>> or C D } { A B C D E -- A 5 << A 27 >>> or C D xor B xor + E + 20 @ 64 @ xor 40 @ xor 32 @ xor { x -- x 1 << x 31 >>> or } { x -- x 32 ! x } + 1859775393 + A B 30 << B 2 >>> or C D } { A B C D E -- A 5 << A 27 >>> or C D xor B xor + E + 24 @ 68 @ xor 44 @ xor 36 @ xor { x -- x 1 << x 31 >>> or } { x -- x 36 ! x } + 1859775393 + A B 30 << B 2 >>> or C D } { A B C D E -- A 5 << A 27 >>> or C D xor B xor + E + 28 @ 72 @ xor 48 @ xor 40 @ xor { x -- x 1 << x 31 >>> or } { x -- x 40 ! x } + 1859775393 + A B 30 << B 2 >>> or C D } { A B C D E -- A 5 << A 27 >>> or C D xor B xor + E + 32 @ 76 @ xor 52 @ xor 44 @ xor { x -- x 1 << x 31 >>> or } { x -- x 44 ! x } + 1859775393 + A B 30 << B 2 >>> or C D } { A B C D E -- A 5 << A 27 >>> or C D xor B xor + E + 36 @ 80 @ xor 56 @ xor 48 @ xor { x -- x 1 << x 31 >>> or } { x -- x 48 ! x } + 1859775393 + A B 30 << B 2 >>> or C D } { A B C D E -- A 5 << A 27 >>> or C D or B and C D and or + E + 40 @ 20 @ xor 60 @ xor 52 @ xor { x -- x 1 << x 31 >>> or } { x -- x 52 ! x } + -1894007588 + A B 30 << B 2 >>> or C D } { A B C D E -- A 5 << A 27 >>> or C D or B and C D and or + E + 44 @ 24 @ xor 64 @ xor 56 @ xor { x -- x 1 << x 31 >>> or } { x -- x 56 ! x } + -1894007588 + A B 30 << B 2 >>> or C D } { A B C D E -- A 5 << A 27 >>> or C D or B and C D and or + E + 48 @ 28 @ xor 68 @ xor 60 @ xor { x -- x 1 << x 31 >>> or } { x -- x 60 ! x } + -1894007588 + A B 30 << B 2 >>> or C D } { A B C D E -- A 5 << A 27 >>> or C D or B and C D and or + E + 52 @ 32 @ xor 72 @ xor 64 @ xor { x -- x 1 << x 31 >>> or } { x -- x 64 ! x } + -1894007588 + A B 30 << B 2 >>> or C D } { A B C D E -- A 5 << A 27 >>> or C D or B and C D and or + E + 56 @ 36 @ xor 76 @ xor 68 @ xor { x -- x 1 << x 31 >>> or } { x -- x 68 ! x } + -1894007588 + A B 30 << B 2 >>> or C D } { A B C D E -- A 5 << A 27 >>> or C D or B and C D and or + E + 60 @ 40 @ xor 80 @ xor 72 @ xor { x -- x 1 << x 31 >>> or } { x -- x 72 ! x } + -1894007588 + A B 30 << B 2 >>> or C D } { A B C D E -- A 5 << A 27 >>> or C D or B and C D and or + E + 64 @ 44 @ xor 20 @ xor 76 @ xor { x -- x 1 << x 31 >>> or } { x -- x 76 ! x } + -1894007588 + A B 30 << B 2 >>> or C D } { A B C D E -- A 5 << A 27 >>> or C D or B and C D and or + E + 68 @ 48 @ xor 24 @ xor 80 @ xor { x -- x 1 << x 31 >>> or } { x -- x 80 ! x } + -1894007588 + A B 30 << B 2 >>> or C D } { A B C D E -- A 5 << A 27 >>> or C D or B and C D and or + E + 72 @ 52 @ xor 28 @ xor 20 @ xor { x -- x 1 << x 31 >>> or } { x -- x 20 ! x } + -1894007588 + A B 30 << B 2 >>> or C D } { A B C D E -- A 5 << A 27 >>> or C D or B and C D and or + E + 76 @ 56 @ xor 32 @ xor 24 @ xor { x -- x 1 << x 31 >>> or } { x -- x 24 ! x } + -1894007588 + A B 30 << B 2 >>> or C D } { A B C D E -- A 5 << A 27 >>> or C D or B and C D and or + E + 80 @ 60 @ xor 36 @ xor 28 @ xor { x -- x 1 << x 31 >>> or } { x -- x 28 ! x } + -1894007588 + A B 30 << B 2 >>> or C D } { A B C D E -- A 5 << A 27 >>> or C D or B and C D and or + E + 20 @ 64 @ xor 40 @ xor 32 @ xor { x -- x 1 << x 31 >>> or } { x -- x 32 ! x } + -1894007588 + A B 30 << B 2 >>> or C D } { A B C D E -- A 5 << A 27 >>> or C D or B and C D and or + E + 24 @ 68 @ xor 44 @ xor 36 @ xor { x -- x 1 << x 31 >>> or } { x -- x 36 ! x } + -1894007588 + A B 30 << B 2 >>> or C D } { A B C D E -- A 5 << A 27 >>> or C D or B and C D and or + E + 28 @ 72 @ xor 48 @ xor 40 @ xor { x -- x 1 << x 31 >>> or } { x -- x 40 ! x } + -1894007588 + A B 30 << B 2 >>> or C D } { A B C D E -- A 5 << A 27 >>> or C D or B and C D and or + E + 32 @ 76 @ xor 52 @ xor 44 @ xor { x -- x 1 << x 31 >>> or } { x -- x 44 ! x } + -1894007588 + A B 30 << B 2 >>> or C D } { A B C D E -- A 5 << A 27 >>> or C D or B and C D and or + E + 36 @ 80 @ xor 56 @ xor 48 @ xor { x -- x 1 << x 31 >>> or } { x -- x 48 ! x } + -1894007588 + A B 30 << B 2 >>> or C D } { A B C D E -- A 5 << A 27 >>> or C D or B and C D and or + E + 40 @ 20 @ xor 60 @ xor 52 @ xor { x -- x 1 << x 31 >>> or } { x -- x 52 ! x } + -1894007588 + A B 30 << B 2 >>> or C D } { A B C D E -- A 5 << A 27 >>> or C D or B and C D and or + E + 44 @ 24 @ xor 64 @ xor 56 @ xor { x -- x 1 << x 31 >>> or } { x -- x 56 ! x } + -1894007588 + A B 30 << B 2 >>> or C D } { A B C D E -- A 5 << A 27 >>> or C D or B and C D and or + E + 48 @ 28 @ xor 68 @ xor 60 @ xor { x -- x 1 << x 31 >>> or } { x -- x 60 ! x } + -1894007588 + A B 30 << B 2 >>> or C D } { A B C D E -- A 5 << A 27 >>> or C D or B and C D and or + E + 52 @ 32 @ xor 72 @ xor 64 @ xor { x -- x 1 << x 31 >>> or } { x -- x 64 ! x } + -1894007588 + A B 30 << B 2 >>> or C D } { A B C D E -- A 5 << A 27 >>> or C D xor B xor + E + 56 @ 36 @ xor 76 @ xor 68 @ xor { x -- x 1 << x 31 >>> or } { x -- x 68 ! x } + -899497514 + A B 30 << B 2 >>> or C D } { A B C D E -- A 5 << A 27 >>> or C D xor B xor + E + 60 @ 40 @ xor 80 @ xor 72 @ xor { x -- x 1 << x 31 >>> or } { x -- x 72 ! x } + -899497514 + A B 30 << B 2 >>> or C D } { A B C D E -- A 5 << A 27 >>> or C D xor B xor + E + 64 @ 44 @ xor 20 @ xor 76 @ xor { x -- x 1 << x 31 >>> or } { x -- x 76 ! x } + -899497514 + A B 30 << B 2 >>> or C D } { A B C D E -- A 5 << A 27 >>> or C D xor B xor + E + 68 @ 48 @ xor 24 @ xor 80 @ xor { x -- x 1 << x 31 >>> or } { x -- x 80 ! x } + -899497514 + A B 30 << B 2 >>> or C D } { A B C D E -- A 5 << A 27 >>> or C D xor B xor + E + 72 @ 52 @ xor 28 @ xor 20 @ xor { x -- x 1 << x 31 >>> or } { x -- x 20 ! x } + -899497514 + A B 30 << B 2 >>> or C D } { A B C D E -- A 5 << A 27 >>> or C D xor B xor + E + 76 @ 56 @ xor 32 @ xor 24 @ xor { x -- x 1 << x 31 >>> or } { x -- x 24 ! x } + -899497514 + A B 30 << B 2 >>> or C D } { A B C D E -- A 5 << A 27 >>> or C D xor B xor + E + 80 @ 60 @ xor 36 @ xor 28 @ xor { x -- x 1 << x 31 >>> or } { x -- x 28 ! x } + -899497514 + A B 30 << B 2 >>> or C D } { A B C D E -- A 5 << A 27 >>> or C D xor B xor + E + 20 @ 64 @ xor 40 @ xor 32 @ xor { x -- x 1 << x 31 >>> or } { x -- x 32 ! x } + -899497514 + A B 30 << B 2 >>> or C D } { A B C D E -- A 5 << A 27 >>> or C D xor B xor + E + 24 @ 68 @ xor 44 @ xor 36 @ xor { x -- x 1 << x 31 >>> or } { x -- x 36 ! x } + -899497514 + A B 30 << B 2 >>> or C D } { A B C D E -- A 5 << A 27 >>> or C D xor B xor + E + 28 @ 72 @ xor 48 @ xor 40 @ xor { x -- x 1 << x 31 >>> or } { x -- x 40 ! x } + -899497514 + A B 30 << B 2 >>> or C D } { A B C D E -- A 5 << A 27 >>> or C D xor B xor + E + 32 @ 76 @ xor 52 @ xor 44 @ xor { x -- x 1 << x 31 >>> or } { x -- x 44 ! x } + -899497514 + A B 30 << B 2 >>> or C D } { A B C D E -- A 5 << A 27 >>> or C D xor B xor + E + 36 @ 80 @ xor 56 @ xor 48 @ xor { x -- x 1 << x 31 >>> or } { x -- x 48 ! x } + -899497514 + A B 30 << B 2 >>> or C D } { A B C D E -- A 5 << A 27 >>> or C D xor B xor + E + 40 @ 20 @ xor 60 @ xor 52 @ xor { x -- x 1 << x 31 >>> or } { x -- x 52 ! x } + -899497514 + A B 30 << B 2 >>> or C D } { A B C D E -- A 5 << A 27 >>> or C D xor B xor + E + 44 @ 24 @ xor 64 @ xor 56 @ xor { x -- x 1 << x 31 >>> or } { x -- x 56 ! x } + -899497514 + A B 30 << B 2 >>> or C D } { A B C D E -- A 5 << A 27 >>> or C D xor B xor + E + 48 @ 28 @ xor 68 @ xor 60 @ xor { x -- x 1 << x 31 >>> or } { x -- x 60 ! x } + -899497514 + A B 30 << B 2 >>> or C D } { A B C D E -- A 5 << A 27 >>> or C D xor B xor + E + 52 @ 32 @ xor 72 @ xor 64 @ xor { x -- x 1 << x 31 >>> or } { x -- x 64 ! x } + -899497514 + A B 30 << B 2 >>> or C D } { A B C D E -- A 5 << A 27 >>> or C D xor B xor + E + 56 @ 36 @ xor 76 @ xor 68 @ xor { x -- x 1 << x 31 >>> or } { x -- x 68 ! x } + -899497514 + A B 30 << B 2 >>> or C D } { A B C D E -- A 5 << A 27 >>> or C D xor B xor + E + 60 @ 40 @ xor 80 @ xor 72 @ xor { x -- x 1 << x 31 >>> or } { x -- x 72 ! x } + -899497514 + A B 30 << B 2 >>> or C D } { A B C D E -- A 5 << A 27 >>> or C D xor B xor + E + 64 @ 44 @ xor 20 @ xor 76 @ xor { x -- x 1 << x 31 >>> or } { x -- x 76 ! x } + -899497514 + A B 30 << B 2 >>> or C D } { A B C D E -- A 5 << A 27 >>> or C D xor B xor + E + 68 @ 48 @ xor 24 @ xor 80 @ xor { x -- x 1 << x 31 >>> or } { x -- x 80 ! x } + -899497514 + A B 30 << B 2 >>> or C D } 16 +! 12 +! 8 +! 4 +! 0 +! ;#include "../../benchmarks/dump.idel"#include "../../tests/udot.idel"#include "../../tests/type.idel"\ more stuffdef 0 0 dump-H H 5 dump-loop '\n' emit ;def 2 0 +! { a -- a @ + a ! } ;def 3 0 memcpy { dst src n -- dst src n dst 3 and if bytecpy else src 3 and if bytecpy else n 3 and if bytecpy else wordcpy then then then } ;def 3 0 wordcpy { dst src n -- n if src @ dst ! dst 4 + src 4 + n 4 - wordcpy then } ;def 3 0 bytecpy { dst src n -- n if src c@ dst c! dst 1 + src 1 + n 1 - bytecpy then } ;def 3 0 memset { dst byte n -- n if byte dst c! dst 1 + byte n 1 - memset then } ;def 3 1 memcmp { dst src n -- n if src c@ dst c@ = if dst 1 + src 1 + n 1 - memcmp else -1 then else 0 then } ;
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -