sha256_586.asm 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291
  1. %ifidn __OUTPUT_FORMAT__,obj
  2. section code use32 class=code align=256
  3. %elifidn __OUTPUT_FORMAT__,win32
  4. [email protected] equ 1
  5. section .text code align=256
  6. %else
  7. section .text code
  8. %endif
  9. global _sha256_block_data_order
  10. align 16
  11. _sha256_block_data_order:
  12. L$_sha256_block_data_order_begin:
  13. push ebp
  14. push ebx
  15. push esi
  16. push edi
  17. mov esi,DWORD [20+esp]
  18. mov edi,DWORD [24+esp]
  19. mov eax,DWORD [28+esp]
  20. mov ebx,esp
  21. call L$000pic_point
  22. L$000pic_point:
  23. pop ebp
  24. lea ebp,[(L$001K256-L$000pic_point)+ebp]
  25. sub esp,16
  26. and esp,-64
  27. shl eax,6
  28. add eax,edi
  29. mov DWORD [esp],esi
  30. mov DWORD [4+esp],edi
  31. mov DWORD [8+esp],eax
  32. mov DWORD [12+esp],ebx
  33. jmp NEAR L$002loop
  34. align 16
  35. L$002loop:
  36. mov eax,DWORD [edi]
  37. mov ebx,DWORD [4+edi]
  38. mov ecx,DWORD [8+edi]
  39. ; bswap eax
  40. xchg ah,al
  41. ror eax,16
  42. xchg ah,al
  43. mov edx,DWORD [12+edi]
  44. ; bswap ebx
  45. xchg bh,bl
  46. ror ebx,16
  47. xchg bh,bl
  48. push eax
  49. ; bswap ecx
  50. xchg ch,cl
  51. ror ecx,16
  52. xchg ch,cl
  53. push ebx
  54. ; bswap edx
  55. xchg dh,dl
  56. ror edx,16
  57. xchg dh,dl
  58. push ecx
  59. push edx
  60. mov eax,DWORD [16+edi]
  61. mov ebx,DWORD [20+edi]
  62. mov ecx,DWORD [24+edi]
  63. ; bswap eax
  64. xchg ah,al
  65. ror eax,16
  66. xchg ah,al
  67. mov edx,DWORD [28+edi]
  68. ; bswap ebx
  69. xchg bh,bl
  70. ror ebx,16
  71. xchg bh,bl
  72. push eax
  73. ; bswap ecx
  74. xchg ch,cl
  75. ror ecx,16
  76. xchg ch,cl
  77. push ebx
  78. ; bswap edx
  79. xchg dh,dl
  80. ror edx,16
  81. xchg dh,dl
  82. push ecx
  83. push edx
  84. mov eax,DWORD [32+edi]
  85. mov ebx,DWORD [36+edi]
  86. mov ecx,DWORD [40+edi]
  87. ; bswap eax
  88. xchg ah,al
  89. ror eax,16
  90. xchg ah,al
  91. mov edx,DWORD [44+edi]
  92. ; bswap ebx
  93. xchg bh,bl
  94. ror ebx,16
  95. xchg bh,bl
  96. push eax
  97. ; bswap ecx
  98. xchg ch,cl
  99. ror ecx,16
  100. xchg ch,cl
  101. push ebx
  102. ; bswap edx
  103. xchg dh,dl
  104. ror edx,16
  105. xchg dh,dl
  106. push ecx
  107. push edx
  108. mov eax,DWORD [48+edi]
  109. mov ebx,DWORD [52+edi]
  110. mov ecx,DWORD [56+edi]
  111. ; bswap eax
  112. xchg ah,al
  113. ror eax,16
  114. xchg ah,al
  115. mov edx,DWORD [60+edi]
  116. ; bswap ebx
  117. xchg bh,bl
  118. ror ebx,16
  119. xchg bh,bl
  120. push eax
  121. ; bswap ecx
  122. xchg ch,cl
  123. ror ecx,16
  124. xchg ch,cl
  125. push ebx
  126. ; bswap edx
  127. xchg dh,dl
  128. ror edx,16
  129. xchg dh,dl
  130. push ecx
  131. push edx
  132. add edi,64
  133. lea esp,[esp-36]
  134. mov DWORD [104+esp],edi
  135. mov eax,DWORD [esi]
  136. mov ebx,DWORD [4+esi]
  137. mov ecx,DWORD [8+esi]
  138. mov edi,DWORD [12+esi]
  139. mov DWORD [8+esp],ebx
  140. xor ebx,ecx
  141. mov DWORD [12+esp],ecx
  142. mov DWORD [16+esp],edi
  143. mov DWORD [esp],ebx
  144. mov edx,DWORD [16+esi]
  145. mov ebx,DWORD [20+esi]
  146. mov ecx,DWORD [24+esi]
  147. mov edi,DWORD [28+esi]
  148. mov DWORD [24+esp],ebx
  149. mov DWORD [28+esp],ecx
  150. mov DWORD [32+esp],edi
  151. align 16
  152. L$00300_15:
  153. mov ecx,edx
  154. mov esi,DWORD [24+esp]
  155. ror ecx,14
  156. mov edi,DWORD [28+esp]
  157. xor ecx,edx
  158. xor esi,edi
  159. mov ebx,DWORD [96+esp]
  160. ror ecx,5
  161. and esi,edx
  162. mov DWORD [20+esp],edx
  163. xor edx,ecx
  164. add ebx,DWORD [32+esp]
  165. xor esi,edi
  166. ror edx,6
  167. mov ecx,eax
  168. add ebx,esi
  169. ror ecx,9
  170. add ebx,edx
  171. mov edi,DWORD [8+esp]
  172. xor ecx,eax
  173. mov DWORD [4+esp],eax
  174. lea esp,[esp-4]
  175. ror ecx,11
  176. mov esi,DWORD [ebp]
  177. xor ecx,eax
  178. mov edx,DWORD [20+esp]
  179. xor eax,edi
  180. ror ecx,2
  181. add ebx,esi
  182. mov DWORD [esp],eax
  183. add edx,ebx
  184. and eax,DWORD [4+esp]
  185. add ebx,ecx
  186. xor eax,edi
  187. add ebp,4
  188. add eax,ebx
  189. cmp esi,3248222580
  190. jne NEAR L$00300_15
  191. mov ecx,DWORD [156+esp]
  192. jmp NEAR L$00416_63
  193. align 16
  194. L$00416_63:
  195. mov ebx,ecx
  196. mov esi,DWORD [104+esp]
  197. ror ecx,11
  198. mov edi,esi
  199. ror esi,2
  200. xor ecx,ebx
  201. shr ebx,3
  202. ror ecx,7
  203. xor esi,edi
  204. xor ebx,ecx
  205. ror esi,17
  206. add ebx,DWORD [160+esp]
  207. shr edi,10
  208. add ebx,DWORD [124+esp]
  209. mov ecx,edx
  210. xor edi,esi
  211. mov esi,DWORD [24+esp]
  212. ror ecx,14
  213. add ebx,edi
  214. mov edi,DWORD [28+esp]
  215. xor ecx,edx
  216. xor esi,edi
  217. mov DWORD [96+esp],ebx
  218. ror ecx,5
  219. and esi,edx
  220. mov DWORD [20+esp],edx
  221. xor edx,ecx
  222. add ebx,DWORD [32+esp]
  223. xor esi,edi
  224. ror edx,6
  225. mov ecx,eax
  226. add ebx,esi
  227. ror ecx,9
  228. add ebx,edx
  229. mov edi,DWORD [8+esp]
  230. xor ecx,eax
  231. mov DWORD [4+esp],eax
  232. lea esp,[esp-4]
  233. ror ecx,11
  234. mov esi,DWORD [ebp]
  235. xor ecx,eax
  236. mov edx,DWORD [20+esp]
  237. xor eax,edi
  238. ror ecx,2
  239. add ebx,esi
  240. mov DWORD [esp],eax
  241. add edx,ebx
  242. and eax,DWORD [4+esp]
  243. add ebx,ecx
  244. xor eax,edi
  245. mov ecx,DWORD [156+esp]
  246. add ebp,4
  247. add eax,ebx
  248. cmp esi,3329325298
  249. jne NEAR L$00416_63
  250. mov esi,DWORD [356+esp]
  251. mov ebx,DWORD [8+esp]
  252. mov ecx,DWORD [16+esp]
  253. add eax,DWORD [esi]
  254. add ebx,DWORD [4+esi]
  255. add edi,DWORD [8+esi]
  256. add ecx,DWORD [12+esi]
  257. mov DWORD [esi],eax
  258. mov DWORD [4+esi],ebx
  259. mov DWORD [8+esi],edi
  260. mov DWORD [12+esi],ecx
  261. mov eax,DWORD [24+esp]
  262. mov ebx,DWORD [28+esp]
  263. mov ecx,DWORD [32+esp]
  264. mov edi,DWORD [360+esp]
  265. add edx,DWORD [16+esi]
  266. add eax,DWORD [20+esi]
  267. add ebx,DWORD [24+esi]
  268. add ecx,DWORD [28+esi]
  269. mov DWORD [16+esi],edx
  270. mov DWORD [20+esi],eax
  271. mov DWORD [24+esi],ebx
  272. mov DWORD [28+esi],ecx
  273. lea esp,[356+esp]
  274. sub ebp,256
  275. cmp edi,DWORD [8+esp]
  276. jb NEAR L$002loop
  277. mov esp,DWORD [12+esp]
  278. pop edi
  279. pop esi
  280. pop ebx
  281. pop ebp
  282. ret
  283. align 64
  284. L$001K256:
  285. dd 1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298
  286. dd 66051,67438087,134810123,202182159
  287. db 83,72,65,50,53,54,32,98,108,111,99,107,32,116,114,97
  288. db 110,115,102,111,114,109,32,102,111,114,32,120,56,54,44,32
  289. db 67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97
  290. db 112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103
  291. db 62,0