Advertisement
Guest User

SHA2-256

a guest
Dec 26th, 2012
520
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ;################# Created by Bearchik http://crazyasm.blogspot.com ###############################
  2. ;#################SHA-2-256.inc
  3. include     windows.inc
  4. include     kernel32.inc
  5. include     user32.inc
  6. include     Comctl32.inc
  7. include     shell32.inc
  8.  
  9. includelib  kernel32.lib
  10. includelib  user32.lib
  11. includelib  Comctl32.lib
  12. includelib  shell32.lib
  13.  
  14. sha256main  PROTO :DWORD
  15.  
  16. .const
  17.  
  18. ;#########################################################################
  19.  
  20. .data
  21. H0          dd 6A09E667h
  22. H1          dd 0BB67AE85h
  23. H2          dd 3C6EF372h
  24. H3          dd 0A54FF53Ah
  25. H4          dd 510E527Fh
  26. H5          dd 9B05688Ch
  27. H6          dd 1F83D9ABh
  28. H7          dd 5BE0CD19h
  29.  
  30. K           dd 428A2F98h
  31.             dd 71374491h
  32.             dd 0B5C0FBCFh
  33.             dd 0E9B5DBA5h
  34.             dd 3956C25Bh
  35.             dd 59F111F1h
  36.             dd 923F82A4h
  37.             dd 0AB1C5ED5h
  38.             dd 0D807AA98h
  39.             dd 12835B01h
  40.             dd 243185BEh
  41.             dd 550C7DC3h
  42.             dd 72BE5D74h
  43.             dd 80DEB1FEh
  44.             dd 9BDC06A7h
  45.             dd 0C19BF174h
  46.             dd 0E49B69C1h
  47.             dd 0EFBE4786h
  48.             dd 0FC19DC6h
  49.             dd 240CA1CCh
  50.             dd 2DE92C6Fh
  51.             dd 4A7484AAh
  52.             dd 5CB0A9DCh
  53.             dd 76F988DAh
  54.             dd 983E5152h
  55.             dd 0A831C66Dh
  56.             dd 0B00327C8h
  57.             dd 0BF597FC7h
  58.             dd 0C6E00BF3h
  59.             dd 0D5A79147h
  60.             dd 06CA6351h
  61.             dd 14292967h
  62.             dd 27B70A85h
  63.             dd 2E1B2138h
  64.             dd 4D2C6DFCh
  65.             dd 53380D13h
  66.             dd 650A7354h
  67.             dd 766A0ABBh
  68.             dd 81C2C92Eh
  69.             dd 92722C85h
  70.             dd 0A2BFE8A1h
  71.             dd 0A81A664Bh
  72.             dd 0C24B8B70h
  73.             dd 0C76C51A3h
  74.             dd 0D192E819h
  75.             dd 0D6990624h
  76.             dd 0F40E3585h
  77.             dd 106AA070h
  78.             dd 19A4C116h
  79.             dd 1E376C08h
  80.             dd 2748774Ch
  81.             dd 34B0BCB5h
  82.             dd 391C0CB3h
  83.             dd 4ED8AA4Ah
  84.             dd 5B9CCA4Fh
  85.             dd 682E6FF3h
  86.             dd 748F82EEh
  87.             dd 78A5636Fh
  88.             dd 84C87814h
  89.             dd 8CC70208h
  90.             dd 90BEFFFAh
  91.             dd 0A4506CEBh
  92.             dd 0BEF9A3F7h
  93.             dd 0C67178F2h
  94.  
  95. codestring  db "Bearchik",0
  96.  
  97.  
  98. ;#########################################################################
  99.  
  100. .data?
  101. mkey            db 256 dup  (?)
  102. lengh           db          ?
  103. aav             dd      ?
  104. bbv             dd      ?
  105. ccv             dd      ?
  106. ddv             dd      ?
  107. eev             dd      ?
  108. ffv             dd      ?
  109. ggv             dd      ?
  110. hhv             dd      ?
  111. t2              dd      ?
  112.  
  113.  
  114. H0out           dd      ?
  115. H1out           dd      ?
  116. H2out           dd      ?
  117. H3out           dd      ?
  118. H4out           dd      ?
  119. H5out           dd      ?
  120. H6out           dd      ?
  121. H7out           dd      ?
  122.  
  123.  
  124. ;#########################################################################
  125. ;#################SHA-2-256.asm
  126. .486
  127. .model flat, stdcall  ;32 bit memory model
  128. option casemap :none  ;case sensitive
  129.  
  130. include SHA-2-256.inc
  131.  
  132. .code
  133.  
  134. start:
  135.    
  136.     invoke  sha256main, addr codestring
  137.    
  138.     invoke  ExitProcess,0
  139.    
  140.    
  141. sha256main proc     pinstring:DWORD
  142.     mov     eax, pinstring
  143.     xor     ecx, ecx
  144. @@:
  145.     cmp     BYTE PTR [eax+ecx], 0
  146.     jz      @f
  147.     inc     ecx
  148.     jmp     @b
  149. @@:
  150.     mov     lengh, cl
  151.     lea     edi, mkey
  152.     mov     esi, pinstring
  153.     rep     movsb
  154.     mov     BYTE PTR [edi], 80h
  155.     lea     eax, mkey
  156.     add     eax, 3Eh
  157.     xor     ebx, ebx
  158.     mov     bl, lengh
  159.     shl     ebx, 3h
  160.     xchg    bl, bh
  161.     mov     WORD PTR [eax], bx
  162.     lea     edi, mkey
  163.     mov     ecx, 10h
  164. @@:
  165.     mov     eax,DWORD PTR [edi]
  166.     bswap   eax
  167.     mov     DWORD PTR [edi], eax
  168.     add     edi, 4h
  169.     loop    @b
  170.    
  171.     lea     eax,  mkey
  172.     mov     ebx, edi
  173.     sub     ebx, eax
  174.     shr     ebx, 2h
  175.     mov     eax, 40h
  176.     sub     eax, ebx
  177.  
  178. @@:
  179. ;s0 := (w[i-15] rightrotate 7) xor (w[i-15] rightrotate 18) xor (w[i-15] rightshift 3)
  180.     push    eax
  181.     mov     ebx, DWORD PTR [edi-15*4h]
  182.     ror     ebx, 7
  183.     mov     edx, DWORD PTR [edi-15*4h]
  184.     ror     edx, 18
  185.     xor     ebx, edx
  186.     mov     edx, DWORD PTR [edi-15*4h]
  187.     shr     edx, 3
  188.     xor     ebx, edx
  189.  
  190. ;s1 := (w[i-2] rightrotate 17) xor (w[i-2] rightrotate 19) xor (w[i-2] rightshift 10)
  191.     mov     eax, DWORD PTR [edi-2*4h]
  192.     ror     eax, 17
  193.     mov     edx, DWORD PTR [edi-2*4h]
  194.     ror     edx, 19
  195.     xor     eax, edx
  196.     mov     edx, DWORD PTR [edi-2*4h]
  197.     shr     edx, 10
  198.     xor     eax, edx
  199.  
  200. ;w[i] := w[i-16] + s0 + w[i-7] + s1
  201.     mov     edx, DWORD PTR [edi-16*4h]
  202.     add     edx, ebx
  203.     add     edx, DWORD PTR [edi-7*4h]
  204.     add     edx, eax
  205.     mov     DWORD PTR [edi], edx
  206.    
  207.     add     edi, 4
  208.     inc     ecx
  209.     pop     eax
  210.     .if ecx < eax
  211.         jmp     @b
  212.     .endif
  213.  
  214.     xor     ecx, ecx
  215.     lea     edi, aav
  216.     lea     esi, H0
  217.     mov     ecx, 20h
  218.     rep     movsb
  219.    
  220.     xor     ecx, ecx
  221.     lea     edi, mkey
  222. mainloop:
  223. ;S0 := (a rightrotate 2) xor (a rightrotate 13) xor (a rightrotate 22)
  224.     mov     eax, aav
  225.     ror     eax, 2
  226.     mov     edx, aav
  227.     ror     edx, 13
  228.     xor     eax, edx
  229.     mov     edx, aav
  230.     ror     edx, 22
  231.     xor     eax, edx
  232.  
  233. ;maj := (a and b) xor (a and c) xor (b and c)
  234.     mov     ebx, aav
  235.     and     ebx, bbv
  236.     mov     edx, aav
  237.     and     edx, ccv
  238.     xor     ebx, edx
  239.     mov     edx, bbv
  240.     and     edx, ccv
  241.     xor     ebx, edx
  242.  
  243. ;t2 := S0 + maj
  244.     add     eax, ebx
  245.     mov     t2, eax
  246.    
  247. ;S1 := (e rightrotate 6) xor (e rightrotate 11) xor (e rightrotate 25)
  248.     mov     eax, eev
  249.     ror     eax, 6
  250.     mov     edx, eev
  251.     ror     edx, 11
  252.     xor     eax, edx
  253.     mov     edx, eev
  254.     ror     edx, 25
  255.     xor     eax, edx
  256.    
  257. ;ch := (e and f) xor ((not e) and g)
  258.     mov     ebx, eev
  259.     and     ebx, ffv
  260.     mov     edx, eev
  261.     not     edx
  262.     and     edx, ggv
  263.     xor     ebx, edx
  264.    
  265. ;t1 := h + S1 + ch + k[i] + w[i]
  266.     add     eax, hhv
  267.     add     eax, ebx
  268.     add     eax, DWORD PTR [K+ecx*4h]
  269.     add     eax, DWORD PTR [mkey+ecx*4h]
  270.  
  271. ;h := g
  272.     mov     ebx, ggv
  273.     mov     hhv, ebx
  274.    
  275. ;g := f
  276.     mov     ebx, ffv
  277.     mov     ggv, ebx
  278.    
  279. ;f := e
  280.     mov     ebx, eev
  281.     mov     ffv, ebx
  282.    
  283. ;e := d + t1
  284.     mov     ebx, ddv
  285.     add     ebx, eax
  286.     mov     eev, ebx
  287.    
  288. ;d := c
  289.     mov     ebx, ccv
  290.     mov     ddv, ebx
  291.    
  292. ;c := b
  293.     mov     ebx, bbv
  294.     mov     ccv, ebx
  295.    
  296. ;b := a
  297.     mov     ebx, aav
  298.     mov     bbv, ebx
  299.    
  300. ;a := t1 + t2
  301.     add     eax, t2
  302.     mov     aav, eax
  303.    
  304.    
  305.    
  306.     inc     ecx
  307.     .if     ecx < 40h
  308.         jmp     mainloop
  309.     .endif
  310.    
  311.     mov     eax, H0
  312.     add     eax, aav
  313.     mov     H0out, eax
  314.    
  315.     mov     eax, H1
  316.     add     eax, bbv
  317.     mov     H1out, eax
  318.    
  319.     mov     eax, H2
  320.     add     eax, ccv
  321.     mov     H2out, eax
  322.    
  323.     mov     eax, H3
  324.     add     eax, ddv
  325.     mov     H3out, eax
  326.    
  327.     mov     eax, H4
  328.     add     eax, eev
  329.     mov     H4out, eax
  330.    
  331.     mov     eax, H5
  332.     add     eax, ffv
  333.     mov     H5out, eax
  334.    
  335.     mov     eax, H6
  336.     add     eax, ggv
  337.     mov     H6out, eax
  338.    
  339.     mov     eax, H7
  340.     add     eax, hhv
  341.     mov     H7out, eax
  342.    
  343.    
  344.     ret
  345. sha256main endp
  346. end start
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement