aesni-x86.asm 46 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461
  1. ; This file is generated from a similarly-named Perl script in the BoringSSL
  2. ; source tree. Do not edit by hand.
  3. %ifdef BORINGSSL_PREFIX
  4. %include "boringssl_prefix_symbols_nasm.inc"
  5. %endif
  6. %ifidn __OUTPUT_FORMAT__,obj
  7. section code use32 class=code align=64
  8. %elifidn __OUTPUT_FORMAT__,win32
  9. $@feat.00 equ 1
  10. section .text code align=64
  11. %else
  12. section .text code
  13. %endif
  14. ;extern _OPENSSL_ia32cap_P
  15. %ifdef BORINGSSL_DISPATCH_TEST
  16. extern _BORINGSSL_function_hit
  17. %endif
  18. global _aes_hw_encrypt
  19. align 16
  20. _aes_hw_encrypt:
  21. L$_aes_hw_encrypt_begin:
  22. %ifdef BORINGSSL_DISPATCH_TEST
  23. push ebx
  24. push edx
  25. call L$000pic
  26. L$000pic:
  27. pop ebx
  28. lea ebx,[(_BORINGSSL_function_hit+1-L$000pic)+ebx]
  29. mov edx,1
  30. mov BYTE [ebx],dl
  31. pop edx
  32. pop ebx
  33. %endif
  34. mov eax,DWORD [4+esp]
  35. mov edx,DWORD [12+esp]
  36. movups xmm2,[eax]
  37. mov ecx,DWORD [240+edx]
  38. mov eax,DWORD [8+esp]
  39. movups xmm0,[edx]
  40. movups xmm1,[16+edx]
  41. lea edx,[32+edx]
  42. xorps xmm2,xmm0
  43. L$001enc1_loop_1:
  44. db 102,15,56,220,209
  45. dec ecx
  46. movups xmm1,[edx]
  47. lea edx,[16+edx]
  48. jnz NEAR L$001enc1_loop_1
  49. db 102,15,56,221,209
  50. pxor xmm0,xmm0
  51. pxor xmm1,xmm1
  52. movups [eax],xmm2
  53. pxor xmm2,xmm2
  54. ret
  55. global _aes_hw_decrypt
  56. align 16
  57. _aes_hw_decrypt:
  58. L$_aes_hw_decrypt_begin:
  59. mov eax,DWORD [4+esp]
  60. mov edx,DWORD [12+esp]
  61. movups xmm2,[eax]
  62. mov ecx,DWORD [240+edx]
  63. mov eax,DWORD [8+esp]
  64. movups xmm0,[edx]
  65. movups xmm1,[16+edx]
  66. lea edx,[32+edx]
  67. xorps xmm2,xmm0
  68. L$002dec1_loop_2:
  69. db 102,15,56,222,209
  70. dec ecx
  71. movups xmm1,[edx]
  72. lea edx,[16+edx]
  73. jnz NEAR L$002dec1_loop_2
  74. db 102,15,56,223,209
  75. pxor xmm0,xmm0
  76. pxor xmm1,xmm1
  77. movups [eax],xmm2
  78. pxor xmm2,xmm2
  79. ret
  80. align 16
  81. __aesni_encrypt2:
  82. movups xmm0,[edx]
  83. shl ecx,4
  84. movups xmm1,[16+edx]
  85. xorps xmm2,xmm0
  86. pxor xmm3,xmm0
  87. movups xmm0,[32+edx]
  88. lea edx,[32+ecx*1+edx]
  89. neg ecx
  90. add ecx,16
  91. L$003enc2_loop:
  92. db 102,15,56,220,209
  93. db 102,15,56,220,217
  94. movups xmm1,[ecx*1+edx]
  95. add ecx,32
  96. db 102,15,56,220,208
  97. db 102,15,56,220,216
  98. movups xmm0,[ecx*1+edx-16]
  99. jnz NEAR L$003enc2_loop
  100. db 102,15,56,220,209
  101. db 102,15,56,220,217
  102. db 102,15,56,221,208
  103. db 102,15,56,221,216
  104. ret
  105. align 16
  106. __aesni_decrypt2:
  107. movups xmm0,[edx]
  108. shl ecx,4
  109. movups xmm1,[16+edx]
  110. xorps xmm2,xmm0
  111. pxor xmm3,xmm0
  112. movups xmm0,[32+edx]
  113. lea edx,[32+ecx*1+edx]
  114. neg ecx
  115. add ecx,16
  116. L$004dec2_loop:
  117. db 102,15,56,222,209
  118. db 102,15,56,222,217
  119. movups xmm1,[ecx*1+edx]
  120. add ecx,32
  121. db 102,15,56,222,208
  122. db 102,15,56,222,216
  123. movups xmm0,[ecx*1+edx-16]
  124. jnz NEAR L$004dec2_loop
  125. db 102,15,56,222,209
  126. db 102,15,56,222,217
  127. db 102,15,56,223,208
  128. db 102,15,56,223,216
  129. ret
  130. align 16
  131. __aesni_encrypt3:
  132. movups xmm0,[edx]
  133. shl ecx,4
  134. movups xmm1,[16+edx]
  135. xorps xmm2,xmm0
  136. pxor xmm3,xmm0
  137. pxor xmm4,xmm0
  138. movups xmm0,[32+edx]
  139. lea edx,[32+ecx*1+edx]
  140. neg ecx
  141. add ecx,16
  142. L$005enc3_loop:
  143. db 102,15,56,220,209
  144. db 102,15,56,220,217
  145. db 102,15,56,220,225
  146. movups xmm1,[ecx*1+edx]
  147. add ecx,32
  148. db 102,15,56,220,208
  149. db 102,15,56,220,216
  150. db 102,15,56,220,224
  151. movups xmm0,[ecx*1+edx-16]
  152. jnz NEAR L$005enc3_loop
  153. db 102,15,56,220,209
  154. db 102,15,56,220,217
  155. db 102,15,56,220,225
  156. db 102,15,56,221,208
  157. db 102,15,56,221,216
  158. db 102,15,56,221,224
  159. ret
  160. align 16
  161. __aesni_decrypt3:
  162. movups xmm0,[edx]
  163. shl ecx,4
  164. movups xmm1,[16+edx]
  165. xorps xmm2,xmm0
  166. pxor xmm3,xmm0
  167. pxor xmm4,xmm0
  168. movups xmm0,[32+edx]
  169. lea edx,[32+ecx*1+edx]
  170. neg ecx
  171. add ecx,16
  172. L$006dec3_loop:
  173. db 102,15,56,222,209
  174. db 102,15,56,222,217
  175. db 102,15,56,222,225
  176. movups xmm1,[ecx*1+edx]
  177. add ecx,32
  178. db 102,15,56,222,208
  179. db 102,15,56,222,216
  180. db 102,15,56,222,224
  181. movups xmm0,[ecx*1+edx-16]
  182. jnz NEAR L$006dec3_loop
  183. db 102,15,56,222,209
  184. db 102,15,56,222,217
  185. db 102,15,56,222,225
  186. db 102,15,56,223,208
  187. db 102,15,56,223,216
  188. db 102,15,56,223,224
  189. ret
  190. align 16
  191. __aesni_encrypt4:
  192. movups xmm0,[edx]
  193. movups xmm1,[16+edx]
  194. shl ecx,4
  195. xorps xmm2,xmm0
  196. pxor xmm3,xmm0
  197. pxor xmm4,xmm0
  198. pxor xmm5,xmm0
  199. movups xmm0,[32+edx]
  200. lea edx,[32+ecx*1+edx]
  201. neg ecx
  202. db 15,31,64,0
  203. add ecx,16
  204. L$007enc4_loop:
  205. db 102,15,56,220,209
  206. db 102,15,56,220,217
  207. db 102,15,56,220,225
  208. db 102,15,56,220,233
  209. movups xmm1,[ecx*1+edx]
  210. add ecx,32
  211. db 102,15,56,220,208
  212. db 102,15,56,220,216
  213. db 102,15,56,220,224
  214. db 102,15,56,220,232
  215. movups xmm0,[ecx*1+edx-16]
  216. jnz NEAR L$007enc4_loop
  217. db 102,15,56,220,209
  218. db 102,15,56,220,217
  219. db 102,15,56,220,225
  220. db 102,15,56,220,233
  221. db 102,15,56,221,208
  222. db 102,15,56,221,216
  223. db 102,15,56,221,224
  224. db 102,15,56,221,232
  225. ret
  226. align 16
  227. __aesni_decrypt4:
  228. movups xmm0,[edx]
  229. movups xmm1,[16+edx]
  230. shl ecx,4
  231. xorps xmm2,xmm0
  232. pxor xmm3,xmm0
  233. pxor xmm4,xmm0
  234. pxor xmm5,xmm0
  235. movups xmm0,[32+edx]
  236. lea edx,[32+ecx*1+edx]
  237. neg ecx
  238. db 15,31,64,0
  239. add ecx,16
  240. L$008dec4_loop:
  241. db 102,15,56,222,209
  242. db 102,15,56,222,217
  243. db 102,15,56,222,225
  244. db 102,15,56,222,233
  245. movups xmm1,[ecx*1+edx]
  246. add ecx,32
  247. db 102,15,56,222,208
  248. db 102,15,56,222,216
  249. db 102,15,56,222,224
  250. db 102,15,56,222,232
  251. movups xmm0,[ecx*1+edx-16]
  252. jnz NEAR L$008dec4_loop
  253. db 102,15,56,222,209
  254. db 102,15,56,222,217
  255. db 102,15,56,222,225
  256. db 102,15,56,222,233
  257. db 102,15,56,223,208
  258. db 102,15,56,223,216
  259. db 102,15,56,223,224
  260. db 102,15,56,223,232
  261. ret
  262. align 16
  263. __aesni_encrypt6:
  264. movups xmm0,[edx]
  265. shl ecx,4
  266. movups xmm1,[16+edx]
  267. xorps xmm2,xmm0
  268. pxor xmm3,xmm0
  269. pxor xmm4,xmm0
  270. db 102,15,56,220,209
  271. pxor xmm5,xmm0
  272. pxor xmm6,xmm0
  273. db 102,15,56,220,217
  274. lea edx,[32+ecx*1+edx]
  275. neg ecx
  276. db 102,15,56,220,225
  277. pxor xmm7,xmm0
  278. movups xmm0,[ecx*1+edx]
  279. add ecx,16
  280. jmp NEAR L$009_aesni_encrypt6_inner
  281. align 16
  282. L$010enc6_loop:
  283. db 102,15,56,220,209
  284. db 102,15,56,220,217
  285. db 102,15,56,220,225
  286. L$009_aesni_encrypt6_inner:
  287. db 102,15,56,220,233
  288. db 102,15,56,220,241
  289. db 102,15,56,220,249
  290. L$_aesni_encrypt6_enter:
  291. movups xmm1,[ecx*1+edx]
  292. add ecx,32
  293. db 102,15,56,220,208
  294. db 102,15,56,220,216
  295. db 102,15,56,220,224
  296. db 102,15,56,220,232
  297. db 102,15,56,220,240
  298. db 102,15,56,220,248
  299. movups xmm0,[ecx*1+edx-16]
  300. jnz NEAR L$010enc6_loop
  301. db 102,15,56,220,209
  302. db 102,15,56,220,217
  303. db 102,15,56,220,225
  304. db 102,15,56,220,233
  305. db 102,15,56,220,241
  306. db 102,15,56,220,249
  307. db 102,15,56,221,208
  308. db 102,15,56,221,216
  309. db 102,15,56,221,224
  310. db 102,15,56,221,232
  311. db 102,15,56,221,240
  312. db 102,15,56,221,248
  313. ret
  314. align 16
  315. __aesni_decrypt6:
  316. movups xmm0,[edx]
  317. shl ecx,4
  318. movups xmm1,[16+edx]
  319. xorps xmm2,xmm0
  320. pxor xmm3,xmm0
  321. pxor xmm4,xmm0
  322. db 102,15,56,222,209
  323. pxor xmm5,xmm0
  324. pxor xmm6,xmm0
  325. db 102,15,56,222,217
  326. lea edx,[32+ecx*1+edx]
  327. neg ecx
  328. db 102,15,56,222,225
  329. pxor xmm7,xmm0
  330. movups xmm0,[ecx*1+edx]
  331. add ecx,16
  332. jmp NEAR L$011_aesni_decrypt6_inner
  333. align 16
  334. L$012dec6_loop:
  335. db 102,15,56,222,209
  336. db 102,15,56,222,217
  337. db 102,15,56,222,225
  338. L$011_aesni_decrypt6_inner:
  339. db 102,15,56,222,233
  340. db 102,15,56,222,241
  341. db 102,15,56,222,249
  342. L$_aesni_decrypt6_enter:
  343. movups xmm1,[ecx*1+edx]
  344. add ecx,32
  345. db 102,15,56,222,208
  346. db 102,15,56,222,216
  347. db 102,15,56,222,224
  348. db 102,15,56,222,232
  349. db 102,15,56,222,240
  350. db 102,15,56,222,248
  351. movups xmm0,[ecx*1+edx-16]
  352. jnz NEAR L$012dec6_loop
  353. db 102,15,56,222,209
  354. db 102,15,56,222,217
  355. db 102,15,56,222,225
  356. db 102,15,56,222,233
  357. db 102,15,56,222,241
  358. db 102,15,56,222,249
  359. db 102,15,56,223,208
  360. db 102,15,56,223,216
  361. db 102,15,56,223,224
  362. db 102,15,56,223,232
  363. db 102,15,56,223,240
  364. db 102,15,56,223,248
  365. ret
  366. global _aes_hw_ecb_encrypt
  367. align 16
  368. _aes_hw_ecb_encrypt:
  369. L$_aes_hw_ecb_encrypt_begin:
  370. push ebp
  371. push ebx
  372. push esi
  373. push edi
  374. mov esi,DWORD [20+esp]
  375. mov edi,DWORD [24+esp]
  376. mov eax,DWORD [28+esp]
  377. mov edx,DWORD [32+esp]
  378. mov ebx,DWORD [36+esp]
  379. and eax,-16
  380. jz NEAR L$013ecb_ret
  381. mov ecx,DWORD [240+edx]
  382. test ebx,ebx
  383. jz NEAR L$014ecb_decrypt
  384. mov ebp,edx
  385. mov ebx,ecx
  386. cmp eax,96
  387. jb NEAR L$015ecb_enc_tail
  388. movdqu xmm2,[esi]
  389. movdqu xmm3,[16+esi]
  390. movdqu xmm4,[32+esi]
  391. movdqu xmm5,[48+esi]
  392. movdqu xmm6,[64+esi]
  393. movdqu xmm7,[80+esi]
  394. lea esi,[96+esi]
  395. sub eax,96
  396. jmp NEAR L$016ecb_enc_loop6_enter
  397. align 16
  398. L$017ecb_enc_loop6:
  399. movups [edi],xmm2
  400. movdqu xmm2,[esi]
  401. movups [16+edi],xmm3
  402. movdqu xmm3,[16+esi]
  403. movups [32+edi],xmm4
  404. movdqu xmm4,[32+esi]
  405. movups [48+edi],xmm5
  406. movdqu xmm5,[48+esi]
  407. movups [64+edi],xmm6
  408. movdqu xmm6,[64+esi]
  409. movups [80+edi],xmm7
  410. lea edi,[96+edi]
  411. movdqu xmm7,[80+esi]
  412. lea esi,[96+esi]
  413. L$016ecb_enc_loop6_enter:
  414. call __aesni_encrypt6
  415. mov edx,ebp
  416. mov ecx,ebx
  417. sub eax,96
  418. jnc NEAR L$017ecb_enc_loop6
  419. movups [edi],xmm2
  420. movups [16+edi],xmm3
  421. movups [32+edi],xmm4
  422. movups [48+edi],xmm5
  423. movups [64+edi],xmm6
  424. movups [80+edi],xmm7
  425. lea edi,[96+edi]
  426. add eax,96
  427. jz NEAR L$013ecb_ret
  428. L$015ecb_enc_tail:
  429. movups xmm2,[esi]
  430. cmp eax,32
  431. jb NEAR L$018ecb_enc_one
  432. movups xmm3,[16+esi]
  433. je NEAR L$019ecb_enc_two
  434. movups xmm4,[32+esi]
  435. cmp eax,64
  436. jb NEAR L$020ecb_enc_three
  437. movups xmm5,[48+esi]
  438. je NEAR L$021ecb_enc_four
  439. movups xmm6,[64+esi]
  440. xorps xmm7,xmm7
  441. call __aesni_encrypt6
  442. movups [edi],xmm2
  443. movups [16+edi],xmm3
  444. movups [32+edi],xmm4
  445. movups [48+edi],xmm5
  446. movups [64+edi],xmm6
  447. jmp NEAR L$013ecb_ret
  448. align 16
  449. L$018ecb_enc_one:
  450. movups xmm0,[edx]
  451. movups xmm1,[16+edx]
  452. lea edx,[32+edx]
  453. xorps xmm2,xmm0
  454. L$022enc1_loop_3:
  455. db 102,15,56,220,209
  456. dec ecx
  457. movups xmm1,[edx]
  458. lea edx,[16+edx]
  459. jnz NEAR L$022enc1_loop_3
  460. db 102,15,56,221,209
  461. movups [edi],xmm2
  462. jmp NEAR L$013ecb_ret
  463. align 16
  464. L$019ecb_enc_two:
  465. call __aesni_encrypt2
  466. movups [edi],xmm2
  467. movups [16+edi],xmm3
  468. jmp NEAR L$013ecb_ret
  469. align 16
  470. L$020ecb_enc_three:
  471. call __aesni_encrypt3
  472. movups [edi],xmm2
  473. movups [16+edi],xmm3
  474. movups [32+edi],xmm4
  475. jmp NEAR L$013ecb_ret
  476. align 16
  477. L$021ecb_enc_four:
  478. call __aesni_encrypt4
  479. movups [edi],xmm2
  480. movups [16+edi],xmm3
  481. movups [32+edi],xmm4
  482. movups [48+edi],xmm5
  483. jmp NEAR L$013ecb_ret
  484. align 16
  485. L$014ecb_decrypt:
  486. mov ebp,edx
  487. mov ebx,ecx
  488. cmp eax,96
  489. jb NEAR L$023ecb_dec_tail
  490. movdqu xmm2,[esi]
  491. movdqu xmm3,[16+esi]
  492. movdqu xmm4,[32+esi]
  493. movdqu xmm5,[48+esi]
  494. movdqu xmm6,[64+esi]
  495. movdqu xmm7,[80+esi]
  496. lea esi,[96+esi]
  497. sub eax,96
  498. jmp NEAR L$024ecb_dec_loop6_enter
  499. align 16
  500. L$025ecb_dec_loop6:
  501. movups [edi],xmm2
  502. movdqu xmm2,[esi]
  503. movups [16+edi],xmm3
  504. movdqu xmm3,[16+esi]
  505. movups [32+edi],xmm4
  506. movdqu xmm4,[32+esi]
  507. movups [48+edi],xmm5
  508. movdqu xmm5,[48+esi]
  509. movups [64+edi],xmm6
  510. movdqu xmm6,[64+esi]
  511. movups [80+edi],xmm7
  512. lea edi,[96+edi]
  513. movdqu xmm7,[80+esi]
  514. lea esi,[96+esi]
  515. L$024ecb_dec_loop6_enter:
  516. call __aesni_decrypt6
  517. mov edx,ebp
  518. mov ecx,ebx
  519. sub eax,96
  520. jnc NEAR L$025ecb_dec_loop6
  521. movups [edi],xmm2
  522. movups [16+edi],xmm3
  523. movups [32+edi],xmm4
  524. movups [48+edi],xmm5
  525. movups [64+edi],xmm6
  526. movups [80+edi],xmm7
  527. lea edi,[96+edi]
  528. add eax,96
  529. jz NEAR L$013ecb_ret
  530. L$023ecb_dec_tail:
  531. movups xmm2,[esi]
  532. cmp eax,32
  533. jb NEAR L$026ecb_dec_one
  534. movups xmm3,[16+esi]
  535. je NEAR L$027ecb_dec_two
  536. movups xmm4,[32+esi]
  537. cmp eax,64
  538. jb NEAR L$028ecb_dec_three
  539. movups xmm5,[48+esi]
  540. je NEAR L$029ecb_dec_four
  541. movups xmm6,[64+esi]
  542. xorps xmm7,xmm7
  543. call __aesni_decrypt6
  544. movups [edi],xmm2
  545. movups [16+edi],xmm3
  546. movups [32+edi],xmm4
  547. movups [48+edi],xmm5
  548. movups [64+edi],xmm6
  549. jmp NEAR L$013ecb_ret
  550. align 16
  551. L$026ecb_dec_one:
  552. movups xmm0,[edx]
  553. movups xmm1,[16+edx]
  554. lea edx,[32+edx]
  555. xorps xmm2,xmm0
  556. L$030dec1_loop_4:
  557. db 102,15,56,222,209
  558. dec ecx
  559. movups xmm1,[edx]
  560. lea edx,[16+edx]
  561. jnz NEAR L$030dec1_loop_4
  562. db 102,15,56,223,209
  563. movups [edi],xmm2
  564. jmp NEAR L$013ecb_ret
  565. align 16
  566. L$027ecb_dec_two:
  567. call __aesni_decrypt2
  568. movups [edi],xmm2
  569. movups [16+edi],xmm3
  570. jmp NEAR L$013ecb_ret
  571. align 16
  572. L$028ecb_dec_three:
  573. call __aesni_decrypt3
  574. movups [edi],xmm2
  575. movups [16+edi],xmm3
  576. movups [32+edi],xmm4
  577. jmp NEAR L$013ecb_ret
  578. align 16
  579. L$029ecb_dec_four:
  580. call __aesni_decrypt4
  581. movups [edi],xmm2
  582. movups [16+edi],xmm3
  583. movups [32+edi],xmm4
  584. movups [48+edi],xmm5
  585. L$013ecb_ret:
  586. pxor xmm0,xmm0
  587. pxor xmm1,xmm1
  588. pxor xmm2,xmm2
  589. pxor xmm3,xmm3
  590. pxor xmm4,xmm4
  591. pxor xmm5,xmm5
  592. pxor xmm6,xmm6
  593. pxor xmm7,xmm7
  594. pop edi
  595. pop esi
  596. pop ebx
  597. pop ebp
  598. ret
  599. global _aes_hw_ccm64_encrypt_blocks
  600. align 16
  601. _aes_hw_ccm64_encrypt_blocks:
  602. L$_aes_hw_ccm64_encrypt_blocks_begin:
  603. push ebp
  604. push ebx
  605. push esi
  606. push edi
  607. mov esi,DWORD [20+esp]
  608. mov edi,DWORD [24+esp]
  609. mov eax,DWORD [28+esp]
  610. mov edx,DWORD [32+esp]
  611. mov ebx,DWORD [36+esp]
  612. mov ecx,DWORD [40+esp]
  613. mov ebp,esp
  614. sub esp,60
  615. and esp,-16
  616. mov DWORD [48+esp],ebp
  617. movdqu xmm7,[ebx]
  618. movdqu xmm3,[ecx]
  619. mov ecx,DWORD [240+edx]
  620. mov DWORD [esp],202182159
  621. mov DWORD [4+esp],134810123
  622. mov DWORD [8+esp],67438087
  623. mov DWORD [12+esp],66051
  624. mov ebx,1
  625. xor ebp,ebp
  626. mov DWORD [16+esp],ebx
  627. mov DWORD [20+esp],ebp
  628. mov DWORD [24+esp],ebp
  629. mov DWORD [28+esp],ebp
  630. shl ecx,4
  631. mov ebx,16
  632. lea ebp,[edx]
  633. movdqa xmm5,[esp]
  634. movdqa xmm2,xmm7
  635. lea edx,[32+ecx*1+edx]
  636. sub ebx,ecx
  637. db 102,15,56,0,253
  638. L$031ccm64_enc_outer:
  639. movups xmm0,[ebp]
  640. mov ecx,ebx
  641. movups xmm6,[esi]
  642. xorps xmm2,xmm0
  643. movups xmm1,[16+ebp]
  644. xorps xmm0,xmm6
  645. xorps xmm3,xmm0
  646. movups xmm0,[32+ebp]
  647. L$032ccm64_enc2_loop:
  648. db 102,15,56,220,209
  649. db 102,15,56,220,217
  650. movups xmm1,[ecx*1+edx]
  651. add ecx,32
  652. db 102,15,56,220,208
  653. db 102,15,56,220,216
  654. movups xmm0,[ecx*1+edx-16]
  655. jnz NEAR L$032ccm64_enc2_loop
  656. db 102,15,56,220,209
  657. db 102,15,56,220,217
  658. paddq xmm7,[16+esp]
  659. dec eax
  660. db 102,15,56,221,208
  661. db 102,15,56,221,216
  662. lea esi,[16+esi]
  663. xorps xmm6,xmm2
  664. movdqa xmm2,xmm7
  665. movups [edi],xmm6
  666. db 102,15,56,0,213
  667. lea edi,[16+edi]
  668. jnz NEAR L$031ccm64_enc_outer
  669. mov esp,DWORD [48+esp]
  670. mov edi,DWORD [40+esp]
  671. movups [edi],xmm3
  672. pxor xmm0,xmm0
  673. pxor xmm1,xmm1
  674. pxor xmm2,xmm2
  675. pxor xmm3,xmm3
  676. pxor xmm4,xmm4
  677. pxor xmm5,xmm5
  678. pxor xmm6,xmm6
  679. pxor xmm7,xmm7
  680. pop edi
  681. pop esi
  682. pop ebx
  683. pop ebp
  684. ret
  685. global _aes_hw_ccm64_decrypt_blocks
  686. align 16
  687. _aes_hw_ccm64_decrypt_blocks:
  688. L$_aes_hw_ccm64_decrypt_blocks_begin:
  689. push ebp
  690. push ebx
  691. push esi
  692. push edi
  693. mov esi,DWORD [20+esp]
  694. mov edi,DWORD [24+esp]
  695. mov eax,DWORD [28+esp]
  696. mov edx,DWORD [32+esp]
  697. mov ebx,DWORD [36+esp]
  698. mov ecx,DWORD [40+esp]
  699. mov ebp,esp
  700. sub esp,60
  701. and esp,-16
  702. mov DWORD [48+esp],ebp
  703. movdqu xmm7,[ebx]
  704. movdqu xmm3,[ecx]
  705. mov ecx,DWORD [240+edx]
  706. mov DWORD [esp],202182159
  707. mov DWORD [4+esp],134810123
  708. mov DWORD [8+esp],67438087
  709. mov DWORD [12+esp],66051
  710. mov ebx,1
  711. xor ebp,ebp
  712. mov DWORD [16+esp],ebx
  713. mov DWORD [20+esp],ebp
  714. mov DWORD [24+esp],ebp
  715. mov DWORD [28+esp],ebp
  716. movdqa xmm5,[esp]
  717. movdqa xmm2,xmm7
  718. mov ebp,edx
  719. mov ebx,ecx
  720. db 102,15,56,0,253
  721. movups xmm0,[edx]
  722. movups xmm1,[16+edx]
  723. lea edx,[32+edx]
  724. xorps xmm2,xmm0
  725. L$033enc1_loop_5:
  726. db 102,15,56,220,209
  727. dec ecx
  728. movups xmm1,[edx]
  729. lea edx,[16+edx]
  730. jnz NEAR L$033enc1_loop_5
  731. db 102,15,56,221,209
  732. shl ebx,4
  733. mov ecx,16
  734. movups xmm6,[esi]
  735. paddq xmm7,[16+esp]
  736. lea esi,[16+esi]
  737. sub ecx,ebx
  738. lea edx,[32+ebx*1+ebp]
  739. mov ebx,ecx
  740. jmp NEAR L$034ccm64_dec_outer
  741. align 16
  742. L$034ccm64_dec_outer:
  743. xorps xmm6,xmm2
  744. movdqa xmm2,xmm7
  745. movups [edi],xmm6
  746. lea edi,[16+edi]
  747. db 102,15,56,0,213
  748. sub eax,1
  749. jz NEAR L$035ccm64_dec_break
  750. movups xmm0,[ebp]
  751. mov ecx,ebx
  752. movups xmm1,[16+ebp]
  753. xorps xmm6,xmm0
  754. xorps xmm2,xmm0
  755. xorps xmm3,xmm6
  756. movups xmm0,[32+ebp]
  757. L$036ccm64_dec2_loop:
  758. db 102,15,56,220,209
  759. db 102,15,56,220,217
  760. movups xmm1,[ecx*1+edx]
  761. add ecx,32
  762. db 102,15,56,220,208
  763. db 102,15,56,220,216
  764. movups xmm0,[ecx*1+edx-16]
  765. jnz NEAR L$036ccm64_dec2_loop
  766. movups xmm6,[esi]
  767. paddq xmm7,[16+esp]
  768. db 102,15,56,220,209
  769. db 102,15,56,220,217
  770. db 102,15,56,221,208
  771. db 102,15,56,221,216
  772. lea esi,[16+esi]
  773. jmp NEAR L$034ccm64_dec_outer
  774. align 16
  775. L$035ccm64_dec_break:
  776. mov ecx,DWORD [240+ebp]
  777. mov edx,ebp
  778. movups xmm0,[edx]
  779. movups xmm1,[16+edx]
  780. xorps xmm6,xmm0
  781. lea edx,[32+edx]
  782. xorps xmm3,xmm6
  783. L$037enc1_loop_6:
  784. db 102,15,56,220,217
  785. dec ecx
  786. movups xmm1,[edx]
  787. lea edx,[16+edx]
  788. jnz NEAR L$037enc1_loop_6
  789. db 102,15,56,221,217
  790. mov esp,DWORD [48+esp]
  791. mov edi,DWORD [40+esp]
  792. movups [edi],xmm3
  793. pxor xmm0,xmm0
  794. pxor xmm1,xmm1
  795. pxor xmm2,xmm2
  796. pxor xmm3,xmm3
  797. pxor xmm4,xmm4
  798. pxor xmm5,xmm5
  799. pxor xmm6,xmm6
  800. pxor xmm7,xmm7
  801. pop edi
  802. pop esi
  803. pop ebx
  804. pop ebp
  805. ret
  806. global _aes_hw_ctr32_encrypt_blocks
  807. align 16
  808. _aes_hw_ctr32_encrypt_blocks:
  809. L$_aes_hw_ctr32_encrypt_blocks_begin:
  810. push ebp
  811. push ebx
  812. push esi
  813. push edi
  814. %ifdef BORINGSSL_DISPATCH_TEST
  815. push ebx
  816. push edx
  817. call L$038pic
  818. L$038pic:
  819. pop ebx
  820. lea ebx,[(_BORINGSSL_function_hit+0-L$038pic)+ebx]
  821. mov edx,1
  822. mov BYTE [ebx],dl
  823. pop edx
  824. pop ebx
  825. %endif
  826. mov esi,DWORD [20+esp]
  827. mov edi,DWORD [24+esp]
  828. mov eax,DWORD [28+esp]
  829. mov edx,DWORD [32+esp]
  830. mov ebx,DWORD [36+esp]
  831. mov ebp,esp
  832. sub esp,88
  833. and esp,-16
  834. mov DWORD [80+esp],ebp
  835. cmp eax,1
  836. je NEAR L$039ctr32_one_shortcut
  837. movdqu xmm7,[ebx]
  838. mov DWORD [esp],202182159
  839. mov DWORD [4+esp],134810123
  840. mov DWORD [8+esp],67438087
  841. mov DWORD [12+esp],66051
  842. mov ecx,6
  843. xor ebp,ebp
  844. mov DWORD [16+esp],ecx
  845. mov DWORD [20+esp],ecx
  846. mov DWORD [24+esp],ecx
  847. mov DWORD [28+esp],ebp
  848. db 102,15,58,22,251,3
  849. db 102,15,58,34,253,3
  850. mov ecx,DWORD [240+edx]
  851. bswap ebx
  852. pxor xmm0,xmm0
  853. pxor xmm1,xmm1
  854. movdqa xmm2,[esp]
  855. db 102,15,58,34,195,0
  856. lea ebp,[3+ebx]
  857. db 102,15,58,34,205,0
  858. inc ebx
  859. db 102,15,58,34,195,1
  860. inc ebp
  861. db 102,15,58,34,205,1
  862. inc ebx
  863. db 102,15,58,34,195,2
  864. inc ebp
  865. db 102,15,58,34,205,2
  866. movdqa [48+esp],xmm0
  867. db 102,15,56,0,194
  868. movdqu xmm6,[edx]
  869. movdqa [64+esp],xmm1
  870. db 102,15,56,0,202
  871. pshufd xmm2,xmm0,192
  872. pshufd xmm3,xmm0,128
  873. cmp eax,6
  874. jb NEAR L$040ctr32_tail
  875. pxor xmm7,xmm6
  876. shl ecx,4
  877. mov ebx,16
  878. movdqa [32+esp],xmm7
  879. mov ebp,edx
  880. sub ebx,ecx
  881. lea edx,[32+ecx*1+edx]
  882. sub eax,6
  883. jmp NEAR L$041ctr32_loop6
  884. align 16
  885. L$041ctr32_loop6:
  886. pshufd xmm4,xmm0,64
  887. movdqa xmm0,[32+esp]
  888. pshufd xmm5,xmm1,192
  889. pxor xmm2,xmm0
  890. pshufd xmm6,xmm1,128
  891. pxor xmm3,xmm0
  892. pshufd xmm7,xmm1,64
  893. movups xmm1,[16+ebp]
  894. pxor xmm4,xmm0
  895. pxor xmm5,xmm0
  896. db 102,15,56,220,209
  897. pxor xmm6,xmm0
  898. pxor xmm7,xmm0
  899. db 102,15,56,220,217
  900. movups xmm0,[32+ebp]
  901. mov ecx,ebx
  902. db 102,15,56,220,225
  903. db 102,15,56,220,233
  904. db 102,15,56,220,241
  905. db 102,15,56,220,249
  906. call L$_aesni_encrypt6_enter
  907. movups xmm1,[esi]
  908. movups xmm0,[16+esi]
  909. xorps xmm2,xmm1
  910. movups xmm1,[32+esi]
  911. xorps xmm3,xmm0
  912. movups [edi],xmm2
  913. movdqa xmm0,[16+esp]
  914. xorps xmm4,xmm1
  915. movdqa xmm1,[64+esp]
  916. movups [16+edi],xmm3
  917. movups [32+edi],xmm4
  918. paddd xmm1,xmm0
  919. paddd xmm0,[48+esp]
  920. movdqa xmm2,[esp]
  921. movups xmm3,[48+esi]
  922. movups xmm4,[64+esi]
  923. xorps xmm5,xmm3
  924. movups xmm3,[80+esi]
  925. lea esi,[96+esi]
  926. movdqa [48+esp],xmm0
  927. db 102,15,56,0,194
  928. xorps xmm6,xmm4
  929. movups [48+edi],xmm5
  930. xorps xmm7,xmm3
  931. movdqa [64+esp],xmm1
  932. db 102,15,56,0,202
  933. movups [64+edi],xmm6
  934. pshufd xmm2,xmm0,192
  935. movups [80+edi],xmm7
  936. lea edi,[96+edi]
  937. pshufd xmm3,xmm0,128
  938. sub eax,6
  939. jnc NEAR L$041ctr32_loop6
  940. add eax,6
  941. jz NEAR L$042ctr32_ret
  942. movdqu xmm7,[ebp]
  943. mov edx,ebp
  944. pxor xmm7,[32+esp]
  945. mov ecx,DWORD [240+ebp]
  946. L$040ctr32_tail:
  947. por xmm2,xmm7
  948. cmp eax,2
  949. jb NEAR L$043ctr32_one
  950. pshufd xmm4,xmm0,64
  951. por xmm3,xmm7
  952. je NEAR L$044ctr32_two
  953. pshufd xmm5,xmm1,192
  954. por xmm4,xmm7
  955. cmp eax,4
  956. jb NEAR L$045ctr32_three
  957. pshufd xmm6,xmm1,128
  958. por xmm5,xmm7
  959. je NEAR L$046ctr32_four
  960. por xmm6,xmm7
  961. call __aesni_encrypt6
  962. movups xmm1,[esi]
  963. movups xmm0,[16+esi]
  964. xorps xmm2,xmm1
  965. movups xmm1,[32+esi]
  966. xorps xmm3,xmm0
  967. movups xmm0,[48+esi]
  968. xorps xmm4,xmm1
  969. movups xmm1,[64+esi]
  970. xorps xmm5,xmm0
  971. movups [edi],xmm2
  972. xorps xmm6,xmm1
  973. movups [16+edi],xmm3
  974. movups [32+edi],xmm4
  975. movups [48+edi],xmm5
  976. movups [64+edi],xmm6
  977. jmp NEAR L$042ctr32_ret
  978. align 16
  979. L$039ctr32_one_shortcut:
  980. movups xmm2,[ebx]
  981. mov ecx,DWORD [240+edx]
  982. L$043ctr32_one:
  983. movups xmm0,[edx]
  984. movups xmm1,[16+edx]
  985. lea edx,[32+edx]
  986. xorps xmm2,xmm0
  987. L$047enc1_loop_7:
  988. db 102,15,56,220,209
  989. dec ecx
  990. movups xmm1,[edx]
  991. lea edx,[16+edx]
  992. jnz NEAR L$047enc1_loop_7
  993. db 102,15,56,221,209
  994. movups xmm6,[esi]
  995. xorps xmm6,xmm2
  996. movups [edi],xmm6
  997. jmp NEAR L$042ctr32_ret
  998. align 16
  999. L$044ctr32_two:
  1000. call __aesni_encrypt2
  1001. movups xmm5,[esi]
  1002. movups xmm6,[16+esi]
  1003. xorps xmm2,xmm5
  1004. xorps xmm3,xmm6
  1005. movups [edi],xmm2
  1006. movups [16+edi],xmm3
  1007. jmp NEAR L$042ctr32_ret
  1008. align 16
  1009. L$045ctr32_three:
  1010. call __aesni_encrypt3
  1011. movups xmm5,[esi]
  1012. movups xmm6,[16+esi]
  1013. xorps xmm2,xmm5
  1014. movups xmm7,[32+esi]
  1015. xorps xmm3,xmm6
  1016. movups [edi],xmm2
  1017. xorps xmm4,xmm7
  1018. movups [16+edi],xmm3
  1019. movups [32+edi],xmm4
  1020. jmp NEAR L$042ctr32_ret
  1021. align 16
  1022. L$046ctr32_four:
  1023. call __aesni_encrypt4
  1024. movups xmm6,[esi]
  1025. movups xmm7,[16+esi]
  1026. movups xmm1,[32+esi]
  1027. xorps xmm2,xmm6
  1028. movups xmm0,[48+esi]
  1029. xorps xmm3,xmm7
  1030. movups [edi],xmm2
  1031. xorps xmm4,xmm1
  1032. movups [16+edi],xmm3
  1033. xorps xmm5,xmm0
  1034. movups [32+edi],xmm4
  1035. movups [48+edi],xmm5
  1036. L$042ctr32_ret:
  1037. pxor xmm0,xmm0
  1038. pxor xmm1,xmm1
  1039. pxor xmm2,xmm2
  1040. pxor xmm3,xmm3
  1041. pxor xmm4,xmm4
  1042. movdqa [32+esp],xmm0
  1043. pxor xmm5,xmm5
  1044. movdqa [48+esp],xmm0
  1045. pxor xmm6,xmm6
  1046. movdqa [64+esp],xmm0
  1047. pxor xmm7,xmm7
  1048. mov esp,DWORD [80+esp]
  1049. pop edi
  1050. pop esi
  1051. pop ebx
  1052. pop ebp
  1053. ret
  1054. global _aes_hw_xts_encrypt
  1055. align 16
  1056. _aes_hw_xts_encrypt:
  1057. L$_aes_hw_xts_encrypt_begin:
  1058. push ebp
  1059. push ebx
  1060. push esi
  1061. push edi
  1062. mov edx,DWORD [36+esp]
  1063. mov esi,DWORD [40+esp]
  1064. mov ecx,DWORD [240+edx]
  1065. movups xmm2,[esi]
  1066. movups xmm0,[edx]
  1067. movups xmm1,[16+edx]
  1068. lea edx,[32+edx]
  1069. xorps xmm2,xmm0
  1070. L$048enc1_loop_8:
  1071. db 102,15,56,220,209
  1072. dec ecx
  1073. movups xmm1,[edx]
  1074. lea edx,[16+edx]
  1075. jnz NEAR L$048enc1_loop_8
  1076. db 102,15,56,221,209
  1077. mov esi,DWORD [20+esp]
  1078. mov edi,DWORD [24+esp]
  1079. mov eax,DWORD [28+esp]
  1080. mov edx,DWORD [32+esp]
  1081. mov ebp,esp
  1082. sub esp,120
  1083. mov ecx,DWORD [240+edx]
  1084. and esp,-16
  1085. mov DWORD [96+esp],135
  1086. mov DWORD [100+esp],0
  1087. mov DWORD [104+esp],1
  1088. mov DWORD [108+esp],0
  1089. mov DWORD [112+esp],eax
  1090. mov DWORD [116+esp],ebp
  1091. movdqa xmm1,xmm2
  1092. pxor xmm0,xmm0
  1093. movdqa xmm3,[96+esp]
  1094. pcmpgtd xmm0,xmm1
  1095. and eax,-16
  1096. mov ebp,edx
  1097. mov ebx,ecx
  1098. sub eax,96
  1099. jc NEAR L$049xts_enc_short
  1100. shl ecx,4
  1101. mov ebx,16
  1102. sub ebx,ecx
  1103. lea edx,[32+ecx*1+edx]
  1104. jmp NEAR L$050xts_enc_loop6
  1105. align 16
  1106. L$050xts_enc_loop6:
  1107. pshufd xmm2,xmm0,19
  1108. pxor xmm0,xmm0
  1109. movdqa [esp],xmm1
  1110. paddq xmm1,xmm1
  1111. pand xmm2,xmm3
  1112. pcmpgtd xmm0,xmm1
  1113. pxor xmm1,xmm2
  1114. pshufd xmm2,xmm0,19
  1115. pxor xmm0,xmm0
  1116. movdqa [16+esp],xmm1
  1117. paddq xmm1,xmm1
  1118. pand xmm2,xmm3
  1119. pcmpgtd xmm0,xmm1
  1120. pxor xmm1,xmm2
  1121. pshufd xmm2,xmm0,19
  1122. pxor xmm0,xmm0
  1123. movdqa [32+esp],xmm1
  1124. paddq xmm1,xmm1
  1125. pand xmm2,xmm3
  1126. pcmpgtd xmm0,xmm1
  1127. pxor xmm1,xmm2
  1128. pshufd xmm2,xmm0,19
  1129. pxor xmm0,xmm0
  1130. movdqa [48+esp],xmm1
  1131. paddq xmm1,xmm1
  1132. pand xmm2,xmm3
  1133. pcmpgtd xmm0,xmm1
  1134. pxor xmm1,xmm2
  1135. pshufd xmm7,xmm0,19
  1136. movdqa [64+esp],xmm1
  1137. paddq xmm1,xmm1
  1138. movups xmm0,[ebp]
  1139. pand xmm7,xmm3
  1140. movups xmm2,[esi]
  1141. pxor xmm7,xmm1
  1142. mov ecx,ebx
  1143. movdqu xmm3,[16+esi]
  1144. xorps xmm2,xmm0
  1145. movdqu xmm4,[32+esi]
  1146. pxor xmm3,xmm0
  1147. movdqu xmm5,[48+esi]
  1148. pxor xmm4,xmm0
  1149. movdqu xmm6,[64+esi]
  1150. pxor xmm5,xmm0
  1151. movdqu xmm1,[80+esi]
  1152. pxor xmm6,xmm0
  1153. lea esi,[96+esi]
  1154. pxor xmm2,[esp]
  1155. movdqa [80+esp],xmm7
  1156. pxor xmm7,xmm1
  1157. movups xmm1,[16+ebp]
  1158. pxor xmm3,[16+esp]
  1159. pxor xmm4,[32+esp]
  1160. db 102,15,56,220,209
  1161. pxor xmm5,[48+esp]
  1162. pxor xmm6,[64+esp]
  1163. db 102,15,56,220,217
  1164. pxor xmm7,xmm0
  1165. movups xmm0,[32+ebp]
  1166. db 102,15,56,220,225
  1167. db 102,15,56,220,233
  1168. db 102,15,56,220,241
  1169. db 102,15,56,220,249
  1170. call L$_aesni_encrypt6_enter
  1171. movdqa xmm1,[80+esp]
  1172. pxor xmm0,xmm0
  1173. xorps xmm2,[esp]
  1174. pcmpgtd xmm0,xmm1
  1175. xorps xmm3,[16+esp]
  1176. movups [edi],xmm2
  1177. xorps xmm4,[32+esp]
  1178. movups [16+edi],xmm3
  1179. xorps xmm5,[48+esp]
  1180. movups [32+edi],xmm4
  1181. xorps xmm6,[64+esp]
  1182. movups [48+edi],xmm5
  1183. xorps xmm7,xmm1
  1184. movups [64+edi],xmm6
  1185. pshufd xmm2,xmm0,19
  1186. movups [80+edi],xmm7
  1187. lea edi,[96+edi]
  1188. movdqa xmm3,[96+esp]
  1189. pxor xmm0,xmm0
  1190. paddq xmm1,xmm1
  1191. pand xmm2,xmm3
  1192. pcmpgtd xmm0,xmm1
  1193. pxor xmm1,xmm2
  1194. sub eax,96
  1195. jnc NEAR L$050xts_enc_loop6
  1196. mov ecx,DWORD [240+ebp]
  1197. mov edx,ebp
  1198. mov ebx,ecx
  1199. L$049xts_enc_short:
  1200. add eax,96
  1201. jz NEAR L$051xts_enc_done6x
  1202. movdqa xmm5,xmm1
  1203. cmp eax,32
  1204. jb NEAR L$052xts_enc_one
  1205. pshufd xmm2,xmm0,19
  1206. pxor xmm0,xmm0
  1207. paddq xmm1,xmm1
  1208. pand xmm2,xmm3
  1209. pcmpgtd xmm0,xmm1
  1210. pxor xmm1,xmm2
  1211. je NEAR L$053xts_enc_two
  1212. pshufd xmm2,xmm0,19
  1213. pxor xmm0,xmm0
  1214. movdqa xmm6,xmm1
  1215. paddq xmm1,xmm1
  1216. pand xmm2,xmm3
  1217. pcmpgtd xmm0,xmm1
  1218. pxor xmm1,xmm2
  1219. cmp eax,64
  1220. jb NEAR L$054xts_enc_three
  1221. pshufd xmm2,xmm0,19
  1222. pxor xmm0,xmm0
  1223. movdqa xmm7,xmm1
  1224. paddq xmm1,xmm1
  1225. pand xmm2,xmm3
  1226. pcmpgtd xmm0,xmm1
  1227. pxor xmm1,xmm2
  1228. movdqa [esp],xmm5
  1229. movdqa [16+esp],xmm6
  1230. je NEAR L$055xts_enc_four
  1231. movdqa [32+esp],xmm7
  1232. pshufd xmm7,xmm0,19
  1233. movdqa [48+esp],xmm1
  1234. paddq xmm1,xmm1
  1235. pand xmm7,xmm3
  1236. pxor xmm7,xmm1
  1237. movdqu xmm2,[esi]
  1238. movdqu xmm3,[16+esi]
  1239. movdqu xmm4,[32+esi]
  1240. pxor xmm2,[esp]
  1241. movdqu xmm5,[48+esi]
  1242. pxor xmm3,[16+esp]
  1243. movdqu xmm6,[64+esi]
  1244. pxor xmm4,[32+esp]
  1245. lea esi,[80+esi]
  1246. pxor xmm5,[48+esp]
  1247. movdqa [64+esp],xmm7
  1248. pxor xmm6,xmm7
  1249. call __aesni_encrypt6
  1250. movaps xmm1,[64+esp]
  1251. xorps xmm2,[esp]
  1252. xorps xmm3,[16+esp]
  1253. xorps xmm4,[32+esp]
  1254. movups [edi],xmm2
  1255. xorps xmm5,[48+esp]
  1256. movups [16+edi],xmm3
  1257. xorps xmm6,xmm1
  1258. movups [32+edi],xmm4
  1259. movups [48+edi],xmm5
  1260. movups [64+edi],xmm6
  1261. lea edi,[80+edi]
  1262. jmp NEAR L$056xts_enc_done
  1263. align 16
  1264. L$052xts_enc_one:
  1265. movups xmm2,[esi]
  1266. lea esi,[16+esi]
  1267. xorps xmm2,xmm5
  1268. movups xmm0,[edx]
  1269. movups xmm1,[16+edx]
  1270. lea edx,[32+edx]
  1271. xorps xmm2,xmm0
  1272. L$057enc1_loop_9:
  1273. db 102,15,56,220,209
  1274. dec ecx
  1275. movups xmm1,[edx]
  1276. lea edx,[16+edx]
  1277. jnz NEAR L$057enc1_loop_9
  1278. db 102,15,56,221,209
  1279. xorps xmm2,xmm5
  1280. movups [edi],xmm2
  1281. lea edi,[16+edi]
  1282. movdqa xmm1,xmm5
  1283. jmp NEAR L$056xts_enc_done
  1284. align 16
  1285. L$053xts_enc_two:
  1286. movaps xmm6,xmm1
  1287. movups xmm2,[esi]
  1288. movups xmm3,[16+esi]
  1289. lea esi,[32+esi]
  1290. xorps xmm2,xmm5
  1291. xorps xmm3,xmm6
  1292. call __aesni_encrypt2
  1293. xorps xmm2,xmm5
  1294. xorps xmm3,xmm6
  1295. movups [edi],xmm2
  1296. movups [16+edi],xmm3
  1297. lea edi,[32+edi]
  1298. movdqa xmm1,xmm6
  1299. jmp NEAR L$056xts_enc_done
  1300. align 16
  1301. L$054xts_enc_three:
  1302. movaps xmm7,xmm1
  1303. movups xmm2,[esi]
  1304. movups xmm3,[16+esi]
  1305. movups xmm4,[32+esi]
  1306. lea esi,[48+esi]
  1307. xorps xmm2,xmm5
  1308. xorps xmm3,xmm6
  1309. xorps xmm4,xmm7
  1310. call __aesni_encrypt3
  1311. xorps xmm2,xmm5
  1312. xorps xmm3,xmm6
  1313. xorps xmm4,xmm7
  1314. movups [edi],xmm2
  1315. movups [16+edi],xmm3
  1316. movups [32+edi],xmm4
  1317. lea edi,[48+edi]
  1318. movdqa xmm1,xmm7
  1319. jmp NEAR L$056xts_enc_done
  1320. align 16
  1321. L$055xts_enc_four:
  1322. movaps xmm6,xmm1
  1323. movups xmm2,[esi]
  1324. movups xmm3,[16+esi]
  1325. movups xmm4,[32+esi]
  1326. xorps xmm2,[esp]
  1327. movups xmm5,[48+esi]
  1328. lea esi,[64+esi]
  1329. xorps xmm3,[16+esp]
  1330. xorps xmm4,xmm7
  1331. xorps xmm5,xmm6
  1332. call __aesni_encrypt4
  1333. xorps xmm2,[esp]
  1334. xorps xmm3,[16+esp]
  1335. xorps xmm4,xmm7
  1336. movups [edi],xmm2
  1337. xorps xmm5,xmm6
  1338. movups [16+edi],xmm3
  1339. movups [32+edi],xmm4
  1340. movups [48+edi],xmm5
  1341. lea edi,[64+edi]
  1342. movdqa xmm1,xmm6
  1343. jmp NEAR L$056xts_enc_done
  1344. align 16
  1345. L$051xts_enc_done6x:
  1346. mov eax,DWORD [112+esp]
  1347. and eax,15
  1348. jz NEAR L$058xts_enc_ret
  1349. movdqa xmm5,xmm1
  1350. mov DWORD [112+esp],eax
  1351. jmp NEAR L$059xts_enc_steal
  1352. align 16
  1353. L$056xts_enc_done:
  1354. mov eax,DWORD [112+esp]
  1355. pxor xmm0,xmm0
  1356. and eax,15
  1357. jz NEAR L$058xts_enc_ret
  1358. pcmpgtd xmm0,xmm1
  1359. mov DWORD [112+esp],eax
  1360. pshufd xmm5,xmm0,19
  1361. paddq xmm1,xmm1
  1362. pand xmm5,[96+esp]
  1363. pxor xmm5,xmm1
  1364. L$059xts_enc_steal:
  1365. movzx ecx,BYTE [esi]
  1366. movzx edx,BYTE [edi-16]
  1367. lea esi,[1+esi]
  1368. mov BYTE [edi-16],cl
  1369. mov BYTE [edi],dl
  1370. lea edi,[1+edi]
  1371. sub eax,1
  1372. jnz NEAR L$059xts_enc_steal
  1373. sub edi,DWORD [112+esp]
  1374. mov edx,ebp
  1375. mov ecx,ebx
  1376. movups xmm2,[edi-16]
  1377. xorps xmm2,xmm5
  1378. movups xmm0,[edx]
  1379. movups xmm1,[16+edx]
  1380. lea edx,[32+edx]
  1381. xorps xmm2,xmm0
  1382. L$060enc1_loop_10:
  1383. db 102,15,56,220,209
  1384. dec ecx
  1385. movups xmm1,[edx]
  1386. lea edx,[16+edx]
  1387. jnz NEAR L$060enc1_loop_10
  1388. db 102,15,56,221,209
  1389. xorps xmm2,xmm5
  1390. movups [edi-16],xmm2
  1391. L$058xts_enc_ret:
  1392. pxor xmm0,xmm0
  1393. pxor xmm1,xmm1
  1394. pxor xmm2,xmm2
  1395. movdqa [esp],xmm0
  1396. pxor xmm3,xmm3
  1397. movdqa [16+esp],xmm0
  1398. pxor xmm4,xmm4
  1399. movdqa [32+esp],xmm0
  1400. pxor xmm5,xmm5
  1401. movdqa [48+esp],xmm0
  1402. pxor xmm6,xmm6
  1403. movdqa [64+esp],xmm0
  1404. pxor xmm7,xmm7
  1405. movdqa [80+esp],xmm0
  1406. mov esp,DWORD [116+esp]
  1407. pop edi
  1408. pop esi
  1409. pop ebx
  1410. pop ebp
  1411. ret
  1412. global _aes_hw_xts_decrypt
  1413. align 16
  1414. _aes_hw_xts_decrypt:
  1415. L$_aes_hw_xts_decrypt_begin:
  1416. push ebp
  1417. push ebx
  1418. push esi
  1419. push edi
  1420. mov edx,DWORD [36+esp]
  1421. mov esi,DWORD [40+esp]
  1422. mov ecx,DWORD [240+edx]
  1423. movups xmm2,[esi]
  1424. movups xmm0,[edx]
  1425. movups xmm1,[16+edx]
  1426. lea edx,[32+edx]
  1427. xorps xmm2,xmm0
  1428. L$061enc1_loop_11:
  1429. db 102,15,56,220,209
  1430. dec ecx
  1431. movups xmm1,[edx]
  1432. lea edx,[16+edx]
  1433. jnz NEAR L$061enc1_loop_11
  1434. db 102,15,56,221,209
  1435. mov esi,DWORD [20+esp]
  1436. mov edi,DWORD [24+esp]
  1437. mov eax,DWORD [28+esp]
  1438. mov edx,DWORD [32+esp]
  1439. mov ebp,esp
  1440. sub esp,120
  1441. and esp,-16
  1442. xor ebx,ebx
  1443. test eax,15
  1444. setnz bl
  1445. shl ebx,4
  1446. sub eax,ebx
  1447. mov DWORD [96+esp],135
  1448. mov DWORD [100+esp],0
  1449. mov DWORD [104+esp],1
  1450. mov DWORD [108+esp],0
  1451. mov DWORD [112+esp],eax
  1452. mov DWORD [116+esp],ebp
  1453. mov ecx,DWORD [240+edx]
  1454. mov ebp,edx
  1455. mov ebx,ecx
  1456. movdqa xmm1,xmm2
  1457. pxor xmm0,xmm0
  1458. movdqa xmm3,[96+esp]
  1459. pcmpgtd xmm0,xmm1
  1460. and eax,-16
  1461. sub eax,96
  1462. jc NEAR L$062xts_dec_short
  1463. shl ecx,4
  1464. mov ebx,16
  1465. sub ebx,ecx
  1466. lea edx,[32+ecx*1+edx]
  1467. jmp NEAR L$063xts_dec_loop6
  1468. align 16
  1469. L$063xts_dec_loop6:
  1470. pshufd xmm2,xmm0,19
  1471. pxor xmm0,xmm0
  1472. movdqa [esp],xmm1
  1473. paddq xmm1,xmm1
  1474. pand xmm2,xmm3
  1475. pcmpgtd xmm0,xmm1
  1476. pxor xmm1,xmm2
  1477. pshufd xmm2,xmm0,19
  1478. pxor xmm0,xmm0
  1479. movdqa [16+esp],xmm1
  1480. paddq xmm1,xmm1
  1481. pand xmm2,xmm3
  1482. pcmpgtd xmm0,xmm1
  1483. pxor xmm1,xmm2
  1484. pshufd xmm2,xmm0,19
  1485. pxor xmm0,xmm0
  1486. movdqa [32+esp],xmm1
  1487. paddq xmm1,xmm1
  1488. pand xmm2,xmm3
  1489. pcmpgtd xmm0,xmm1
  1490. pxor xmm1,xmm2
  1491. pshufd xmm2,xmm0,19
  1492. pxor xmm0,xmm0
  1493. movdqa [48+esp],xmm1
  1494. paddq xmm1,xmm1
  1495. pand xmm2,xmm3
  1496. pcmpgtd xmm0,xmm1
  1497. pxor xmm1,xmm2
  1498. pshufd xmm7,xmm0,19
  1499. movdqa [64+esp],xmm1
  1500. paddq xmm1,xmm1
  1501. movups xmm0,[ebp]
  1502. pand xmm7,xmm3
  1503. movups xmm2,[esi]
  1504. pxor xmm7,xmm1
  1505. mov ecx,ebx
  1506. movdqu xmm3,[16+esi]
  1507. xorps xmm2,xmm0
  1508. movdqu xmm4,[32+esi]
  1509. pxor xmm3,xmm0
  1510. movdqu xmm5,[48+esi]
  1511. pxor xmm4,xmm0
  1512. movdqu xmm6,[64+esi]
  1513. pxor xmm5,xmm0
  1514. movdqu xmm1,[80+esi]
  1515. pxor xmm6,xmm0
  1516. lea esi,[96+esi]
  1517. pxor xmm2,[esp]
  1518. movdqa [80+esp],xmm7
  1519. pxor xmm7,xmm1
  1520. movups xmm1,[16+ebp]
  1521. pxor xmm3,[16+esp]
  1522. pxor xmm4,[32+esp]
  1523. db 102,15,56,222,209
  1524. pxor xmm5,[48+esp]
  1525. pxor xmm6,[64+esp]
  1526. db 102,15,56,222,217
  1527. pxor xmm7,xmm0
  1528. movups xmm0,[32+ebp]
  1529. db 102,15,56,222,225
  1530. db 102,15,56,222,233
  1531. db 102,15,56,222,241
  1532. db 102,15,56,222,249
  1533. call L$_aesni_decrypt6_enter
  1534. movdqa xmm1,[80+esp]
  1535. pxor xmm0,xmm0
  1536. xorps xmm2,[esp]
  1537. pcmpgtd xmm0,xmm1
  1538. xorps xmm3,[16+esp]
  1539. movups [edi],xmm2
  1540. xorps xmm4,[32+esp]
  1541. movups [16+edi],xmm3
  1542. xorps xmm5,[48+esp]
  1543. movups [32+edi],xmm4
  1544. xorps xmm6,[64+esp]
  1545. movups [48+edi],xmm5
  1546. xorps xmm7,xmm1
  1547. movups [64+edi],xmm6
  1548. pshufd xmm2,xmm0,19
  1549. movups [80+edi],xmm7
  1550. lea edi,[96+edi]
  1551. movdqa xmm3,[96+esp]
  1552. pxor xmm0,xmm0
  1553. paddq xmm1,xmm1
  1554. pand xmm2,xmm3
  1555. pcmpgtd xmm0,xmm1
  1556. pxor xmm1,xmm2
  1557. sub eax,96
  1558. jnc NEAR L$063xts_dec_loop6
  1559. mov ecx,DWORD [240+ebp]
  1560. mov edx,ebp
  1561. mov ebx,ecx
  1562. L$062xts_dec_short:
  1563. add eax,96
  1564. jz NEAR L$064xts_dec_done6x
  1565. movdqa xmm5,xmm1
  1566. cmp eax,32
  1567. jb NEAR L$065xts_dec_one
  1568. pshufd xmm2,xmm0,19
  1569. pxor xmm0,xmm0
  1570. paddq xmm1,xmm1
  1571. pand xmm2,xmm3
  1572. pcmpgtd xmm0,xmm1
  1573. pxor xmm1,xmm2
  1574. je NEAR L$066xts_dec_two
  1575. pshufd xmm2,xmm0,19
  1576. pxor xmm0,xmm0
  1577. movdqa xmm6,xmm1
  1578. paddq xmm1,xmm1
  1579. pand xmm2,xmm3
  1580. pcmpgtd xmm0,xmm1
  1581. pxor xmm1,xmm2
  1582. cmp eax,64
  1583. jb NEAR L$067xts_dec_three
  1584. pshufd xmm2,xmm0,19
  1585. pxor xmm0,xmm0
  1586. movdqa xmm7,xmm1
  1587. paddq xmm1,xmm1
  1588. pand xmm2,xmm3
  1589. pcmpgtd xmm0,xmm1
  1590. pxor xmm1,xmm2
  1591. movdqa [esp],xmm5
  1592. movdqa [16+esp],xmm6
  1593. je NEAR L$068xts_dec_four
  1594. movdqa [32+esp],xmm7
  1595. pshufd xmm7,xmm0,19
  1596. movdqa [48+esp],xmm1
  1597. paddq xmm1,xmm1
  1598. pand xmm7,xmm3
  1599. pxor xmm7,xmm1
  1600. movdqu xmm2,[esi]
  1601. movdqu xmm3,[16+esi]
  1602. movdqu xmm4,[32+esi]
  1603. pxor xmm2,[esp]
  1604. movdqu xmm5,[48+esi]
  1605. pxor xmm3,[16+esp]
  1606. movdqu xmm6,[64+esi]
  1607. pxor xmm4,[32+esp]
  1608. lea esi,[80+esi]
  1609. pxor xmm5,[48+esp]
  1610. movdqa [64+esp],xmm7
  1611. pxor xmm6,xmm7
  1612. call __aesni_decrypt6
  1613. movaps xmm1,[64+esp]
  1614. xorps xmm2,[esp]
  1615. xorps xmm3,[16+esp]
  1616. xorps xmm4,[32+esp]
  1617. movups [edi],xmm2
  1618. xorps xmm5,[48+esp]
  1619. movups [16+edi],xmm3
  1620. xorps xmm6,xmm1
  1621. movups [32+edi],xmm4
  1622. movups [48+edi],xmm5
  1623. movups [64+edi],xmm6
  1624. lea edi,[80+edi]
  1625. jmp NEAR L$069xts_dec_done
  1626. align 16
  1627. L$065xts_dec_one:
  1628. movups xmm2,[esi]
  1629. lea esi,[16+esi]
  1630. xorps xmm2,xmm5
  1631. movups xmm0,[edx]
  1632. movups xmm1,[16+edx]
  1633. lea edx,[32+edx]
  1634. xorps xmm2,xmm0
  1635. L$070dec1_loop_12:
  1636. db 102,15,56,222,209
  1637. dec ecx
  1638. movups xmm1,[edx]
  1639. lea edx,[16+edx]
  1640. jnz NEAR L$070dec1_loop_12
  1641. db 102,15,56,223,209
  1642. xorps xmm2,xmm5
  1643. movups [edi],xmm2
  1644. lea edi,[16+edi]
  1645. movdqa xmm1,xmm5
  1646. jmp NEAR L$069xts_dec_done
  1647. align 16
  1648. L$066xts_dec_two:
  1649. movaps xmm6,xmm1
  1650. movups xmm2,[esi]
  1651. movups xmm3,[16+esi]
  1652. lea esi,[32+esi]
  1653. xorps xmm2,xmm5
  1654. xorps xmm3,xmm6
  1655. call __aesni_decrypt2
  1656. xorps xmm2,xmm5
  1657. xorps xmm3,xmm6
  1658. movups [edi],xmm2
  1659. movups [16+edi],xmm3
  1660. lea edi,[32+edi]
  1661. movdqa xmm1,xmm6
  1662. jmp NEAR L$069xts_dec_done
  1663. align 16
  1664. L$067xts_dec_three:
  1665. movaps xmm7,xmm1
  1666. movups xmm2,[esi]
  1667. movups xmm3,[16+esi]
  1668. movups xmm4,[32+esi]
  1669. lea esi,[48+esi]
  1670. xorps xmm2,xmm5
  1671. xorps xmm3,xmm6
  1672. xorps xmm4,xmm7
  1673. call __aesni_decrypt3
  1674. xorps xmm2,xmm5
  1675. xorps xmm3,xmm6
  1676. xorps xmm4,xmm7
  1677. movups [edi],xmm2
  1678. movups [16+edi],xmm3
  1679. movups [32+edi],xmm4
  1680. lea edi,[48+edi]
  1681. movdqa xmm1,xmm7
  1682. jmp NEAR L$069xts_dec_done
  1683. align 16
  1684. L$068xts_dec_four:
  1685. movaps xmm6,xmm1
  1686. movups xmm2,[esi]
  1687. movups xmm3,[16+esi]
  1688. movups xmm4,[32+esi]
  1689. xorps xmm2,[esp]
  1690. movups xmm5,[48+esi]
  1691. lea esi,[64+esi]
  1692. xorps xmm3,[16+esp]
  1693. xorps xmm4,xmm7
  1694. xorps xmm5,xmm6
  1695. call __aesni_decrypt4
  1696. xorps xmm2,[esp]
  1697. xorps xmm3,[16+esp]
  1698. xorps xmm4,xmm7
  1699. movups [edi],xmm2
  1700. xorps xmm5,xmm6
  1701. movups [16+edi],xmm3
  1702. movups [32+edi],xmm4
  1703. movups [48+edi],xmm5
  1704. lea edi,[64+edi]
  1705. movdqa xmm1,xmm6
  1706. jmp NEAR L$069xts_dec_done
  1707. align 16
  1708. L$064xts_dec_done6x:
  1709. mov eax,DWORD [112+esp]
  1710. and eax,15
  1711. jz NEAR L$071xts_dec_ret
  1712. mov DWORD [112+esp],eax
  1713. jmp NEAR L$072xts_dec_only_one_more
  1714. align 16
  1715. L$069xts_dec_done:
  1716. mov eax,DWORD [112+esp]
  1717. pxor xmm0,xmm0
  1718. and eax,15
  1719. jz NEAR L$071xts_dec_ret
  1720. pcmpgtd xmm0,xmm1
  1721. mov DWORD [112+esp],eax
  1722. pshufd xmm2,xmm0,19
  1723. pxor xmm0,xmm0
  1724. movdqa xmm3,[96+esp]
  1725. paddq xmm1,xmm1
  1726. pand xmm2,xmm3
  1727. pcmpgtd xmm0,xmm1
  1728. pxor xmm1,xmm2
  1729. L$072xts_dec_only_one_more:
  1730. pshufd xmm5,xmm0,19
  1731. movdqa xmm6,xmm1
  1732. paddq xmm1,xmm1
  1733. pand xmm5,xmm3
  1734. pxor xmm5,xmm1
  1735. mov edx,ebp
  1736. mov ecx,ebx
  1737. movups xmm2,[esi]
  1738. xorps xmm2,xmm5
  1739. movups xmm0,[edx]
  1740. movups xmm1,[16+edx]
  1741. lea edx,[32+edx]
  1742. xorps xmm2,xmm0
  1743. L$073dec1_loop_13:
  1744. db 102,15,56,222,209
  1745. dec ecx
  1746. movups xmm1,[edx]
  1747. lea edx,[16+edx]
  1748. jnz NEAR L$073dec1_loop_13
  1749. db 102,15,56,223,209
  1750. xorps xmm2,xmm5
  1751. movups [edi],xmm2
  1752. L$074xts_dec_steal:
  1753. movzx ecx,BYTE [16+esi]
  1754. movzx edx,BYTE [edi]
  1755. lea esi,[1+esi]
  1756. mov BYTE [edi],cl
  1757. mov BYTE [16+edi],dl
  1758. lea edi,[1+edi]
  1759. sub eax,1
  1760. jnz NEAR L$074xts_dec_steal
  1761. sub edi,DWORD [112+esp]
  1762. mov edx,ebp
  1763. mov ecx,ebx
  1764. movups xmm2,[edi]
  1765. xorps xmm2,xmm6
  1766. movups xmm0,[edx]
  1767. movups xmm1,[16+edx]
  1768. lea edx,[32+edx]
  1769. xorps xmm2,xmm0
  1770. L$075dec1_loop_14:
  1771. db 102,15,56,222,209
  1772. dec ecx
  1773. movups xmm1,[edx]
  1774. lea edx,[16+edx]
  1775. jnz NEAR L$075dec1_loop_14
  1776. db 102,15,56,223,209
  1777. xorps xmm2,xmm6
  1778. movups [edi],xmm2
  1779. L$071xts_dec_ret:
  1780. pxor xmm0,xmm0
  1781. pxor xmm1,xmm1
  1782. pxor xmm2,xmm2
  1783. movdqa [esp],xmm0
  1784. pxor xmm3,xmm3
  1785. movdqa [16+esp],xmm0
  1786. pxor xmm4,xmm4
  1787. movdqa [32+esp],xmm0
  1788. pxor xmm5,xmm5
  1789. movdqa [48+esp],xmm0
  1790. pxor xmm6,xmm6
  1791. movdqa [64+esp],xmm0
  1792. pxor xmm7,xmm7
  1793. movdqa [80+esp],xmm0
  1794. mov esp,DWORD [116+esp]
  1795. pop edi
  1796. pop esi
  1797. pop ebx
  1798. pop ebp
  1799. ret
  1800. global _aes_hw_cbc_encrypt
  1801. align 16
  1802. _aes_hw_cbc_encrypt:
  1803. L$_aes_hw_cbc_encrypt_begin:
  1804. push ebp
  1805. push ebx
  1806. push esi
  1807. push edi
  1808. mov esi,DWORD [20+esp]
  1809. mov ebx,esp
  1810. mov edi,DWORD [24+esp]
  1811. sub ebx,24
  1812. mov eax,DWORD [28+esp]
  1813. and ebx,-16
  1814. mov edx,DWORD [32+esp]
  1815. mov ebp,DWORD [36+esp]
  1816. test eax,eax
  1817. jz NEAR L$076cbc_abort
  1818. cmp DWORD [40+esp],0
  1819. xchg ebx,esp
  1820. movups xmm7,[ebp]
  1821. mov ecx,DWORD [240+edx]
  1822. mov ebp,edx
  1823. mov DWORD [16+esp],ebx
  1824. mov ebx,ecx
  1825. je NEAR L$077cbc_decrypt
  1826. movaps xmm2,xmm7
  1827. cmp eax,16
  1828. jb NEAR L$078cbc_enc_tail
  1829. sub eax,16
  1830. jmp NEAR L$079cbc_enc_loop
  1831. align 16
  1832. L$079cbc_enc_loop:
  1833. movups xmm7,[esi]
  1834. lea esi,[16+esi]
  1835. movups xmm0,[edx]
  1836. movups xmm1,[16+edx]
  1837. xorps xmm7,xmm0
  1838. lea edx,[32+edx]
  1839. xorps xmm2,xmm7
  1840. L$080enc1_loop_15:
  1841. db 102,15,56,220,209
  1842. dec ecx
  1843. movups xmm1,[edx]
  1844. lea edx,[16+edx]
  1845. jnz NEAR L$080enc1_loop_15
  1846. db 102,15,56,221,209
  1847. mov ecx,ebx
  1848. mov edx,ebp
  1849. movups [edi],xmm2
  1850. lea edi,[16+edi]
  1851. sub eax,16
  1852. jnc NEAR L$079cbc_enc_loop
  1853. add eax,16
  1854. jnz NEAR L$078cbc_enc_tail
  1855. movaps xmm7,xmm2
  1856. pxor xmm2,xmm2
  1857. jmp NEAR L$081cbc_ret
  1858. L$078cbc_enc_tail:
  1859. mov ecx,eax
  1860. dd 2767451785
  1861. mov ecx,16
  1862. sub ecx,eax
  1863. xor eax,eax
  1864. dd 2868115081
  1865. lea edi,[edi-16]
  1866. mov ecx,ebx
  1867. mov esi,edi
  1868. mov edx,ebp
  1869. jmp NEAR L$079cbc_enc_loop
  1870. align 16
  1871. L$077cbc_decrypt:
  1872. cmp eax,80
  1873. jbe NEAR L$082cbc_dec_tail
  1874. movaps [esp],xmm7
  1875. sub eax,80
  1876. jmp NEAR L$083cbc_dec_loop6_enter
  1877. align 16
  1878. L$084cbc_dec_loop6:
  1879. movaps [esp],xmm0
  1880. movups [edi],xmm7
  1881. lea edi,[16+edi]
  1882. L$083cbc_dec_loop6_enter:
  1883. movdqu xmm2,[esi]
  1884. movdqu xmm3,[16+esi]
  1885. movdqu xmm4,[32+esi]
  1886. movdqu xmm5,[48+esi]
  1887. movdqu xmm6,[64+esi]
  1888. movdqu xmm7,[80+esi]
  1889. call __aesni_decrypt6
  1890. movups xmm1,[esi]
  1891. movups xmm0,[16+esi]
  1892. xorps xmm2,[esp]
  1893. xorps xmm3,xmm1
  1894. movups xmm1,[32+esi]
  1895. xorps xmm4,xmm0
  1896. movups xmm0,[48+esi]
  1897. xorps xmm5,xmm1
  1898. movups xmm1,[64+esi]
  1899. xorps xmm6,xmm0
  1900. movups xmm0,[80+esi]
  1901. xorps xmm7,xmm1
  1902. movups [edi],xmm2
  1903. movups [16+edi],xmm3
  1904. lea esi,[96+esi]
  1905. movups [32+edi],xmm4
  1906. mov ecx,ebx
  1907. movups [48+edi],xmm5
  1908. mov edx,ebp
  1909. movups [64+edi],xmm6
  1910. lea edi,[80+edi]
  1911. sub eax,96
  1912. ja NEAR L$084cbc_dec_loop6
  1913. movaps xmm2,xmm7
  1914. movaps xmm7,xmm0
  1915. add eax,80
  1916. jle NEAR L$085cbc_dec_clear_tail_collected
  1917. movups [edi],xmm2
  1918. lea edi,[16+edi]
  1919. L$082cbc_dec_tail:
  1920. movups xmm2,[esi]
  1921. movaps xmm6,xmm2
  1922. cmp eax,16
  1923. jbe NEAR L$086cbc_dec_one
  1924. movups xmm3,[16+esi]
  1925. movaps xmm5,xmm3
  1926. cmp eax,32
  1927. jbe NEAR L$087cbc_dec_two
  1928. movups xmm4,[32+esi]
  1929. cmp eax,48
  1930. jbe NEAR L$088cbc_dec_three
  1931. movups xmm5,[48+esi]
  1932. cmp eax,64
  1933. jbe NEAR L$089cbc_dec_four
  1934. movups xmm6,[64+esi]
  1935. movaps [esp],xmm7
  1936. movups xmm2,[esi]
  1937. xorps xmm7,xmm7
  1938. call __aesni_decrypt6
  1939. movups xmm1,[esi]
  1940. movups xmm0,[16+esi]
  1941. xorps xmm2,[esp]
  1942. xorps xmm3,xmm1
  1943. movups xmm1,[32+esi]
  1944. xorps xmm4,xmm0
  1945. movups xmm0,[48+esi]
  1946. xorps xmm5,xmm1
  1947. movups xmm7,[64+esi]
  1948. xorps xmm6,xmm0
  1949. movups [edi],xmm2
  1950. movups [16+edi],xmm3
  1951. pxor xmm3,xmm3
  1952. movups [32+edi],xmm4
  1953. pxor xmm4,xmm4
  1954. movups [48+edi],xmm5
  1955. pxor xmm5,xmm5
  1956. lea edi,[64+edi]
  1957. movaps xmm2,xmm6
  1958. pxor xmm6,xmm6
  1959. sub eax,80
  1960. jmp NEAR L$090cbc_dec_tail_collected
  1961. align 16
  1962. L$086cbc_dec_one:
  1963. movups xmm0,[edx]
  1964. movups xmm1,[16+edx]
  1965. lea edx,[32+edx]
  1966. xorps xmm2,xmm0
  1967. L$091dec1_loop_16:
  1968. db 102,15,56,222,209
  1969. dec ecx
  1970. movups xmm1,[edx]
  1971. lea edx,[16+edx]
  1972. jnz NEAR L$091dec1_loop_16
  1973. db 102,15,56,223,209
  1974. xorps xmm2,xmm7
  1975. movaps xmm7,xmm6
  1976. sub eax,16
  1977. jmp NEAR L$090cbc_dec_tail_collected
  1978. align 16
  1979. L$087cbc_dec_two:
  1980. call __aesni_decrypt2
  1981. xorps xmm2,xmm7
  1982. xorps xmm3,xmm6
  1983. movups [edi],xmm2
  1984. movaps xmm2,xmm3
  1985. pxor xmm3,xmm3
  1986. lea edi,[16+edi]
  1987. movaps xmm7,xmm5
  1988. sub eax,32
  1989. jmp NEAR L$090cbc_dec_tail_collected
  1990. align 16
  1991. L$088cbc_dec_three:
  1992. call __aesni_decrypt3
  1993. xorps xmm2,xmm7
  1994. xorps xmm3,xmm6
  1995. xorps xmm4,xmm5
  1996. movups [edi],xmm2
  1997. movaps xmm2,xmm4
  1998. pxor xmm4,xmm4
  1999. movups [16+edi],xmm3
  2000. pxor xmm3,xmm3
  2001. lea edi,[32+edi]
  2002. movups xmm7,[32+esi]
  2003. sub eax,48
  2004. jmp NEAR L$090cbc_dec_tail_collected
  2005. align 16
  2006. L$089cbc_dec_four:
  2007. call __aesni_decrypt4
  2008. movups xmm1,[16+esi]
  2009. movups xmm0,[32+esi]
  2010. xorps xmm2,xmm7
  2011. movups xmm7,[48+esi]
  2012. xorps xmm3,xmm6
  2013. movups [edi],xmm2
  2014. xorps xmm4,xmm1
  2015. movups [16+edi],xmm3
  2016. pxor xmm3,xmm3
  2017. xorps xmm5,xmm0
  2018. movups [32+edi],xmm4
  2019. pxor xmm4,xmm4
  2020. lea edi,[48+edi]
  2021. movaps xmm2,xmm5
  2022. pxor xmm5,xmm5
  2023. sub eax,64
  2024. jmp NEAR L$090cbc_dec_tail_collected
  2025. align 16
  2026. L$085cbc_dec_clear_tail_collected:
  2027. pxor xmm3,xmm3
  2028. pxor xmm4,xmm4
  2029. pxor xmm5,xmm5
  2030. pxor xmm6,xmm6
  2031. L$090cbc_dec_tail_collected:
  2032. and eax,15
  2033. jnz NEAR L$092cbc_dec_tail_partial
  2034. movups [edi],xmm2
  2035. pxor xmm0,xmm0
  2036. jmp NEAR L$081cbc_ret
  2037. align 16
  2038. L$092cbc_dec_tail_partial:
  2039. movaps [esp],xmm2
  2040. pxor xmm0,xmm0
  2041. mov ecx,16
  2042. mov esi,esp
  2043. sub ecx,eax
  2044. dd 2767451785
  2045. movdqa [esp],xmm2
  2046. L$081cbc_ret:
  2047. mov esp,DWORD [16+esp]
  2048. mov ebp,DWORD [36+esp]
  2049. pxor xmm2,xmm2
  2050. pxor xmm1,xmm1
  2051. movups [ebp],xmm7
  2052. pxor xmm7,xmm7
  2053. L$076cbc_abort:
  2054. pop edi
  2055. pop esi
  2056. pop ebx
  2057. pop ebp
  2058. ret
  2059. align 16
  2060. __aesni_set_encrypt_key:
  2061. push ebp
  2062. push ebx
  2063. test eax,eax
  2064. jz NEAR L$093bad_pointer
  2065. test edx,edx
  2066. jz NEAR L$093bad_pointer
  2067. call L$094pic
  2068. L$094pic:
  2069. pop ebx
  2070. lea ebx,[(L$key_const-L$094pic)+ebx]
  2071. lea ebp,[_OPENSSL_ia32cap_P]
  2072. movups xmm0,[eax]
  2073. xorps xmm4,xmm4
  2074. mov ebp,DWORD [4+ebp]
  2075. lea edx,[16+edx]
  2076. and ebp,268437504
  2077. cmp ecx,256
  2078. je NEAR L$09514rounds
  2079. cmp ecx,192
  2080. je NEAR L$09612rounds
  2081. cmp ecx,128
  2082. jne NEAR L$097bad_keybits
  2083. align 16
  2084. L$09810rounds:
  2085. cmp ebp,268435456
  2086. je NEAR L$09910rounds_alt
  2087. mov ecx,9
  2088. movups [edx-16],xmm0
  2089. db 102,15,58,223,200,1
  2090. call L$100key_128_cold
  2091. db 102,15,58,223,200,2
  2092. call L$101key_128
  2093. db 102,15,58,223,200,4
  2094. call L$101key_128
  2095. db 102,15,58,223,200,8
  2096. call L$101key_128
  2097. db 102,15,58,223,200,16
  2098. call L$101key_128
  2099. db 102,15,58,223,200,32
  2100. call L$101key_128
  2101. db 102,15,58,223,200,64
  2102. call L$101key_128
  2103. db 102,15,58,223,200,128
  2104. call L$101key_128
  2105. db 102,15,58,223,200,27
  2106. call L$101key_128
  2107. db 102,15,58,223,200,54
  2108. call L$101key_128
  2109. movups [edx],xmm0
  2110. mov DWORD [80+edx],ecx
  2111. jmp NEAR L$102good_key
  2112. align 16
  2113. L$101key_128:
  2114. movups [edx],xmm0
  2115. lea edx,[16+edx]
  2116. L$100key_128_cold:
  2117. shufps xmm4,xmm0,16
  2118. xorps xmm0,xmm4
  2119. shufps xmm4,xmm0,140
  2120. xorps xmm0,xmm4
  2121. shufps xmm1,xmm1,255
  2122. xorps xmm0,xmm1
  2123. ret
  2124. align 16
  2125. L$09910rounds_alt:
  2126. movdqa xmm5,[ebx]
  2127. mov ecx,8
  2128. movdqa xmm4,[32+ebx]
  2129. movdqa xmm2,xmm0
  2130. movdqu [edx-16],xmm0
  2131. L$103loop_key128:
  2132. db 102,15,56,0,197
  2133. db 102,15,56,221,196
  2134. pslld xmm4,1
  2135. lea edx,[16+edx]
  2136. movdqa xmm3,xmm2
  2137. pslldq xmm2,4
  2138. pxor xmm3,xmm2
  2139. pslldq xmm2,4
  2140. pxor xmm3,xmm2
  2141. pslldq xmm2,4
  2142. pxor xmm2,xmm3
  2143. pxor xmm0,xmm2
  2144. movdqu [edx-16],xmm0
  2145. movdqa xmm2,xmm0
  2146. dec ecx
  2147. jnz NEAR L$103loop_key128
  2148. movdqa xmm4,[48+ebx]
  2149. db 102,15,56,0,197
  2150. db 102,15,56,221,196
  2151. pslld xmm4,1
  2152. movdqa xmm3,xmm2
  2153. pslldq xmm2,4
  2154. pxor xmm3,xmm2
  2155. pslldq xmm2,4
  2156. pxor xmm3,xmm2
  2157. pslldq xmm2,4
  2158. pxor xmm2,xmm3
  2159. pxor xmm0,xmm2
  2160. movdqu [edx],xmm0
  2161. movdqa xmm2,xmm0
  2162. db 102,15,56,0,197
  2163. db 102,15,56,221,196
  2164. movdqa xmm3,xmm2
  2165. pslldq xmm2,4
  2166. pxor xmm3,xmm2
  2167. pslldq xmm2,4
  2168. pxor xmm3,xmm2
  2169. pslldq xmm2,4
  2170. pxor xmm2,xmm3
  2171. pxor xmm0,xmm2
  2172. movdqu [16+edx],xmm0
  2173. mov ecx,9
  2174. mov DWORD [96+edx],ecx
  2175. jmp NEAR L$102good_key
  2176. align 16
  2177. L$09612rounds:
  2178. movq xmm2,[16+eax]
  2179. cmp ebp,268435456
  2180. je NEAR L$10412rounds_alt
  2181. mov ecx,11
  2182. movups [edx-16],xmm0
  2183. db 102,15,58,223,202,1
  2184. call L$105key_192a_cold
  2185. db 102,15,58,223,202,2
  2186. call L$106key_192b
  2187. db 102,15,58,223,202,4
  2188. call L$107key_192a
  2189. db 102,15,58,223,202,8
  2190. call L$106key_192b
  2191. db 102,15,58,223,202,16
  2192. call L$107key_192a
  2193. db 102,15,58,223,202,32
  2194. call L$106key_192b
  2195. db 102,15,58,223,202,64
  2196. call L$107key_192a
  2197. db 102,15,58,223,202,128
  2198. call L$106key_192b
  2199. movups [edx],xmm0
  2200. mov DWORD [48+edx],ecx
  2201. jmp NEAR L$102good_key
  2202. align 16
  2203. L$107key_192a:
  2204. movups [edx],xmm0
  2205. lea edx,[16+edx]
  2206. align 16
  2207. L$105key_192a_cold:
  2208. movaps xmm5,xmm2
  2209. L$108key_192b_warm:
  2210. shufps xmm4,xmm0,16
  2211. movdqa xmm3,xmm2
  2212. xorps xmm0,xmm4
  2213. shufps xmm4,xmm0,140
  2214. pslldq xmm3,4
  2215. xorps xmm0,xmm4
  2216. pshufd xmm1,xmm1,85
  2217. pxor xmm2,xmm3
  2218. pxor xmm0,xmm1
  2219. pshufd xmm3,xmm0,255
  2220. pxor xmm2,xmm3
  2221. ret
  2222. align 16
  2223. L$106key_192b:
  2224. movaps xmm3,xmm0
  2225. shufps xmm5,xmm0,68
  2226. movups [edx],xmm5
  2227. shufps xmm3,xmm2,78
  2228. movups [16+edx],xmm3
  2229. lea edx,[32+edx]
  2230. jmp NEAR L$108key_192b_warm
  2231. align 16
  2232. L$10412rounds_alt:
  2233. movdqa xmm5,[16+ebx]
  2234. movdqa xmm4,[32+ebx]
  2235. mov ecx,8
  2236. movdqu [edx-16],xmm0
  2237. L$109loop_key192:
  2238. movq [edx],xmm2
  2239. movdqa xmm1,xmm2
  2240. db 102,15,56,0,213
  2241. db 102,15,56,221,212
  2242. pslld xmm4,1
  2243. lea edx,[24+edx]
  2244. movdqa xmm3,xmm0
  2245. pslldq xmm0,4
  2246. pxor xmm3,xmm0
  2247. pslldq xmm0,4
  2248. pxor xmm3,xmm0
  2249. pslldq xmm0,4
  2250. pxor xmm0,xmm3
  2251. pshufd xmm3,xmm0,255
  2252. pxor xmm3,xmm1
  2253. pslldq xmm1,4
  2254. pxor xmm3,xmm1
  2255. pxor xmm0,xmm2
  2256. pxor xmm2,xmm3
  2257. movdqu [edx-16],xmm0
  2258. dec ecx
  2259. jnz NEAR L$109loop_key192
  2260. mov ecx,11
  2261. mov DWORD [32+edx],ecx
  2262. jmp NEAR L$102good_key
  2263. align 16
  2264. L$09514rounds:
  2265. movups xmm2,[16+eax]
  2266. lea edx,[16+edx]
  2267. cmp ebp,268435456
  2268. je NEAR L$11014rounds_alt
  2269. mov ecx,13
  2270. movups [edx-32],xmm0
  2271. movups [edx-16],xmm2
  2272. db 102,15,58,223,202,1
  2273. call L$111key_256a_cold
  2274. db 102,15,58,223,200,1
  2275. call L$112key_256b
  2276. db 102,15,58,223,202,2
  2277. call L$113key_256a
  2278. db 102,15,58,223,200,2
  2279. call L$112key_256b
  2280. db 102,15,58,223,202,4
  2281. call L$113key_256a
  2282. db 102,15,58,223,200,4
  2283. call L$112key_256b
  2284. db 102,15,58,223,202,8
  2285. call L$113key_256a
  2286. db 102,15,58,223,200,8
  2287. call L$112key_256b
  2288. db 102,15,58,223,202,16
  2289. call L$113key_256a
  2290. db 102,15,58,223,200,16
  2291. call L$112key_256b
  2292. db 102,15,58,223,202,32
  2293. call L$113key_256a
  2294. db 102,15,58,223,200,32
  2295. call L$112key_256b
  2296. db 102,15,58,223,202,64
  2297. call L$113key_256a
  2298. movups [edx],xmm0
  2299. mov DWORD [16+edx],ecx
  2300. xor eax,eax
  2301. jmp NEAR L$102good_key
  2302. align 16
  2303. L$113key_256a:
  2304. movups [edx],xmm2
  2305. lea edx,[16+edx]
  2306. L$111key_256a_cold:
  2307. shufps xmm4,xmm0,16
  2308. xorps xmm0,xmm4
  2309. shufps xmm4,xmm0,140
  2310. xorps xmm0,xmm4
  2311. shufps xmm1,xmm1,255
  2312. xorps xmm0,xmm1
  2313. ret
  2314. align 16
  2315. L$112key_256b:
  2316. movups [edx],xmm0
  2317. lea edx,[16+edx]
  2318. shufps xmm4,xmm2,16
  2319. xorps xmm2,xmm4
  2320. shufps xmm4,xmm2,140
  2321. xorps xmm2,xmm4
  2322. shufps xmm1,xmm1,170
  2323. xorps xmm2,xmm1
  2324. ret
  2325. align 16
  2326. L$11014rounds_alt:
  2327. movdqa xmm5,[ebx]
  2328. movdqa xmm4,[32+ebx]
  2329. mov ecx,7
  2330. movdqu [edx-32],xmm0
  2331. movdqa xmm1,xmm2
  2332. movdqu [edx-16],xmm2
  2333. L$114loop_key256:
  2334. db 102,15,56,0,213
  2335. db 102,15,56,221,212
  2336. movdqa xmm3,xmm0
  2337. pslldq xmm0,4
  2338. pxor xmm3,xmm0
  2339. pslldq xmm0,4
  2340. pxor xmm3,xmm0
  2341. pslldq xmm0,4
  2342. pxor xmm0,xmm3
  2343. pslld xmm4,1
  2344. pxor xmm0,xmm2
  2345. movdqu [edx],xmm0
  2346. dec ecx
  2347. jz NEAR L$115done_key256
  2348. pshufd xmm2,xmm0,255
  2349. pxor xmm3,xmm3
  2350. db 102,15,56,221,211
  2351. movdqa xmm3,xmm1
  2352. pslldq xmm1,4
  2353. pxor xmm3,xmm1
  2354. pslldq xmm1,4
  2355. pxor xmm3,xmm1
  2356. pslldq xmm1,4
  2357. pxor xmm1,xmm3
  2358. pxor xmm2,xmm1
  2359. movdqu [16+edx],xmm2
  2360. lea edx,[32+edx]
  2361. movdqa xmm1,xmm2
  2362. jmp NEAR L$114loop_key256
  2363. L$115done_key256:
  2364. mov ecx,13
  2365. mov DWORD [16+edx],ecx
  2366. L$102good_key:
  2367. pxor xmm0,xmm0
  2368. pxor xmm1,xmm1
  2369. pxor xmm2,xmm2
  2370. pxor xmm3,xmm3
  2371. pxor xmm4,xmm4
  2372. pxor xmm5,xmm5
  2373. xor eax,eax
  2374. pop ebx
  2375. pop ebp
  2376. ret
  2377. align 4
  2378. L$093bad_pointer:
  2379. mov eax,-1
  2380. pop ebx
  2381. pop ebp
  2382. ret
  2383. align 4
  2384. L$097bad_keybits:
  2385. pxor xmm0,xmm0
  2386. mov eax,-2
  2387. pop ebx
  2388. pop ebp
  2389. ret
  2390. global _aes_hw_set_encrypt_key
  2391. align 16
  2392. _aes_hw_set_encrypt_key:
  2393. L$_aes_hw_set_encrypt_key_begin:
  2394. %ifdef BORINGSSL_DISPATCH_TEST
  2395. push ebx
  2396. push edx
  2397. call L$116pic
  2398. L$116pic:
  2399. pop ebx
  2400. lea ebx,[(_BORINGSSL_function_hit+3-L$116pic)+ebx]
  2401. mov edx,1
  2402. mov BYTE [ebx],dl
  2403. pop edx
  2404. pop ebx
  2405. %endif
  2406. mov eax,DWORD [4+esp]
  2407. mov ecx,DWORD [8+esp]
  2408. mov edx,DWORD [12+esp]
  2409. call __aesni_set_encrypt_key
  2410. ret
  2411. global _aes_hw_set_decrypt_key
  2412. align 16
  2413. _aes_hw_set_decrypt_key:
  2414. L$_aes_hw_set_decrypt_key_begin:
  2415. mov eax,DWORD [4+esp]
  2416. mov ecx,DWORD [8+esp]
  2417. mov edx,DWORD [12+esp]
  2418. call __aesni_set_encrypt_key
  2419. mov edx,DWORD [12+esp]
  2420. shl ecx,4
  2421. test eax,eax
  2422. jnz NEAR L$117dec_key_ret
  2423. lea eax,[16+ecx*1+edx]
  2424. movups xmm0,[edx]
  2425. movups xmm1,[eax]
  2426. movups [eax],xmm0
  2427. movups [edx],xmm1
  2428. lea edx,[16+edx]
  2429. lea eax,[eax-16]
  2430. L$118dec_key_inverse:
  2431. movups xmm0,[edx]
  2432. movups xmm1,[eax]
  2433. db 102,15,56,219,192
  2434. db 102,15,56,219,201
  2435. lea edx,[16+edx]
  2436. lea eax,[eax-16]
  2437. movups [16+eax],xmm0
  2438. movups [edx-16],xmm1
  2439. cmp eax,edx
  2440. ja NEAR L$118dec_key_inverse
  2441. movups xmm0,[edx]
  2442. db 102,15,56,219,192
  2443. movups [edx],xmm0
  2444. pxor xmm0,xmm0
  2445. pxor xmm1,xmm1
  2446. xor eax,eax
  2447. L$117dec_key_ret:
  2448. ret
  2449. align 64
  2450. L$key_const:
  2451. dd 202313229,202313229,202313229,202313229
  2452. dd 67569157,67569157,67569157,67569157
  2453. dd 1,1,1,1
  2454. dd 27,27,27,27
  2455. db 65,69,83,32,102,111,114,32,73,110,116,101,108,32,65,69
  2456. db 83,45,78,73,44,32,67,82,89,80,84,79,71,65,77,83
  2457. db 32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115
  2458. db 115,108,46,111,114,103,62,0
  2459. segment .bss
  2460. common _OPENSSL_ia32cap_P 16