vpaes-x86-win32n.asm 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378
  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. [email protected] equ 1
  10. section .text code align=64
  11. %else
  12. section .text code
  13. %endif
  14. align 64
  15. L$_vpaes_consts:
  16. dd 218628480,235210255,168496130,67568393
  17. dd 252381056,17041926,33884169,51187212
  18. dd 252645135,252645135,252645135,252645135
  19. dd 1512730624,3266504856,1377990664,3401244816
  20. dd 830229760,1275146365,2969422977,3447763452
  21. dd 3411033600,2979783055,338359620,2782886510
  22. dd 4209124096,907596821,221174255,1006095553
  23. dd 191964160,3799684038,3164090317,1589111125
  24. dd 182528256,1777043520,2877432650,3265356744
  25. dd 1874708224,3503451415,3305285752,363511674
  26. dd 1606117888,3487855781,1093350906,2384367825
  27. dd 197121,67569157,134941193,202313229
  28. dd 67569157,134941193,202313229,197121
  29. dd 134941193,202313229,197121,67569157
  30. dd 202313229,197121,67569157,134941193
  31. dd 33619971,100992007,168364043,235736079
  32. dd 235736079,33619971,100992007,168364043
  33. dd 168364043,235736079,33619971,100992007
  34. dd 100992007,168364043,235736079,33619971
  35. dd 50462976,117835012,185207048,252579084
  36. dd 252314880,51251460,117574920,184942860
  37. dd 184682752,252054788,50987272,118359308
  38. dd 118099200,185467140,251790600,50727180
  39. dd 2946363062,528716217,1300004225,1881839624
  40. dd 1532713819,1532713819,1532713819,1532713819
  41. dd 3602276352,4288629033,3737020424,4153884961
  42. dd 1354558464,32357713,2958822624,3775749553
  43. dd 1201988352,132424512,1572796698,503232858
  44. dd 2213177600,1597421020,4103937655,675398315
  45. db 86,101,99,116,111,114,32,80,101,114,109,117,116,97,116,105
  46. db 111,110,32,65,69,83,32,102,111,114,32,120,56,54,47,83
  47. db 83,83,69,51,44,32,77,105,107,101,32,72,97,109,98,117
  48. db 114,103,32,40,83,116,97,110,102,111,114,100,32,85,110,105
  49. db 118,101,114,115,105,116,121,41,0
  50. align 64
  51. align 16
  52. __vpaes_preheat:
  53. add ebp,DWORD [esp]
  54. movdqa xmm7,[ebp-48]
  55. movdqa xmm6,[ebp-16]
  56. ret
  57. align 16
  58. __vpaes_encrypt_core:
  59. mov ecx,16
  60. mov eax,DWORD [240+edx]
  61. movdqa xmm1,xmm6
  62. movdqa xmm2,[ebp]
  63. pandn xmm1,xmm0
  64. pand xmm0,xmm6
  65. movdqu xmm5,[edx]
  66. db 102,15,56,0,208
  67. movdqa xmm0,[16+ebp]
  68. pxor xmm2,xmm5
  69. psrld xmm1,4
  70. add edx,16
  71. db 102,15,56,0,193
  72. lea ebx,[192+ebp]
  73. pxor xmm0,xmm2
  74. jmp NEAR L$000enc_entry
  75. align 16
  76. L$001enc_loop:
  77. movdqa xmm4,[32+ebp]
  78. movdqa xmm0,[48+ebp]
  79. db 102,15,56,0,226
  80. db 102,15,56,0,195
  81. pxor xmm4,xmm5
  82. movdqa xmm5,[64+ebp]
  83. pxor xmm0,xmm4
  84. movdqa xmm1,[ecx*1+ebx-64]
  85. db 102,15,56,0,234
  86. movdqa xmm2,[80+ebp]
  87. movdqa xmm4,[ecx*1+ebx]
  88. db 102,15,56,0,211
  89. movdqa xmm3,xmm0
  90. pxor xmm2,xmm5
  91. db 102,15,56,0,193
  92. add edx,16
  93. pxor xmm0,xmm2
  94. db 102,15,56,0,220
  95. add ecx,16
  96. pxor xmm3,xmm0
  97. db 102,15,56,0,193
  98. and ecx,48
  99. sub eax,1
  100. pxor xmm0,xmm3
  101. L$000enc_entry:
  102. movdqa xmm1,xmm6
  103. movdqa xmm5,[ebp-32]
  104. pandn xmm1,xmm0
  105. psrld xmm1,4
  106. pand xmm0,xmm6
  107. db 102,15,56,0,232
  108. movdqa xmm3,xmm7
  109. pxor xmm0,xmm1
  110. db 102,15,56,0,217
  111. movdqa xmm4,xmm7
  112. pxor xmm3,xmm5
  113. db 102,15,56,0,224
  114. movdqa xmm2,xmm7
  115. pxor xmm4,xmm5
  116. db 102,15,56,0,211
  117. movdqa xmm3,xmm7
  118. pxor xmm2,xmm0
  119. db 102,15,56,0,220
  120. movdqu xmm5,[edx]
  121. pxor xmm3,xmm1
  122. jnz NEAR L$001enc_loop
  123. movdqa xmm4,[96+ebp]
  124. movdqa xmm0,[112+ebp]
  125. db 102,15,56,0,226
  126. pxor xmm4,xmm5
  127. db 102,15,56,0,195
  128. movdqa xmm1,[64+ecx*1+ebx]
  129. pxor xmm0,xmm4
  130. db 102,15,56,0,193
  131. ret
  132. align 16
  133. __vpaes_schedule_core:
  134. add ebp,DWORD [esp]
  135. movdqu xmm0,[esi]
  136. movdqa xmm2,[320+ebp]
  137. movdqa xmm3,xmm0
  138. lea ebx,[ebp]
  139. movdqa [4+esp],xmm2
  140. call __vpaes_schedule_transform
  141. movdqa xmm7,xmm0
  142. test edi,edi
  143. jnz NEAR L$002schedule_am_decrypting
  144. movdqu [edx],xmm0
  145. jmp NEAR L$003schedule_go
  146. L$002schedule_am_decrypting:
  147. movdqa xmm1,[256+ecx*1+ebp]
  148. db 102,15,56,0,217
  149. movdqu [edx],xmm3
  150. xor ecx,48
  151. L$003schedule_go:
  152. cmp eax,192
  153. ja NEAR L$004schedule_256
  154. L$005schedule_128:
  155. mov eax,10
  156. L$006loop_schedule_128:
  157. call __vpaes_schedule_round
  158. dec eax
  159. jz NEAR L$007schedule_mangle_last
  160. call __vpaes_schedule_mangle
  161. jmp NEAR L$006loop_schedule_128
  162. align 16
  163. L$004schedule_256:
  164. movdqu xmm0,[16+esi]
  165. call __vpaes_schedule_transform
  166. mov eax,7
  167. L$008loop_schedule_256:
  168. call __vpaes_schedule_mangle
  169. movdqa xmm6,xmm0
  170. call __vpaes_schedule_round
  171. dec eax
  172. jz NEAR L$007schedule_mangle_last
  173. call __vpaes_schedule_mangle
  174. pshufd xmm0,xmm0,255
  175. movdqa [20+esp],xmm7
  176. movdqa xmm7,xmm6
  177. call L$_vpaes_schedule_low_round
  178. movdqa xmm7,[20+esp]
  179. jmp NEAR L$008loop_schedule_256
  180. align 16
  181. L$007schedule_mangle_last:
  182. lea ebx,[384+ebp]
  183. test edi,edi
  184. jnz NEAR L$009schedule_mangle_last_dec
  185. movdqa xmm1,[256+ecx*1+ebp]
  186. db 102,15,56,0,193
  187. lea ebx,[352+ebp]
  188. add edx,32
  189. L$009schedule_mangle_last_dec:
  190. add edx,-16
  191. pxor xmm0,[336+ebp]
  192. call __vpaes_schedule_transform
  193. movdqu [edx],xmm0
  194. pxor xmm0,xmm0
  195. pxor xmm1,xmm1
  196. pxor xmm2,xmm2
  197. pxor xmm3,xmm3
  198. pxor xmm4,xmm4
  199. pxor xmm5,xmm5
  200. pxor xmm6,xmm6
  201. pxor xmm7,xmm7
  202. ret
  203. align 16
  204. __vpaes_schedule_round:
  205. movdqa xmm2,[8+esp]
  206. pxor xmm1,xmm1
  207. db 102,15,58,15,202,15
  208. db 102,15,58,15,210,15
  209. pxor xmm7,xmm1
  210. pshufd xmm0,xmm0,255
  211. db 102,15,58,15,192,1
  212. movdqa [8+esp],xmm2
  213. L$_vpaes_schedule_low_round:
  214. movdqa xmm1,xmm7
  215. pslldq xmm7,4
  216. pxor xmm7,xmm1
  217. movdqa xmm1,xmm7
  218. pslldq xmm7,8
  219. pxor xmm7,xmm1
  220. pxor xmm7,[336+ebp]
  221. movdqa xmm4,[ebp-16]
  222. movdqa xmm5,[ebp-48]
  223. movdqa xmm1,xmm4
  224. pandn xmm1,xmm0
  225. psrld xmm1,4
  226. pand xmm0,xmm4
  227. movdqa xmm2,[ebp-32]
  228. db 102,15,56,0,208
  229. pxor xmm0,xmm1
  230. movdqa xmm3,xmm5
  231. db 102,15,56,0,217
  232. pxor xmm3,xmm2
  233. movdqa xmm4,xmm5
  234. db 102,15,56,0,224
  235. pxor xmm4,xmm2
  236. movdqa xmm2,xmm5
  237. db 102,15,56,0,211
  238. pxor xmm2,xmm0
  239. movdqa xmm3,xmm5
  240. db 102,15,56,0,220
  241. pxor xmm3,xmm1
  242. movdqa xmm4,[32+ebp]
  243. db 102,15,56,0,226
  244. movdqa xmm0,[48+ebp]
  245. db 102,15,56,0,195
  246. pxor xmm0,xmm4
  247. pxor xmm0,xmm7
  248. movdqa xmm7,xmm0
  249. ret
  250. align 16
  251. __vpaes_schedule_transform:
  252. movdqa xmm2,[ebp-16]
  253. movdqa xmm1,xmm2
  254. pandn xmm1,xmm0
  255. psrld xmm1,4
  256. pand xmm0,xmm2
  257. movdqa xmm2,[ebx]
  258. db 102,15,56,0,208
  259. movdqa xmm0,[16+ebx]
  260. db 102,15,56,0,193
  261. pxor xmm0,xmm2
  262. ret
  263. align 16
  264. __vpaes_schedule_mangle:
  265. movdqa xmm4,xmm0
  266. movdqa xmm5,[128+ebp]
  267. test edi,edi
  268. jnz NEAR L$010schedule_mangle_dec
  269. add edx,16
  270. pxor xmm4,[336+ebp]
  271. db 102,15,56,0,229
  272. movdqa xmm3,xmm4
  273. db 102,15,56,0,229
  274. pxor xmm3,xmm4
  275. db 102,15,56,0,229
  276. pxor xmm3,xmm4
  277. jmp NEAR L$011schedule_mangle_both
  278. align 16
  279. L$010schedule_mangle_dec:
  280. movdqa xmm2,[ebp-16]
  281. lea esi,[ebp]
  282. movdqa xmm1,xmm2
  283. pandn xmm1,xmm4
  284. psrld xmm1,4
  285. pand xmm4,xmm2
  286. movdqa xmm2,[esi]
  287. db 102,15,56,0,212
  288. movdqa xmm3,[16+esi]
  289. db 102,15,56,0,217
  290. pxor xmm3,xmm2
  291. db 102,15,56,0,221
  292. movdqa xmm2,[32+esi]
  293. db 102,15,56,0,212
  294. pxor xmm2,xmm3
  295. movdqa xmm3,[48+esi]
  296. db 102,15,56,0,217
  297. pxor xmm3,xmm2
  298. db 102,15,56,0,221
  299. movdqa xmm2,[64+esi]
  300. db 102,15,56,0,212
  301. pxor xmm2,xmm3
  302. movdqa xmm3,[80+esi]
  303. db 102,15,56,0,217
  304. pxor xmm3,xmm2
  305. db 102,15,56,0,221
  306. movdqa xmm2,[96+esi]
  307. db 102,15,56,0,212
  308. pxor xmm2,xmm3
  309. movdqa xmm3,[112+esi]
  310. db 102,15,56,0,217
  311. pxor xmm3,xmm2
  312. add edx,-16
  313. L$011schedule_mangle_both:
  314. movdqa xmm1,[256+ecx*1+ebp]
  315. db 102,15,56,0,217
  316. add ecx,-16
  317. and ecx,48
  318. movdqu [edx],xmm3
  319. ret
  320. global _GFp_vpaes_set_encrypt_key
  321. align 16
  322. _GFp_vpaes_set_encrypt_key:
  323. L$_GFp_vpaes_set_encrypt_key_begin:
  324. push ebp
  325. push ebx
  326. push esi
  327. push edi
  328. mov esi,DWORD [20+esp]
  329. lea ebx,[esp-56]
  330. mov eax,DWORD [24+esp]
  331. and ebx,-16
  332. mov edx,DWORD [28+esp]
  333. xchg ebx,esp
  334. mov DWORD [48+esp],ebx
  335. mov ebx,eax
  336. shr ebx,5
  337. add ebx,5
  338. mov DWORD [240+edx],ebx
  339. mov ecx,48
  340. mov edi,0
  341. lea ebp,[(L$_vpaes_consts+0x30-L$012pic_point)]
  342. call __vpaes_schedule_core
  343. L$012pic_point:
  344. mov esp,DWORD [48+esp]
  345. xor eax,eax
  346. pop edi
  347. pop esi
  348. pop ebx
  349. pop ebp
  350. ret
  351. global _GFp_vpaes_encrypt
  352. align 16
  353. _GFp_vpaes_encrypt:
  354. L$_GFp_vpaes_encrypt_begin:
  355. push ebp
  356. push ebx
  357. push esi
  358. push edi
  359. lea ebp,[(L$_vpaes_consts+0x30-L$013pic_point)]
  360. call __vpaes_preheat
  361. L$013pic_point:
  362. mov esi,DWORD [20+esp]
  363. lea ebx,[esp-56]
  364. mov edi,DWORD [24+esp]
  365. and ebx,-16
  366. mov edx,DWORD [28+esp]
  367. xchg ebx,esp
  368. mov DWORD [48+esp],ebx
  369. movdqu xmm0,[esi]
  370. call __vpaes_encrypt_core
  371. movdqu [edi],xmm0
  372. mov esp,DWORD [48+esp]
  373. pop edi
  374. pop esi
  375. pop ebx
  376. pop ebp
  377. ret