sha512_586.asm 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665
  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 _sha512_block_data_order
  10. align 16
  11. _sha512_block_data_order:
  12. L$_sha512_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$001K512-L$000pic_point)+ebp]
  25. sub esp,16
  26. and esp,-64
  27. shl eax,7
  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. align 16
  34. L$002loop_x86:
  35. mov eax,DWORD [edi]
  36. mov ebx,DWORD [4+edi]
  37. mov ecx,DWORD [8+edi]
  38. mov edx,DWORD [12+edi]
  39. ; bswap eax
  40. xchg ah,al
  41. ror eax,16
  42. xchg ah,al
  43. ; bswap ebx
  44. xchg bh,bl
  45. ror ebx,16
  46. xchg bh,bl
  47. ; bswap ecx
  48. xchg ch,cl
  49. ror ecx,16
  50. xchg ch,cl
  51. ; bswap edx
  52. xchg dh,dl
  53. ror edx,16
  54. xchg dh,dl
  55. push eax
  56. push ebx
  57. push ecx
  58. push edx
  59. mov eax,DWORD [16+edi]
  60. mov ebx,DWORD [20+edi]
  61. mov ecx,DWORD [24+edi]
  62. mov edx,DWORD [28+edi]
  63. ; bswap eax
  64. xchg ah,al
  65. ror eax,16
  66. xchg ah,al
  67. ; bswap ebx
  68. xchg bh,bl
  69. ror ebx,16
  70. xchg bh,bl
  71. ; bswap ecx
  72. xchg ch,cl
  73. ror ecx,16
  74. xchg ch,cl
  75. ; bswap edx
  76. xchg dh,dl
  77. ror edx,16
  78. xchg dh,dl
  79. push eax
  80. push ebx
  81. push ecx
  82. push edx
  83. mov eax,DWORD [32+edi]
  84. mov ebx,DWORD [36+edi]
  85. mov ecx,DWORD [40+edi]
  86. mov edx,DWORD [44+edi]
  87. ; bswap eax
  88. xchg ah,al
  89. ror eax,16
  90. xchg ah,al
  91. ; bswap ebx
  92. xchg bh,bl
  93. ror ebx,16
  94. xchg bh,bl
  95. ; bswap ecx
  96. xchg ch,cl
  97. ror ecx,16
  98. xchg ch,cl
  99. ; bswap edx
  100. xchg dh,dl
  101. ror edx,16
  102. xchg dh,dl
  103. push eax
  104. push ebx
  105. push ecx
  106. push edx
  107. mov eax,DWORD [48+edi]
  108. mov ebx,DWORD [52+edi]
  109. mov ecx,DWORD [56+edi]
  110. mov edx,DWORD [60+edi]
  111. ; bswap eax
  112. xchg ah,al
  113. ror eax,16
  114. xchg ah,al
  115. ; bswap ebx
  116. xchg bh,bl
  117. ror ebx,16
  118. xchg bh,bl
  119. ; bswap ecx
  120. xchg ch,cl
  121. ror ecx,16
  122. xchg ch,cl
  123. ; bswap edx
  124. xchg dh,dl
  125. ror edx,16
  126. xchg dh,dl
  127. push eax
  128. push ebx
  129. push ecx
  130. push edx
  131. mov eax,DWORD [64+edi]
  132. mov ebx,DWORD [68+edi]
  133. mov ecx,DWORD [72+edi]
  134. mov edx,DWORD [76+edi]
  135. ; bswap eax
  136. xchg ah,al
  137. ror eax,16
  138. xchg ah,al
  139. ; bswap ebx
  140. xchg bh,bl
  141. ror ebx,16
  142. xchg bh,bl
  143. ; bswap ecx
  144. xchg ch,cl
  145. ror ecx,16
  146. xchg ch,cl
  147. ; bswap edx
  148. xchg dh,dl
  149. ror edx,16
  150. xchg dh,dl
  151. push eax
  152. push ebx
  153. push ecx
  154. push edx
  155. mov eax,DWORD [80+edi]
  156. mov ebx,DWORD [84+edi]
  157. mov ecx,DWORD [88+edi]
  158. mov edx,DWORD [92+edi]
  159. ; bswap eax
  160. xchg ah,al
  161. ror eax,16
  162. xchg ah,al
  163. ; bswap ebx
  164. xchg bh,bl
  165. ror ebx,16
  166. xchg bh,bl
  167. ; bswap ecx
  168. xchg ch,cl
  169. ror ecx,16
  170. xchg ch,cl
  171. ; bswap edx
  172. xchg dh,dl
  173. ror edx,16
  174. xchg dh,dl
  175. push eax
  176. push ebx
  177. push ecx
  178. push edx
  179. mov eax,DWORD [96+edi]
  180. mov ebx,DWORD [100+edi]
  181. mov ecx,DWORD [104+edi]
  182. mov edx,DWORD [108+edi]
  183. ; bswap eax
  184. xchg ah,al
  185. ror eax,16
  186. xchg ah,al
  187. ; bswap ebx
  188. xchg bh,bl
  189. ror ebx,16
  190. xchg bh,bl
  191. ; bswap ecx
  192. xchg ch,cl
  193. ror ecx,16
  194. xchg ch,cl
  195. ; bswap edx
  196. xchg dh,dl
  197. ror edx,16
  198. xchg dh,dl
  199. push eax
  200. push ebx
  201. push ecx
  202. push edx
  203. mov eax,DWORD [112+edi]
  204. mov ebx,DWORD [116+edi]
  205. mov ecx,DWORD [120+edi]
  206. mov edx,DWORD [124+edi]
  207. ; bswap eax
  208. xchg ah,al
  209. ror eax,16
  210. xchg ah,al
  211. ; bswap ebx
  212. xchg bh,bl
  213. ror ebx,16
  214. xchg bh,bl
  215. ; bswap ecx
  216. xchg ch,cl
  217. ror ecx,16
  218. xchg ch,cl
  219. ; bswap edx
  220. xchg dh,dl
  221. ror edx,16
  222. xchg dh,dl
  223. push eax
  224. push ebx
  225. push ecx
  226. push edx
  227. add edi,128
  228. sub esp,72
  229. mov DWORD [204+esp],edi
  230. lea edi,[8+esp]
  231. mov ecx,16
  232. dd 2784229001
  233. align 16
  234. L$00300_15_x86:
  235. mov ecx,DWORD [40+esp]
  236. mov edx,DWORD [44+esp]
  237. mov esi,ecx
  238. shr ecx,9
  239. mov edi,edx
  240. shr edx,9
  241. mov ebx,ecx
  242. shl esi,14
  243. mov eax,edx
  244. shl edi,14
  245. xor ebx,esi
  246. shr ecx,5
  247. xor eax,edi
  248. shr edx,5
  249. xor eax,ecx
  250. shl esi,4
  251. xor ebx,edx
  252. shl edi,4
  253. xor ebx,esi
  254. shr ecx,4
  255. xor eax,edi
  256. shr edx,4
  257. xor eax,ecx
  258. shl esi,5
  259. xor ebx,edx
  260. shl edi,5
  261. xor eax,esi
  262. xor ebx,edi
  263. mov ecx,DWORD [48+esp]
  264. mov edx,DWORD [52+esp]
  265. mov esi,DWORD [56+esp]
  266. mov edi,DWORD [60+esp]
  267. add eax,DWORD [64+esp]
  268. adc ebx,DWORD [68+esp]
  269. xor ecx,esi
  270. xor edx,edi
  271. and ecx,DWORD [40+esp]
  272. and edx,DWORD [44+esp]
  273. add eax,DWORD [192+esp]
  274. adc ebx,DWORD [196+esp]
  275. xor ecx,esi
  276. xor edx,edi
  277. mov esi,DWORD [ebp]
  278. mov edi,DWORD [4+ebp]
  279. add eax,ecx
  280. adc ebx,edx
  281. mov ecx,DWORD [32+esp]
  282. mov edx,DWORD [36+esp]
  283. add eax,esi
  284. adc ebx,edi
  285. mov DWORD [esp],eax
  286. mov DWORD [4+esp],ebx
  287. add eax,ecx
  288. adc ebx,edx
  289. mov ecx,DWORD [8+esp]
  290. mov edx,DWORD [12+esp]
  291. mov DWORD [32+esp],eax
  292. mov DWORD [36+esp],ebx
  293. mov esi,ecx
  294. shr ecx,2
  295. mov edi,edx
  296. shr edx,2
  297. mov ebx,ecx
  298. shl esi,4
  299. mov eax,edx
  300. shl edi,4
  301. xor ebx,esi
  302. shr ecx,5
  303. xor eax,edi
  304. shr edx,5
  305. xor ebx,ecx
  306. shl esi,21
  307. xor eax,edx
  308. shl edi,21
  309. xor eax,esi
  310. shr ecx,21
  311. xor ebx,edi
  312. shr edx,21
  313. xor eax,ecx
  314. shl esi,5
  315. xor ebx,edx
  316. shl edi,5
  317. xor eax,esi
  318. xor ebx,edi
  319. mov ecx,DWORD [8+esp]
  320. mov edx,DWORD [12+esp]
  321. mov esi,DWORD [16+esp]
  322. mov edi,DWORD [20+esp]
  323. add eax,DWORD [esp]
  324. adc ebx,DWORD [4+esp]
  325. or ecx,esi
  326. or edx,edi
  327. and ecx,DWORD [24+esp]
  328. and edx,DWORD [28+esp]
  329. and esi,DWORD [8+esp]
  330. and edi,DWORD [12+esp]
  331. or ecx,esi
  332. or edx,edi
  333. add eax,ecx
  334. adc ebx,edx
  335. mov DWORD [esp],eax
  336. mov DWORD [4+esp],ebx
  337. mov dl,BYTE [ebp]
  338. sub esp,8
  339. lea ebp,[8+ebp]
  340. cmp dl,148
  341. jne NEAR L$00300_15_x86
  342. align 16
  343. L$00416_79_x86:
  344. mov ecx,DWORD [312+esp]
  345. mov edx,DWORD [316+esp]
  346. mov esi,ecx
  347. shr ecx,1
  348. mov edi,edx
  349. shr edx,1
  350. mov eax,ecx
  351. shl esi,24
  352. mov ebx,edx
  353. shl edi,24
  354. xor ebx,esi
  355. shr ecx,6
  356. xor eax,edi
  357. shr edx,6
  358. xor eax,ecx
  359. shl esi,7
  360. xor ebx,edx
  361. shl edi,1
  362. xor ebx,esi
  363. shr ecx,1
  364. xor eax,edi
  365. shr edx,1
  366. xor eax,ecx
  367. shl edi,6
  368. xor ebx,edx
  369. xor eax,edi
  370. mov DWORD [esp],eax
  371. mov DWORD [4+esp],ebx
  372. mov ecx,DWORD [208+esp]
  373. mov edx,DWORD [212+esp]
  374. mov esi,ecx
  375. shr ecx,6
  376. mov edi,edx
  377. shr edx,6
  378. mov eax,ecx
  379. shl esi,3
  380. mov ebx,edx
  381. shl edi,3
  382. xor eax,esi
  383. shr ecx,13
  384. xor ebx,edi
  385. shr edx,13
  386. xor eax,ecx
  387. shl esi,10
  388. xor ebx,edx
  389. shl edi,10
  390. xor ebx,esi
  391. shr ecx,10
  392. xor eax,edi
  393. shr edx,10
  394. xor ebx,ecx
  395. shl edi,13
  396. xor eax,edx
  397. xor eax,edi
  398. mov ecx,DWORD [320+esp]
  399. mov edx,DWORD [324+esp]
  400. add eax,DWORD [esp]
  401. adc ebx,DWORD [4+esp]
  402. mov esi,DWORD [248+esp]
  403. mov edi,DWORD [252+esp]
  404. add eax,ecx
  405. adc ebx,edx
  406. add eax,esi
  407. adc ebx,edi
  408. mov DWORD [192+esp],eax
  409. mov DWORD [196+esp],ebx
  410. mov ecx,DWORD [40+esp]
  411. mov edx,DWORD [44+esp]
  412. mov esi,ecx
  413. shr ecx,9
  414. mov edi,edx
  415. shr edx,9
  416. mov ebx,ecx
  417. shl esi,14
  418. mov eax,edx
  419. shl edi,14
  420. xor ebx,esi
  421. shr ecx,5
  422. xor eax,edi
  423. shr edx,5
  424. xor eax,ecx
  425. shl esi,4
  426. xor ebx,edx
  427. shl edi,4
  428. xor ebx,esi
  429. shr ecx,4
  430. xor eax,edi
  431. shr edx,4
  432. xor eax,ecx
  433. shl esi,5
  434. xor ebx,edx
  435. shl edi,5
  436. xor eax,esi
  437. xor ebx,edi
  438. mov ecx,DWORD [48+esp]
  439. mov edx,DWORD [52+esp]
  440. mov esi,DWORD [56+esp]
  441. mov edi,DWORD [60+esp]
  442. add eax,DWORD [64+esp]
  443. adc ebx,DWORD [68+esp]
  444. xor ecx,esi
  445. xor edx,edi
  446. and ecx,DWORD [40+esp]
  447. and edx,DWORD [44+esp]
  448. add eax,DWORD [192+esp]
  449. adc ebx,DWORD [196+esp]
  450. xor ecx,esi
  451. xor edx,edi
  452. mov esi,DWORD [ebp]
  453. mov edi,DWORD [4+ebp]
  454. add eax,ecx
  455. adc ebx,edx
  456. mov ecx,DWORD [32+esp]
  457. mov edx,DWORD [36+esp]
  458. add eax,esi
  459. adc ebx,edi
  460. mov DWORD [esp],eax
  461. mov DWORD [4+esp],ebx
  462. add eax,ecx
  463. adc ebx,edx
  464. mov ecx,DWORD [8+esp]
  465. mov edx,DWORD [12+esp]
  466. mov DWORD [32+esp],eax
  467. mov DWORD [36+esp],ebx
  468. mov esi,ecx
  469. shr ecx,2
  470. mov edi,edx
  471. shr edx,2
  472. mov ebx,ecx
  473. shl esi,4
  474. mov eax,edx
  475. shl edi,4
  476. xor ebx,esi
  477. shr ecx,5
  478. xor eax,edi
  479. shr edx,5
  480. xor ebx,ecx
  481. shl esi,21
  482. xor eax,edx
  483. shl edi,21
  484. xor eax,esi
  485. shr ecx,21
  486. xor ebx,edi
  487. shr edx,21
  488. xor eax,ecx
  489. shl esi,5
  490. xor ebx,edx
  491. shl edi,5
  492. xor eax,esi
  493. xor ebx,edi
  494. mov ecx,DWORD [8+esp]
  495. mov edx,DWORD [12+esp]
  496. mov esi,DWORD [16+esp]
  497. mov edi,DWORD [20+esp]
  498. add eax,DWORD [esp]
  499. adc ebx,DWORD [4+esp]
  500. or ecx,esi
  501. or edx,edi
  502. and ecx,DWORD [24+esp]
  503. and edx,DWORD [28+esp]
  504. and esi,DWORD [8+esp]
  505. and edi,DWORD [12+esp]
  506. or ecx,esi
  507. or edx,edi
  508. add eax,ecx
  509. adc ebx,edx
  510. mov DWORD [esp],eax
  511. mov DWORD [4+esp],ebx
  512. mov dl,BYTE [ebp]
  513. sub esp,8
  514. lea ebp,[8+ebp]
  515. cmp dl,23
  516. jne NEAR L$00416_79_x86
  517. mov esi,DWORD [840+esp]
  518. mov edi,DWORD [844+esp]
  519. mov eax,DWORD [esi]
  520. mov ebx,DWORD [4+esi]
  521. mov ecx,DWORD [8+esi]
  522. mov edx,DWORD [12+esi]
  523. add eax,DWORD [8+esp]
  524. adc ebx,DWORD [12+esp]
  525. mov DWORD [esi],eax
  526. mov DWORD [4+esi],ebx
  527. add ecx,DWORD [16+esp]
  528. adc edx,DWORD [20+esp]
  529. mov DWORD [8+esi],ecx
  530. mov DWORD [12+esi],edx
  531. mov eax,DWORD [16+esi]
  532. mov ebx,DWORD [20+esi]
  533. mov ecx,DWORD [24+esi]
  534. mov edx,DWORD [28+esi]
  535. add eax,DWORD [24+esp]
  536. adc ebx,DWORD [28+esp]
  537. mov DWORD [16+esi],eax
  538. mov DWORD [20+esi],ebx
  539. add ecx,DWORD [32+esp]
  540. adc edx,DWORD [36+esp]
  541. mov DWORD [24+esi],ecx
  542. mov DWORD [28+esi],edx
  543. mov eax,DWORD [32+esi]
  544. mov ebx,DWORD [36+esi]
  545. mov ecx,DWORD [40+esi]
  546. mov edx,DWORD [44+esi]
  547. add eax,DWORD [40+esp]
  548. adc ebx,DWORD [44+esp]
  549. mov DWORD [32+esi],eax
  550. mov DWORD [36+esi],ebx
  551. add ecx,DWORD [48+esp]
  552. adc edx,DWORD [52+esp]
  553. mov DWORD [40+esi],ecx
  554. mov DWORD [44+esi],edx
  555. mov eax,DWORD [48+esi]
  556. mov ebx,DWORD [52+esi]
  557. mov ecx,DWORD [56+esi]
  558. mov edx,DWORD [60+esi]
  559. add eax,DWORD [56+esp]
  560. adc ebx,DWORD [60+esp]
  561. mov DWORD [48+esi],eax
  562. mov DWORD [52+esi],ebx
  563. add ecx,DWORD [64+esp]
  564. adc edx,DWORD [68+esp]
  565. mov DWORD [56+esi],ecx
  566. mov DWORD [60+esi],edx
  567. add esp,840
  568. sub ebp,640
  569. cmp edi,DWORD [8+esp]
  570. jb NEAR L$002loop_x86
  571. mov esp,DWORD [12+esp]
  572. pop edi
  573. pop esi
  574. pop ebx
  575. pop ebp
  576. ret
  577. align 64
  578. L$001K512:
  579. dd 3609767458,1116352408
  580. dd 602891725,1899447441
  581. dd 3964484399,3049323471
  582. dd 2173295548,3921009573
  583. dd 4081628472,961987163
  584. dd 3053834265,1508970993
  585. dd 2937671579,2453635748
  586. dd 3664609560,2870763221
  587. dd 2734883394,3624381080
  588. dd 1164996542,310598401
  589. dd 1323610764,607225278
  590. dd 3590304994,1426881987
  591. dd 4068182383,1925078388
  592. dd 991336113,2162078206
  593. dd 633803317,2614888103
  594. dd 3479774868,3248222580
  595. dd 2666613458,3835390401
  596. dd 944711139,4022224774
  597. dd 2341262773,264347078
  598. dd 2007800933,604807628
  599. dd 1495990901,770255983
  600. dd 1856431235,1249150122
  601. dd 3175218132,1555081692
  602. dd 2198950837,1996064986
  603. dd 3999719339,2554220882
  604. dd 766784016,2821834349
  605. dd 2566594879,2952996808
  606. dd 3203337956,3210313671
  607. dd 1034457026,3336571891
  608. dd 2466948901,3584528711
  609. dd 3758326383,113926993
  610. dd 168717936,338241895
  611. dd 1188179964,666307205
  612. dd 1546045734,773529912
  613. dd 1522805485,1294757372
  614. dd 2643833823,1396182291
  615. dd 2343527390,1695183700
  616. dd 1014477480,1986661051
  617. dd 1206759142,2177026350
  618. dd 344077627,2456956037
  619. dd 1290863460,2730485921
  620. dd 3158454273,2820302411
  621. dd 3505952657,3259730800
  622. dd 106217008,3345764771
  623. dd 3606008344,3516065817
  624. dd 1432725776,3600352804
  625. dd 1467031594,4094571909
  626. dd 851169720,275423344
  627. dd 3100823752,430227734
  628. dd 1363258195,506948616
  629. dd 3750685593,659060556
  630. dd 3785050280,883997877
  631. dd 3318307427,958139571
  632. dd 3812723403,1322822218
  633. dd 2003034995,1537002063
  634. dd 3602036899,1747873779
  635. dd 1575990012,1955562222
  636. dd 1125592928,2024104815
  637. dd 2716904306,2227730452
  638. dd 442776044,2361852424
  639. dd 593698344,2428436474
  640. dd 3733110249,2756734187
  641. dd 2999351573,3204031479
  642. dd 3815920427,3329325298
  643. dd 3928383900,3391569614
  644. dd 566280711,3515267271
  645. dd 3454069534,3940187606
  646. dd 4000239992,4118630271
  647. dd 1914138554,116418474
  648. dd 2731055270,174292421
  649. dd 3203993006,289380356
  650. dd 320620315,460393269
  651. dd 587496836,685471733
  652. dd 1086792851,852142971
  653. dd 365543100,1017036298
  654. dd 2618297676,1126000580
  655. dd 3409855158,1288033470
  656. dd 4234509866,1501505948
  657. dd 987167468,1607167915
  658. dd 1246189591,1816402316
  659. dd 67438087,66051
  660. dd 202182159,134810123
  661. db 83,72,65,53,49,50,32,98,108,111,99,107,32,116,114,97
  662. db 110,115,102,111,114,109,32,102,111,114,32,120,56,54,44,32
  663. db 67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97
  664. db 112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103
  665. db 62,0