⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sha1.py

📁 idel虚拟机源码
💻 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"'

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -