?? sha1.py
字號:
SHA1_INPUT_BYTES = 64H = 0W = H + 5*4bitcount = W + SHA1_INPUT_BYTESinput = bitcount + 2*4print 'ints: H'print '0 0 0 0 0'print ';ints'print ''print 'ints: W'print '0 0 0 0'print '0 0 0 0'print '0 0 0 0'print '0 0 0 0'print ';ints'print ''print 'ints: hbits 0 ;ints'print 'ints: lbits 0 ;ints'print ''print 'ints: input'print '0x61626380 0 0 0'print '0 0 0 0'print '0 0 0 0'print '0 0 0 0x18'print ';ints'print ''print 'ints: SHA1-IV'print '0x67452301'print '0xEFCDAB89'print '0x98BADCFE'print '0x10325476'print '0xC3D2E1F0'print ';ints'print ''print 'bss-data: A-buf 200'print ''print ''print 'def 0 1 main'print ' SHA1-init'print ' A-buf 97 200 memset'print ' 5000 hash-the-As'print ' SHA1-final'print ' dump-H'print ' 0 ;'print ''print '''def 0 0 dump-H H 5 dump-loop '\\n' emit ;'''print ''print 'def 1 0 hash-the-As'print ' { n -- n if'print ' A-buf 200 SHA1-update'print ' n 1 - hash-the-As'print ' then } ;'print ''print 'def 0 0 SHA1-init'print ' 0 hbits ! 0 lbits !'print ' H SHA1-IV 20 wordcpy ;'print ''print 'def 2 0 SHA1-update'print ' { pdata data-len --'print ' lbits @ 3 >>> 63 and'print ' data-len 29 >>> hbits +!'print ' data-len 3 <<'print ' { mlen low-bits --'print ' low-bits lbits +!'print ' lbits @ low-bits < if 1 hbits +! then'print ' %d mlen - data-len umin' % SHA1_INPUT_BYTESprint ' { use --'print ' input mlen + pdata use memcpy' # FIXME: use M insteadprint ' pdata use + data-len use - mlen use + SHA1-update-loop } } } ;'print ''print 'def 3 0 SHA1-update-loop'print ' { data data-len mlen --'print ' mlen %d = if' % SHA1_INPUT_BYTESprint ' input SHA1-transform' # FIXME: use M insteadprint ' %d data-len umin' % SHA1_INPUT_BYTESprint ' { use --'print ' input data use memcpy' # FIXME: use M insteadprint ' data use + data-len use - use SHA1-update-loop }'print ' then } ;'print ''print 'def 0 0 SHA1-final'print ' lbits @ 3 >>> 63 and'print ' { mlen -- 0x80 input mlen + c! mlen 1 + }'print ' { mlen --'print ' 64 mlen -'print ' { padding --'print ' padding 8 < if'print ' input mlen + 0 padding memset'print ' input SHA1-transform'print ' input 0 64 8 - memset'print ' else'print ' input mlen + 0 padding 8 - memset'print ' then } }'print ' hbits @ input 64 + 8 - !'print ' lbits @ input 64 + 4 - !'print ' input SHA1-transform ;'print ''def F1(B, C, D): return '%s %s xor %s and %s xor' % (C, D, B, D)def F2(B, C, D): return '%s %s xor %s xor' % (C, D, B)def F3(B, C, D): return '%s %s or %s and %s %s and or' % (C, D, B, C, D)def F4(B, C, D): return '%s %s xor %s xor' % (C, D, B)K1 = 0x5A827999K2 = 0x6ED9EBA1K3 = 0x8F1BBCDCK4 = 0xCA62C1D6def S(n, X): if len(X) == 1: v = X else: v = 'x' code = '%s %d << %s %d >>> or' % (v, n, v, 32-n) if len(X) == 1: return code else: return '%s { x -- %s }' % (X, code)def Wc(t): return W + (t % 16) * 4def Wf(t): args = (Wc(t+13), Wc(t+8), Wc(t+2), Wc(t)) code = '%d @ %d @ xor %d @ xor %d @ xor' % args code = S(1, code) return code + ' { x -- x %d ! x }' % Wc(t)def Wfly(t): if t < 16: return '%d @' % Wc(t) else: return Wf(t)def round(t, func, K): code = '{ A B C D E -- ' code = code + '%s %s + E + %s + %d + ' % (S(5,'A'), func('B','C','D'), Wfly(t), K) code = code + 'A %s C D }' % S(30,'B') return code # + ' %d show\n' % tdef round5(t, func, K): return '%s %s %s %s %s' % (round(t ,func,K), round(t + 1,func,K), round(t + 2,func,K), round(t + 3,func,K), round(t + 4,func,K))def round20(t, func, K): return '%s %s %s %s' % (round5(t ,func,K), round5(t + 5,func,K), round5(t + 10,func,K), round5(t + 15,func,K))print 'def 1 0 SHA1-transform'print ' { M -- %d M %d wordcpy }' % (W, SHA1_INPUT_BYTES)print ' %d @ %d @ %d @ %d @ %d @' % (H, H+4, H+8, H+12, H+16)print ' %s %s %s %s' % (round20( 0, F1, K1), round20(20, F2, K2), round20(40, F3, K3), round20(60, F4, K4)),print ' %d +! %d +! %d +! %d +! %d +! ;' % (H+16, H+12, H+8, H+4, H)print ''print 'def 2 0 +! { a -- a @ + a ! } ;'print ''print 'def 3 0 memcpy'print ' { dst src n --'print ' dst 3 and src 3 and or n 3 and or 0 = if'print ' dst src n wordcpy'print ' else'print ' dst src n bytecpy'print ' then } ;'print ''print 'def 3 0 wordcpy'print ' { dst src n --'print ' n if'print ' src @ dst !'print ' dst 4 + src 4 + n 4 - wordcpy'print ' then } ;'print ''print 'def 3 0 bytecpy'print ' { dst src n --'print ' n if'print ' src c@ dst c!'print ' dst 1 + src 1 + n 1 - bytecpy'print ' then } ;'print ''print 'def 3 0 memset'print ' { dst byte n --'print ' n if'print ' byte dst c!'print ' dst 1 + byte n 1 - memset'print ' then } ;'print ''print 'def 2 1 umin'print ' { x y -- x y u< if x else y then } ;'print ''print '#include "xdot.idel"'
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -