aesni-x86_64.masm 107 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441344234433444344534463447344834493450345134523453345434553456345734583459346034613462346334643465346634673468346934703471347234733474347534763477347834793480348134823483348434853486348734883489349034913492349334943495349634973498349935003501350235033504350535063507350835093510351135123513351435153516351735183519352035213522352335243525352635273528352935303531353235333534353535363537353835393540354135423543354435453546354735483549355035513552355335543555355635573558355935603561356235633564356535663567356835693570357135723573357435753576357735783579358035813582358335843585358635873588358935903591359235933594359535963597359835993600360136023603360436053606360736083609361036113612361336143615361636173618361936203621362236233624362536263627362836293630363136323633363436353636363736383639364036413642364336443645364636473648364936503651365236533654365536563657365836593660366136623663366436653666366736683669367036713672367336743675367636773678367936803681368236833684368536863687368836893690369136923693369436953696369736983699370037013702370337043705370637073708370937103711371237133714371537163717371837193720372137223723372437253726372737283729373037313732373337343735373637373738373937403741374237433744374537463747374837493750375137523753375437553756375737583759376037613762376337643765376637673768376937703771377237733774377537763777377837793780378137823783378437853786378737883789379037913792379337943795379637973798379938003801380238033804380538063807380838093810381138123813381438153816381738183819382038213822382338243825382638273828382938303831383238333834383538363837383838393840384138423843384438453846384738483849385038513852385338543855385638573858385938603861386238633864386538663867386838693870387138723873387438753876387738783879388038813882388338843885388638873888388938903891389238933894389538963897389838993900390139023903390439053906390739083909391039113912391339143915391639173918391939203921392239233924392539263927392839293930393139323933393439353936393739383939394039413942394339443945394639473948394939503951395239533954395539563957395839593960396139623963396439653966396739683969397039713972397339743975397639773978397939803981398239833984398539863987398839893990399139923993399439953996399739983999400040014002400340044005400640074008400940104011401240134014401540164017401840194020402140224023402440254026402740284029403040314032403340344035403640374038403940404041404240434044404540464047404840494050405140524053405440554056405740584059406040614062406340644065406640674068406940704071407240734074407540764077407840794080408140824083408440854086408740884089409040914092409340944095409640974098409941004101410241034104410541064107410841094110411141124113411441154116411741184119412041214122412341244125412641274128412941304131413241334134413541364137413841394140414141424143414441454146414741484149415041514152415341544155415641574158415941604161416241634164416541664167416841694170417141724173417441754176417741784179418041814182418341844185418641874188418941904191419241934194419541964197419841994200420142024203420442054206420742084209421042114212421342144215421642174218421942204221422242234224422542264227422842294230423142324233423442354236423742384239424042414242424342444245424642474248424942504251425242534254425542564257425842594260426142624263426442654266426742684269427042714272427342744275427642774278427942804281428242834284428542864287428842894290429142924293429442954296429742984299430043014302430343044305430643074308430943104311431243134314431543164317431843194320432143224323432443254326432743284329433043314332433343344335433643374338433943404341434243434344434543464347434843494350435143524353435443554356435743584359436043614362436343644365436643674368436943704371437243734374437543764377437843794380438143824383438443854386438743884389439043914392439343944395439643974398439944004401440244034404440544064407440844094410441144124413441444154416441744184419442044214422442344244425442644274428442944304431443244334434443544364437443844394440444144424443444444454446444744484449445044514452445344544455445644574458445944604461446244634464446544664467446844694470447144724473447444754476447744784479448044814482448344844485448644874488448944904491449244934494449544964497449844994500450145024503450445054506450745084509451045114512451345144515451645174518451945204521452245234524452545264527452845294530453145324533453445354536453745384539454045414542454345444545454645474548454945504551455245534554455545564557455845594560456145624563456445654566456745684569457045714572457345744575457645774578457945804581458245834584458545864587458845894590459145924593459445954596459745984599460046014602460346044605460646074608460946104611461246134614461546164617461846194620462146224623462446254626462746284629463046314632463346344635463646374638463946404641464246434644464546464647464846494650465146524653465446554656465746584659466046614662466346644665466646674668466946704671467246734674467546764677467846794680468146824683468446854686468746884689469046914692469346944695469646974698469947004701470247034704470547064707470847094710471147124713471447154716471747184719472047214722472347244725472647274728472947304731473247334734473547364737473847394740474147424743474447454746474747484749475047514752475347544755475647574758475947604761476247634764476547664767476847694770477147724773477447754776477747784779478047814782478347844785478647874788478947904791479247934794479547964797479847994800480148024803480448054806480748084809481048114812481348144815481648174818481948204821482248234824482548264827482848294830483148324833483448354836483748384839484048414842484348444845484648474848484948504851485248534854485548564857485848594860486148624863486448654866486748684869487048714872487348744875487648774878487948804881488248834884488548864887488848894890489148924893489448954896489748984899490049014902490349044905490649074908490949104911491249134914491549164917491849194920492149224923492449254926492749284929493049314932493349344935493649374938493949404941494249434944494549464947494849494950495149524953495449554956495749584959496049614962496349644965496649674968496949704971497249734974497549764977497849794980498149824983498449854986498749884989499049914992499349944995499649974998499950005001500250035004500550065007500850095010501150125013501450155016501750185019502050215022502350245025502650275028502950305031503250335034503550365037503850395040504150425043504450455046504750485049505050515052505350545055505650575058505950605061506250635064506550665067506850695070507150725073507450755076507750785079508050815082508350845085508650875088508950905091509250935094509550965097509850995100510151025103
  1. OPTION DOTNAME
  2. .text$ SEGMENT ALIGN(256) 'CODE'
  3. EXTERN OPENSSL_ia32cap_P:NEAR
  4. PUBLIC aesni_encrypt
  5. ALIGN 16
  6. aesni_encrypt PROC PUBLIC
  7. movups xmm2,XMMWORD PTR[rcx]
  8. mov eax,DWORD PTR[240+r8]
  9. movups xmm0,XMMWORD PTR[r8]
  10. movups xmm1,XMMWORD PTR[16+r8]
  11. lea r8,QWORD PTR[32+r8]
  12. xorps xmm2,xmm0
  13. $L$oop_enc1_1::
  14. DB 102,15,56,220,209
  15. dec eax
  16. movups xmm1,XMMWORD PTR[r8]
  17. lea r8,QWORD PTR[16+r8]
  18. jnz $L$oop_enc1_1
  19. DB 102,15,56,221,209
  20. pxor xmm0,xmm0
  21. pxor xmm1,xmm1
  22. movups XMMWORD PTR[rdx],xmm2
  23. pxor xmm2,xmm2
  24. DB 0F3h,0C3h ;repret
  25. aesni_encrypt ENDP
  26. PUBLIC aesni_decrypt
  27. ALIGN 16
  28. aesni_decrypt PROC PUBLIC
  29. movups xmm2,XMMWORD PTR[rcx]
  30. mov eax,DWORD PTR[240+r8]
  31. movups xmm0,XMMWORD PTR[r8]
  32. movups xmm1,XMMWORD PTR[16+r8]
  33. lea r8,QWORD PTR[32+r8]
  34. xorps xmm2,xmm0
  35. $L$oop_dec1_2::
  36. DB 102,15,56,222,209
  37. dec eax
  38. movups xmm1,XMMWORD PTR[r8]
  39. lea r8,QWORD PTR[16+r8]
  40. jnz $L$oop_dec1_2
  41. DB 102,15,56,223,209
  42. pxor xmm0,xmm0
  43. pxor xmm1,xmm1
  44. movups XMMWORD PTR[rdx],xmm2
  45. pxor xmm2,xmm2
  46. DB 0F3h,0C3h ;repret
  47. aesni_decrypt ENDP
  48. ALIGN 16
  49. _aesni_encrypt2 PROC PRIVATE
  50. movups xmm0,XMMWORD PTR[rcx]
  51. shl eax,4
  52. movups xmm1,XMMWORD PTR[16+rcx]
  53. xorps xmm2,xmm0
  54. xorps xmm3,xmm0
  55. movups xmm0,XMMWORD PTR[32+rcx]
  56. lea rcx,QWORD PTR[32+rax*1+rcx]
  57. neg rax
  58. add rax,16
  59. $L$enc_loop2::
  60. DB 102,15,56,220,209
  61. DB 102,15,56,220,217
  62. movups xmm1,XMMWORD PTR[rax*1+rcx]
  63. add rax,32
  64. DB 102,15,56,220,208
  65. DB 102,15,56,220,216
  66. movups xmm0,XMMWORD PTR[((-16))+rax*1+rcx]
  67. jnz $L$enc_loop2
  68. DB 102,15,56,220,209
  69. DB 102,15,56,220,217
  70. DB 102,15,56,221,208
  71. DB 102,15,56,221,216
  72. DB 0F3h,0C3h ;repret
  73. _aesni_encrypt2 ENDP
  74. ALIGN 16
  75. _aesni_decrypt2 PROC PRIVATE
  76. movups xmm0,XMMWORD PTR[rcx]
  77. shl eax,4
  78. movups xmm1,XMMWORD PTR[16+rcx]
  79. xorps xmm2,xmm0
  80. xorps xmm3,xmm0
  81. movups xmm0,XMMWORD PTR[32+rcx]
  82. lea rcx,QWORD PTR[32+rax*1+rcx]
  83. neg rax
  84. add rax,16
  85. $L$dec_loop2::
  86. DB 102,15,56,222,209
  87. DB 102,15,56,222,217
  88. movups xmm1,XMMWORD PTR[rax*1+rcx]
  89. add rax,32
  90. DB 102,15,56,222,208
  91. DB 102,15,56,222,216
  92. movups xmm0,XMMWORD PTR[((-16))+rax*1+rcx]
  93. jnz $L$dec_loop2
  94. DB 102,15,56,222,209
  95. DB 102,15,56,222,217
  96. DB 102,15,56,223,208
  97. DB 102,15,56,223,216
  98. DB 0F3h,0C3h ;repret
  99. _aesni_decrypt2 ENDP
  100. ALIGN 16
  101. _aesni_encrypt3 PROC PRIVATE
  102. movups xmm0,XMMWORD PTR[rcx]
  103. shl eax,4
  104. movups xmm1,XMMWORD PTR[16+rcx]
  105. xorps xmm2,xmm0
  106. xorps xmm3,xmm0
  107. xorps xmm4,xmm0
  108. movups xmm0,XMMWORD PTR[32+rcx]
  109. lea rcx,QWORD PTR[32+rax*1+rcx]
  110. neg rax
  111. add rax,16
  112. $L$enc_loop3::
  113. DB 102,15,56,220,209
  114. DB 102,15,56,220,217
  115. DB 102,15,56,220,225
  116. movups xmm1,XMMWORD PTR[rax*1+rcx]
  117. add rax,32
  118. DB 102,15,56,220,208
  119. DB 102,15,56,220,216
  120. DB 102,15,56,220,224
  121. movups xmm0,XMMWORD PTR[((-16))+rax*1+rcx]
  122. jnz $L$enc_loop3
  123. DB 102,15,56,220,209
  124. DB 102,15,56,220,217
  125. DB 102,15,56,220,225
  126. DB 102,15,56,221,208
  127. DB 102,15,56,221,216
  128. DB 102,15,56,221,224
  129. DB 0F3h,0C3h ;repret
  130. _aesni_encrypt3 ENDP
  131. ALIGN 16
  132. _aesni_decrypt3 PROC PRIVATE
  133. movups xmm0,XMMWORD PTR[rcx]
  134. shl eax,4
  135. movups xmm1,XMMWORD PTR[16+rcx]
  136. xorps xmm2,xmm0
  137. xorps xmm3,xmm0
  138. xorps xmm4,xmm0
  139. movups xmm0,XMMWORD PTR[32+rcx]
  140. lea rcx,QWORD PTR[32+rax*1+rcx]
  141. neg rax
  142. add rax,16
  143. $L$dec_loop3::
  144. DB 102,15,56,222,209
  145. DB 102,15,56,222,217
  146. DB 102,15,56,222,225
  147. movups xmm1,XMMWORD PTR[rax*1+rcx]
  148. add rax,32
  149. DB 102,15,56,222,208
  150. DB 102,15,56,222,216
  151. DB 102,15,56,222,224
  152. movups xmm0,XMMWORD PTR[((-16))+rax*1+rcx]
  153. jnz $L$dec_loop3
  154. DB 102,15,56,222,209
  155. DB 102,15,56,222,217
  156. DB 102,15,56,222,225
  157. DB 102,15,56,223,208
  158. DB 102,15,56,223,216
  159. DB 102,15,56,223,224
  160. DB 0F3h,0C3h ;repret
  161. _aesni_decrypt3 ENDP
  162. ALIGN 16
  163. _aesni_encrypt4 PROC PRIVATE
  164. movups xmm0,XMMWORD PTR[rcx]
  165. shl eax,4
  166. movups xmm1,XMMWORD PTR[16+rcx]
  167. xorps xmm2,xmm0
  168. xorps xmm3,xmm0
  169. xorps xmm4,xmm0
  170. xorps xmm5,xmm0
  171. movups xmm0,XMMWORD PTR[32+rcx]
  172. lea rcx,QWORD PTR[32+rax*1+rcx]
  173. neg rax
  174. DB 00fh,01fh,000h
  175. add rax,16
  176. $L$enc_loop4::
  177. DB 102,15,56,220,209
  178. DB 102,15,56,220,217
  179. DB 102,15,56,220,225
  180. DB 102,15,56,220,233
  181. movups xmm1,XMMWORD PTR[rax*1+rcx]
  182. add rax,32
  183. DB 102,15,56,220,208
  184. DB 102,15,56,220,216
  185. DB 102,15,56,220,224
  186. DB 102,15,56,220,232
  187. movups xmm0,XMMWORD PTR[((-16))+rax*1+rcx]
  188. jnz $L$enc_loop4
  189. DB 102,15,56,220,209
  190. DB 102,15,56,220,217
  191. DB 102,15,56,220,225
  192. DB 102,15,56,220,233
  193. DB 102,15,56,221,208
  194. DB 102,15,56,221,216
  195. DB 102,15,56,221,224
  196. DB 102,15,56,221,232
  197. DB 0F3h,0C3h ;repret
  198. _aesni_encrypt4 ENDP
  199. ALIGN 16
  200. _aesni_decrypt4 PROC PRIVATE
  201. movups xmm0,XMMWORD PTR[rcx]
  202. shl eax,4
  203. movups xmm1,XMMWORD PTR[16+rcx]
  204. xorps xmm2,xmm0
  205. xorps xmm3,xmm0
  206. xorps xmm4,xmm0
  207. xorps xmm5,xmm0
  208. movups xmm0,XMMWORD PTR[32+rcx]
  209. lea rcx,QWORD PTR[32+rax*1+rcx]
  210. neg rax
  211. DB 00fh,01fh,000h
  212. add rax,16
  213. $L$dec_loop4::
  214. DB 102,15,56,222,209
  215. DB 102,15,56,222,217
  216. DB 102,15,56,222,225
  217. DB 102,15,56,222,233
  218. movups xmm1,XMMWORD PTR[rax*1+rcx]
  219. add rax,32
  220. DB 102,15,56,222,208
  221. DB 102,15,56,222,216
  222. DB 102,15,56,222,224
  223. DB 102,15,56,222,232
  224. movups xmm0,XMMWORD PTR[((-16))+rax*1+rcx]
  225. jnz $L$dec_loop4
  226. DB 102,15,56,222,209
  227. DB 102,15,56,222,217
  228. DB 102,15,56,222,225
  229. DB 102,15,56,222,233
  230. DB 102,15,56,223,208
  231. DB 102,15,56,223,216
  232. DB 102,15,56,223,224
  233. DB 102,15,56,223,232
  234. DB 0F3h,0C3h ;repret
  235. _aesni_decrypt4 ENDP
  236. ALIGN 16
  237. _aesni_encrypt6 PROC PRIVATE
  238. movups xmm0,XMMWORD PTR[rcx]
  239. shl eax,4
  240. movups xmm1,XMMWORD PTR[16+rcx]
  241. xorps xmm2,xmm0
  242. pxor xmm3,xmm0
  243. pxor xmm4,xmm0
  244. DB 102,15,56,220,209
  245. lea rcx,QWORD PTR[32+rax*1+rcx]
  246. neg rax
  247. DB 102,15,56,220,217
  248. pxor xmm5,xmm0
  249. pxor xmm6,xmm0
  250. DB 102,15,56,220,225
  251. pxor xmm7,xmm0
  252. movups xmm0,XMMWORD PTR[rax*1+rcx]
  253. add rax,16
  254. jmp $L$enc_loop6_enter
  255. ALIGN 16
  256. $L$enc_loop6::
  257. DB 102,15,56,220,209
  258. DB 102,15,56,220,217
  259. DB 102,15,56,220,225
  260. $L$enc_loop6_enter::
  261. DB 102,15,56,220,233
  262. DB 102,15,56,220,241
  263. DB 102,15,56,220,249
  264. movups xmm1,XMMWORD PTR[rax*1+rcx]
  265. add rax,32
  266. DB 102,15,56,220,208
  267. DB 102,15,56,220,216
  268. DB 102,15,56,220,224
  269. DB 102,15,56,220,232
  270. DB 102,15,56,220,240
  271. DB 102,15,56,220,248
  272. movups xmm0,XMMWORD PTR[((-16))+rax*1+rcx]
  273. jnz $L$enc_loop6
  274. DB 102,15,56,220,209
  275. DB 102,15,56,220,217
  276. DB 102,15,56,220,225
  277. DB 102,15,56,220,233
  278. DB 102,15,56,220,241
  279. DB 102,15,56,220,249
  280. DB 102,15,56,221,208
  281. DB 102,15,56,221,216
  282. DB 102,15,56,221,224
  283. DB 102,15,56,221,232
  284. DB 102,15,56,221,240
  285. DB 102,15,56,221,248
  286. DB 0F3h,0C3h ;repret
  287. _aesni_encrypt6 ENDP
  288. ALIGN 16
  289. _aesni_decrypt6 PROC PRIVATE
  290. movups xmm0,XMMWORD PTR[rcx]
  291. shl eax,4
  292. movups xmm1,XMMWORD PTR[16+rcx]
  293. xorps xmm2,xmm0
  294. pxor xmm3,xmm0
  295. pxor xmm4,xmm0
  296. DB 102,15,56,222,209
  297. lea rcx,QWORD PTR[32+rax*1+rcx]
  298. neg rax
  299. DB 102,15,56,222,217
  300. pxor xmm5,xmm0
  301. pxor xmm6,xmm0
  302. DB 102,15,56,222,225
  303. pxor xmm7,xmm0
  304. movups xmm0,XMMWORD PTR[rax*1+rcx]
  305. add rax,16
  306. jmp $L$dec_loop6_enter
  307. ALIGN 16
  308. $L$dec_loop6::
  309. DB 102,15,56,222,209
  310. DB 102,15,56,222,217
  311. DB 102,15,56,222,225
  312. $L$dec_loop6_enter::
  313. DB 102,15,56,222,233
  314. DB 102,15,56,222,241
  315. DB 102,15,56,222,249
  316. movups xmm1,XMMWORD PTR[rax*1+rcx]
  317. add rax,32
  318. DB 102,15,56,222,208
  319. DB 102,15,56,222,216
  320. DB 102,15,56,222,224
  321. DB 102,15,56,222,232
  322. DB 102,15,56,222,240
  323. DB 102,15,56,222,248
  324. movups xmm0,XMMWORD PTR[((-16))+rax*1+rcx]
  325. jnz $L$dec_loop6
  326. DB 102,15,56,222,209
  327. DB 102,15,56,222,217
  328. DB 102,15,56,222,225
  329. DB 102,15,56,222,233
  330. DB 102,15,56,222,241
  331. DB 102,15,56,222,249
  332. DB 102,15,56,223,208
  333. DB 102,15,56,223,216
  334. DB 102,15,56,223,224
  335. DB 102,15,56,223,232
  336. DB 102,15,56,223,240
  337. DB 102,15,56,223,248
  338. DB 0F3h,0C3h ;repret
  339. _aesni_decrypt6 ENDP
  340. ALIGN 16
  341. _aesni_encrypt8 PROC PRIVATE
  342. movups xmm0,XMMWORD PTR[rcx]
  343. shl eax,4
  344. movups xmm1,XMMWORD PTR[16+rcx]
  345. xorps xmm2,xmm0
  346. xorps xmm3,xmm0
  347. pxor xmm4,xmm0
  348. pxor xmm5,xmm0
  349. pxor xmm6,xmm0
  350. lea rcx,QWORD PTR[32+rax*1+rcx]
  351. neg rax
  352. DB 102,15,56,220,209
  353. pxor xmm7,xmm0
  354. pxor xmm8,xmm0
  355. DB 102,15,56,220,217
  356. pxor xmm9,xmm0
  357. movups xmm0,XMMWORD PTR[rax*1+rcx]
  358. add rax,16
  359. jmp $L$enc_loop8_inner
  360. ALIGN 16
  361. $L$enc_loop8::
  362. DB 102,15,56,220,209
  363. DB 102,15,56,220,217
  364. $L$enc_loop8_inner::
  365. DB 102,15,56,220,225
  366. DB 102,15,56,220,233
  367. DB 102,15,56,220,241
  368. DB 102,15,56,220,249
  369. DB 102,68,15,56,220,193
  370. DB 102,68,15,56,220,201
  371. $L$enc_loop8_enter::
  372. movups xmm1,XMMWORD PTR[rax*1+rcx]
  373. add rax,32
  374. DB 102,15,56,220,208
  375. DB 102,15,56,220,216
  376. DB 102,15,56,220,224
  377. DB 102,15,56,220,232
  378. DB 102,15,56,220,240
  379. DB 102,15,56,220,248
  380. DB 102,68,15,56,220,192
  381. DB 102,68,15,56,220,200
  382. movups xmm0,XMMWORD PTR[((-16))+rax*1+rcx]
  383. jnz $L$enc_loop8
  384. DB 102,15,56,220,209
  385. DB 102,15,56,220,217
  386. DB 102,15,56,220,225
  387. DB 102,15,56,220,233
  388. DB 102,15,56,220,241
  389. DB 102,15,56,220,249
  390. DB 102,68,15,56,220,193
  391. DB 102,68,15,56,220,201
  392. DB 102,15,56,221,208
  393. DB 102,15,56,221,216
  394. DB 102,15,56,221,224
  395. DB 102,15,56,221,232
  396. DB 102,15,56,221,240
  397. DB 102,15,56,221,248
  398. DB 102,68,15,56,221,192
  399. DB 102,68,15,56,221,200
  400. DB 0F3h,0C3h ;repret
  401. _aesni_encrypt8 ENDP
  402. ALIGN 16
  403. _aesni_decrypt8 PROC PRIVATE
  404. movups xmm0,XMMWORD PTR[rcx]
  405. shl eax,4
  406. movups xmm1,XMMWORD PTR[16+rcx]
  407. xorps xmm2,xmm0
  408. xorps xmm3,xmm0
  409. pxor xmm4,xmm0
  410. pxor xmm5,xmm0
  411. pxor xmm6,xmm0
  412. lea rcx,QWORD PTR[32+rax*1+rcx]
  413. neg rax
  414. DB 102,15,56,222,209
  415. pxor xmm7,xmm0
  416. pxor xmm8,xmm0
  417. DB 102,15,56,222,217
  418. pxor xmm9,xmm0
  419. movups xmm0,XMMWORD PTR[rax*1+rcx]
  420. add rax,16
  421. jmp $L$dec_loop8_inner
  422. ALIGN 16
  423. $L$dec_loop8::
  424. DB 102,15,56,222,209
  425. DB 102,15,56,222,217
  426. $L$dec_loop8_inner::
  427. DB 102,15,56,222,225
  428. DB 102,15,56,222,233
  429. DB 102,15,56,222,241
  430. DB 102,15,56,222,249
  431. DB 102,68,15,56,222,193
  432. DB 102,68,15,56,222,201
  433. $L$dec_loop8_enter::
  434. movups xmm1,XMMWORD PTR[rax*1+rcx]
  435. add rax,32
  436. DB 102,15,56,222,208
  437. DB 102,15,56,222,216
  438. DB 102,15,56,222,224
  439. DB 102,15,56,222,232
  440. DB 102,15,56,222,240
  441. DB 102,15,56,222,248
  442. DB 102,68,15,56,222,192
  443. DB 102,68,15,56,222,200
  444. movups xmm0,XMMWORD PTR[((-16))+rax*1+rcx]
  445. jnz $L$dec_loop8
  446. DB 102,15,56,222,209
  447. DB 102,15,56,222,217
  448. DB 102,15,56,222,225
  449. DB 102,15,56,222,233
  450. DB 102,15,56,222,241
  451. DB 102,15,56,222,249
  452. DB 102,68,15,56,222,193
  453. DB 102,68,15,56,222,201
  454. DB 102,15,56,223,208
  455. DB 102,15,56,223,216
  456. DB 102,15,56,223,224
  457. DB 102,15,56,223,232
  458. DB 102,15,56,223,240
  459. DB 102,15,56,223,248
  460. DB 102,68,15,56,223,192
  461. DB 102,68,15,56,223,200
  462. DB 0F3h,0C3h ;repret
  463. _aesni_decrypt8 ENDP
  464. PUBLIC aesni_ecb_encrypt
  465. ALIGN 16
  466. aesni_ecb_encrypt PROC PUBLIC
  467. mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
  468. mov QWORD PTR[16+rsp],rsi
  469. mov rax,rsp
  470. $L$SEH_begin_aesni_ecb_encrypt::
  471. mov rdi,rcx
  472. mov rsi,rdx
  473. mov rdx,r8
  474. mov rcx,r9
  475. mov r8,QWORD PTR[40+rsp]
  476. lea rsp,QWORD PTR[((-88))+rsp]
  477. movaps XMMWORD PTR[rsp],xmm6
  478. movaps XMMWORD PTR[16+rsp],xmm7
  479. movaps XMMWORD PTR[32+rsp],xmm8
  480. movaps XMMWORD PTR[48+rsp],xmm9
  481. $L$ecb_enc_body::
  482. and rdx,-16
  483. jz $L$ecb_ret
  484. mov eax,DWORD PTR[240+rcx]
  485. movups xmm0,XMMWORD PTR[rcx]
  486. mov r11,rcx
  487. mov r10d,eax
  488. test r8d,r8d
  489. jz $L$ecb_decrypt
  490. cmp rdx,080h
  491. jb $L$ecb_enc_tail
  492. movdqu xmm2,XMMWORD PTR[rdi]
  493. movdqu xmm3,XMMWORD PTR[16+rdi]
  494. movdqu xmm4,XMMWORD PTR[32+rdi]
  495. movdqu xmm5,XMMWORD PTR[48+rdi]
  496. movdqu xmm6,XMMWORD PTR[64+rdi]
  497. movdqu xmm7,XMMWORD PTR[80+rdi]
  498. movdqu xmm8,XMMWORD PTR[96+rdi]
  499. movdqu xmm9,XMMWORD PTR[112+rdi]
  500. lea rdi,QWORD PTR[128+rdi]
  501. sub rdx,080h
  502. jmp $L$ecb_enc_loop8_enter
  503. ALIGN 16
  504. $L$ecb_enc_loop8::
  505. movups XMMWORD PTR[rsi],xmm2
  506. mov rcx,r11
  507. movdqu xmm2,XMMWORD PTR[rdi]
  508. mov eax,r10d
  509. movups XMMWORD PTR[16+rsi],xmm3
  510. movdqu xmm3,XMMWORD PTR[16+rdi]
  511. movups XMMWORD PTR[32+rsi],xmm4
  512. movdqu xmm4,XMMWORD PTR[32+rdi]
  513. movups XMMWORD PTR[48+rsi],xmm5
  514. movdqu xmm5,XMMWORD PTR[48+rdi]
  515. movups XMMWORD PTR[64+rsi],xmm6
  516. movdqu xmm6,XMMWORD PTR[64+rdi]
  517. movups XMMWORD PTR[80+rsi],xmm7
  518. movdqu xmm7,XMMWORD PTR[80+rdi]
  519. movups XMMWORD PTR[96+rsi],xmm8
  520. movdqu xmm8,XMMWORD PTR[96+rdi]
  521. movups XMMWORD PTR[112+rsi],xmm9
  522. lea rsi,QWORD PTR[128+rsi]
  523. movdqu xmm9,XMMWORD PTR[112+rdi]
  524. lea rdi,QWORD PTR[128+rdi]
  525. $L$ecb_enc_loop8_enter::
  526. call _aesni_encrypt8
  527. sub rdx,080h
  528. jnc $L$ecb_enc_loop8
  529. movups XMMWORD PTR[rsi],xmm2
  530. mov rcx,r11
  531. movups XMMWORD PTR[16+rsi],xmm3
  532. mov eax,r10d
  533. movups XMMWORD PTR[32+rsi],xmm4
  534. movups XMMWORD PTR[48+rsi],xmm5
  535. movups XMMWORD PTR[64+rsi],xmm6
  536. movups XMMWORD PTR[80+rsi],xmm7
  537. movups XMMWORD PTR[96+rsi],xmm8
  538. movups XMMWORD PTR[112+rsi],xmm9
  539. lea rsi,QWORD PTR[128+rsi]
  540. add rdx,080h
  541. jz $L$ecb_ret
  542. $L$ecb_enc_tail::
  543. movups xmm2,XMMWORD PTR[rdi]
  544. cmp rdx,020h
  545. jb $L$ecb_enc_one
  546. movups xmm3,XMMWORD PTR[16+rdi]
  547. je $L$ecb_enc_two
  548. movups xmm4,XMMWORD PTR[32+rdi]
  549. cmp rdx,040h
  550. jb $L$ecb_enc_three
  551. movups xmm5,XMMWORD PTR[48+rdi]
  552. je $L$ecb_enc_four
  553. movups xmm6,XMMWORD PTR[64+rdi]
  554. cmp rdx,060h
  555. jb $L$ecb_enc_five
  556. movups xmm7,XMMWORD PTR[80+rdi]
  557. je $L$ecb_enc_six
  558. movdqu xmm8,XMMWORD PTR[96+rdi]
  559. xorps xmm9,xmm9
  560. call _aesni_encrypt8
  561. movups XMMWORD PTR[rsi],xmm2
  562. movups XMMWORD PTR[16+rsi],xmm3
  563. movups XMMWORD PTR[32+rsi],xmm4
  564. movups XMMWORD PTR[48+rsi],xmm5
  565. movups XMMWORD PTR[64+rsi],xmm6
  566. movups XMMWORD PTR[80+rsi],xmm7
  567. movups XMMWORD PTR[96+rsi],xmm8
  568. jmp $L$ecb_ret
  569. ALIGN 16
  570. $L$ecb_enc_one::
  571. movups xmm0,XMMWORD PTR[rcx]
  572. movups xmm1,XMMWORD PTR[16+rcx]
  573. lea rcx,QWORD PTR[32+rcx]
  574. xorps xmm2,xmm0
  575. $L$oop_enc1_3::
  576. DB 102,15,56,220,209
  577. dec eax
  578. movups xmm1,XMMWORD PTR[rcx]
  579. lea rcx,QWORD PTR[16+rcx]
  580. jnz $L$oop_enc1_3
  581. DB 102,15,56,221,209
  582. movups XMMWORD PTR[rsi],xmm2
  583. jmp $L$ecb_ret
  584. ALIGN 16
  585. $L$ecb_enc_two::
  586. call _aesni_encrypt2
  587. movups XMMWORD PTR[rsi],xmm2
  588. movups XMMWORD PTR[16+rsi],xmm3
  589. jmp $L$ecb_ret
  590. ALIGN 16
  591. $L$ecb_enc_three::
  592. call _aesni_encrypt3
  593. movups XMMWORD PTR[rsi],xmm2
  594. movups XMMWORD PTR[16+rsi],xmm3
  595. movups XMMWORD PTR[32+rsi],xmm4
  596. jmp $L$ecb_ret
  597. ALIGN 16
  598. $L$ecb_enc_four::
  599. call _aesni_encrypt4
  600. movups XMMWORD PTR[rsi],xmm2
  601. movups XMMWORD PTR[16+rsi],xmm3
  602. movups XMMWORD PTR[32+rsi],xmm4
  603. movups XMMWORD PTR[48+rsi],xmm5
  604. jmp $L$ecb_ret
  605. ALIGN 16
  606. $L$ecb_enc_five::
  607. xorps xmm7,xmm7
  608. call _aesni_encrypt6
  609. movups XMMWORD PTR[rsi],xmm2
  610. movups XMMWORD PTR[16+rsi],xmm3
  611. movups XMMWORD PTR[32+rsi],xmm4
  612. movups XMMWORD PTR[48+rsi],xmm5
  613. movups XMMWORD PTR[64+rsi],xmm6
  614. jmp $L$ecb_ret
  615. ALIGN 16
  616. $L$ecb_enc_six::
  617. call _aesni_encrypt6
  618. movups XMMWORD PTR[rsi],xmm2
  619. movups XMMWORD PTR[16+rsi],xmm3
  620. movups XMMWORD PTR[32+rsi],xmm4
  621. movups XMMWORD PTR[48+rsi],xmm5
  622. movups XMMWORD PTR[64+rsi],xmm6
  623. movups XMMWORD PTR[80+rsi],xmm7
  624. jmp $L$ecb_ret
  625. ALIGN 16
  626. $L$ecb_decrypt::
  627. cmp rdx,080h
  628. jb $L$ecb_dec_tail
  629. movdqu xmm2,XMMWORD PTR[rdi]
  630. movdqu xmm3,XMMWORD PTR[16+rdi]
  631. movdqu xmm4,XMMWORD PTR[32+rdi]
  632. movdqu xmm5,XMMWORD PTR[48+rdi]
  633. movdqu xmm6,XMMWORD PTR[64+rdi]
  634. movdqu xmm7,XMMWORD PTR[80+rdi]
  635. movdqu xmm8,XMMWORD PTR[96+rdi]
  636. movdqu xmm9,XMMWORD PTR[112+rdi]
  637. lea rdi,QWORD PTR[128+rdi]
  638. sub rdx,080h
  639. jmp $L$ecb_dec_loop8_enter
  640. ALIGN 16
  641. $L$ecb_dec_loop8::
  642. movups XMMWORD PTR[rsi],xmm2
  643. mov rcx,r11
  644. movdqu xmm2,XMMWORD PTR[rdi]
  645. mov eax,r10d
  646. movups XMMWORD PTR[16+rsi],xmm3
  647. movdqu xmm3,XMMWORD PTR[16+rdi]
  648. movups XMMWORD PTR[32+rsi],xmm4
  649. movdqu xmm4,XMMWORD PTR[32+rdi]
  650. movups XMMWORD PTR[48+rsi],xmm5
  651. movdqu xmm5,XMMWORD PTR[48+rdi]
  652. movups XMMWORD PTR[64+rsi],xmm6
  653. movdqu xmm6,XMMWORD PTR[64+rdi]
  654. movups XMMWORD PTR[80+rsi],xmm7
  655. movdqu xmm7,XMMWORD PTR[80+rdi]
  656. movups XMMWORD PTR[96+rsi],xmm8
  657. movdqu xmm8,XMMWORD PTR[96+rdi]
  658. movups XMMWORD PTR[112+rsi],xmm9
  659. lea rsi,QWORD PTR[128+rsi]
  660. movdqu xmm9,XMMWORD PTR[112+rdi]
  661. lea rdi,QWORD PTR[128+rdi]
  662. $L$ecb_dec_loop8_enter::
  663. call _aesni_decrypt8
  664. movups xmm0,XMMWORD PTR[r11]
  665. sub rdx,080h
  666. jnc $L$ecb_dec_loop8
  667. movups XMMWORD PTR[rsi],xmm2
  668. pxor xmm2,xmm2
  669. mov rcx,r11
  670. movups XMMWORD PTR[16+rsi],xmm3
  671. pxor xmm3,xmm3
  672. mov eax,r10d
  673. movups XMMWORD PTR[32+rsi],xmm4
  674. pxor xmm4,xmm4
  675. movups XMMWORD PTR[48+rsi],xmm5
  676. pxor xmm5,xmm5
  677. movups XMMWORD PTR[64+rsi],xmm6
  678. pxor xmm6,xmm6
  679. movups XMMWORD PTR[80+rsi],xmm7
  680. pxor xmm7,xmm7
  681. movups XMMWORD PTR[96+rsi],xmm8
  682. pxor xmm8,xmm8
  683. movups XMMWORD PTR[112+rsi],xmm9
  684. pxor xmm9,xmm9
  685. lea rsi,QWORD PTR[128+rsi]
  686. add rdx,080h
  687. jz $L$ecb_ret
  688. $L$ecb_dec_tail::
  689. movups xmm2,XMMWORD PTR[rdi]
  690. cmp rdx,020h
  691. jb $L$ecb_dec_one
  692. movups xmm3,XMMWORD PTR[16+rdi]
  693. je $L$ecb_dec_two
  694. movups xmm4,XMMWORD PTR[32+rdi]
  695. cmp rdx,040h
  696. jb $L$ecb_dec_three
  697. movups xmm5,XMMWORD PTR[48+rdi]
  698. je $L$ecb_dec_four
  699. movups xmm6,XMMWORD PTR[64+rdi]
  700. cmp rdx,060h
  701. jb $L$ecb_dec_five
  702. movups xmm7,XMMWORD PTR[80+rdi]
  703. je $L$ecb_dec_six
  704. movups xmm8,XMMWORD PTR[96+rdi]
  705. movups xmm0,XMMWORD PTR[rcx]
  706. xorps xmm9,xmm9
  707. call _aesni_decrypt8
  708. movups XMMWORD PTR[rsi],xmm2
  709. pxor xmm2,xmm2
  710. movups XMMWORD PTR[16+rsi],xmm3
  711. pxor xmm3,xmm3
  712. movups XMMWORD PTR[32+rsi],xmm4
  713. pxor xmm4,xmm4
  714. movups XMMWORD PTR[48+rsi],xmm5
  715. pxor xmm5,xmm5
  716. movups XMMWORD PTR[64+rsi],xmm6
  717. pxor xmm6,xmm6
  718. movups XMMWORD PTR[80+rsi],xmm7
  719. pxor xmm7,xmm7
  720. movups XMMWORD PTR[96+rsi],xmm8
  721. pxor xmm8,xmm8
  722. pxor xmm9,xmm9
  723. jmp $L$ecb_ret
  724. ALIGN 16
  725. $L$ecb_dec_one::
  726. movups xmm0,XMMWORD PTR[rcx]
  727. movups xmm1,XMMWORD PTR[16+rcx]
  728. lea rcx,QWORD PTR[32+rcx]
  729. xorps xmm2,xmm0
  730. $L$oop_dec1_4::
  731. DB 102,15,56,222,209
  732. dec eax
  733. movups xmm1,XMMWORD PTR[rcx]
  734. lea rcx,QWORD PTR[16+rcx]
  735. jnz $L$oop_dec1_4
  736. DB 102,15,56,223,209
  737. movups XMMWORD PTR[rsi],xmm2
  738. pxor xmm2,xmm2
  739. jmp $L$ecb_ret
  740. ALIGN 16
  741. $L$ecb_dec_two::
  742. call _aesni_decrypt2
  743. movups XMMWORD PTR[rsi],xmm2
  744. pxor xmm2,xmm2
  745. movups XMMWORD PTR[16+rsi],xmm3
  746. pxor xmm3,xmm3
  747. jmp $L$ecb_ret
  748. ALIGN 16
  749. $L$ecb_dec_three::
  750. call _aesni_decrypt3
  751. movups XMMWORD PTR[rsi],xmm2
  752. pxor xmm2,xmm2
  753. movups XMMWORD PTR[16+rsi],xmm3
  754. pxor xmm3,xmm3
  755. movups XMMWORD PTR[32+rsi],xmm4
  756. pxor xmm4,xmm4
  757. jmp $L$ecb_ret
  758. ALIGN 16
  759. $L$ecb_dec_four::
  760. call _aesni_decrypt4
  761. movups XMMWORD PTR[rsi],xmm2
  762. pxor xmm2,xmm2
  763. movups XMMWORD PTR[16+rsi],xmm3
  764. pxor xmm3,xmm3
  765. movups XMMWORD PTR[32+rsi],xmm4
  766. pxor xmm4,xmm4
  767. movups XMMWORD PTR[48+rsi],xmm5
  768. pxor xmm5,xmm5
  769. jmp $L$ecb_ret
  770. ALIGN 16
  771. $L$ecb_dec_five::
  772. xorps xmm7,xmm7
  773. call _aesni_decrypt6
  774. movups XMMWORD PTR[rsi],xmm2
  775. pxor xmm2,xmm2
  776. movups XMMWORD PTR[16+rsi],xmm3
  777. pxor xmm3,xmm3
  778. movups XMMWORD PTR[32+rsi],xmm4
  779. pxor xmm4,xmm4
  780. movups XMMWORD PTR[48+rsi],xmm5
  781. pxor xmm5,xmm5
  782. movups XMMWORD PTR[64+rsi],xmm6
  783. pxor xmm6,xmm6
  784. pxor xmm7,xmm7
  785. jmp $L$ecb_ret
  786. ALIGN 16
  787. $L$ecb_dec_six::
  788. call _aesni_decrypt6
  789. movups XMMWORD PTR[rsi],xmm2
  790. pxor xmm2,xmm2
  791. movups XMMWORD PTR[16+rsi],xmm3
  792. pxor xmm3,xmm3
  793. movups XMMWORD PTR[32+rsi],xmm4
  794. pxor xmm4,xmm4
  795. movups XMMWORD PTR[48+rsi],xmm5
  796. pxor xmm5,xmm5
  797. movups XMMWORD PTR[64+rsi],xmm6
  798. pxor xmm6,xmm6
  799. movups XMMWORD PTR[80+rsi],xmm7
  800. pxor xmm7,xmm7
  801. $L$ecb_ret::
  802. xorps xmm0,xmm0
  803. pxor xmm1,xmm1
  804. movaps xmm6,XMMWORD PTR[rsp]
  805. movaps XMMWORD PTR[rsp],xmm0
  806. movaps xmm7,XMMWORD PTR[16+rsp]
  807. movaps XMMWORD PTR[16+rsp],xmm0
  808. movaps xmm8,XMMWORD PTR[32+rsp]
  809. movaps XMMWORD PTR[32+rsp],xmm0
  810. movaps xmm9,XMMWORD PTR[48+rsp]
  811. movaps XMMWORD PTR[48+rsp],xmm0
  812. lea rsp,QWORD PTR[88+rsp]
  813. $L$ecb_enc_ret::
  814. mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
  815. mov rsi,QWORD PTR[16+rsp]
  816. DB 0F3h,0C3h ;repret
  817. $L$SEH_end_aesni_ecb_encrypt::
  818. aesni_ecb_encrypt ENDP
  819. PUBLIC aesni_ccm64_encrypt_blocks
  820. ALIGN 16
  821. aesni_ccm64_encrypt_blocks PROC PUBLIC
  822. mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
  823. mov QWORD PTR[16+rsp],rsi
  824. mov rax,rsp
  825. $L$SEH_begin_aesni_ccm64_encrypt_blocks::
  826. mov rdi,rcx
  827. mov rsi,rdx
  828. mov rdx,r8
  829. mov rcx,r9
  830. mov r8,QWORD PTR[40+rsp]
  831. mov r9,QWORD PTR[48+rsp]
  832. lea rsp,QWORD PTR[((-88))+rsp]
  833. movaps XMMWORD PTR[rsp],xmm6
  834. movaps XMMWORD PTR[16+rsp],xmm7
  835. movaps XMMWORD PTR[32+rsp],xmm8
  836. movaps XMMWORD PTR[48+rsp],xmm9
  837. $L$ccm64_enc_body::
  838. mov eax,DWORD PTR[240+rcx]
  839. movdqu xmm6,XMMWORD PTR[r8]
  840. movdqa xmm9,XMMWORD PTR[$L$increment64]
  841. movdqa xmm7,XMMWORD PTR[$L$bswap_mask]
  842. shl eax,4
  843. mov r10d,16
  844. lea r11,QWORD PTR[rcx]
  845. movdqu xmm3,XMMWORD PTR[r9]
  846. movdqa xmm2,xmm6
  847. lea rcx,QWORD PTR[32+rax*1+rcx]
  848. DB 102,15,56,0,247
  849. sub r10,rax
  850. jmp $L$ccm64_enc_outer
  851. ALIGN 16
  852. $L$ccm64_enc_outer::
  853. movups xmm0,XMMWORD PTR[r11]
  854. mov rax,r10
  855. movups xmm8,XMMWORD PTR[rdi]
  856. xorps xmm2,xmm0
  857. movups xmm1,XMMWORD PTR[16+r11]
  858. xorps xmm0,xmm8
  859. xorps xmm3,xmm0
  860. movups xmm0,XMMWORD PTR[32+r11]
  861. $L$ccm64_enc2_loop::
  862. DB 102,15,56,220,209
  863. DB 102,15,56,220,217
  864. movups xmm1,XMMWORD PTR[rax*1+rcx]
  865. add rax,32
  866. DB 102,15,56,220,208
  867. DB 102,15,56,220,216
  868. movups xmm0,XMMWORD PTR[((-16))+rax*1+rcx]
  869. jnz $L$ccm64_enc2_loop
  870. DB 102,15,56,220,209
  871. DB 102,15,56,220,217
  872. paddq xmm6,xmm9
  873. dec rdx
  874. DB 102,15,56,221,208
  875. DB 102,15,56,221,216
  876. lea rdi,QWORD PTR[16+rdi]
  877. xorps xmm8,xmm2
  878. movdqa xmm2,xmm6
  879. movups XMMWORD PTR[rsi],xmm8
  880. DB 102,15,56,0,215
  881. lea rsi,QWORD PTR[16+rsi]
  882. jnz $L$ccm64_enc_outer
  883. pxor xmm0,xmm0
  884. pxor xmm1,xmm1
  885. pxor xmm2,xmm2
  886. movups XMMWORD PTR[r9],xmm3
  887. pxor xmm3,xmm3
  888. pxor xmm8,xmm8
  889. pxor xmm6,xmm6
  890. movaps xmm6,XMMWORD PTR[rsp]
  891. movaps XMMWORD PTR[rsp],xmm0
  892. movaps xmm7,XMMWORD PTR[16+rsp]
  893. movaps XMMWORD PTR[16+rsp],xmm0
  894. movaps xmm8,XMMWORD PTR[32+rsp]
  895. movaps XMMWORD PTR[32+rsp],xmm0
  896. movaps xmm9,XMMWORD PTR[48+rsp]
  897. movaps XMMWORD PTR[48+rsp],xmm0
  898. lea rsp,QWORD PTR[88+rsp]
  899. $L$ccm64_enc_ret::
  900. mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
  901. mov rsi,QWORD PTR[16+rsp]
  902. DB 0F3h,0C3h ;repret
  903. $L$SEH_end_aesni_ccm64_encrypt_blocks::
  904. aesni_ccm64_encrypt_blocks ENDP
  905. PUBLIC aesni_ccm64_decrypt_blocks
  906. ALIGN 16
  907. aesni_ccm64_decrypt_blocks PROC PUBLIC
  908. mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
  909. mov QWORD PTR[16+rsp],rsi
  910. mov rax,rsp
  911. $L$SEH_begin_aesni_ccm64_decrypt_blocks::
  912. mov rdi,rcx
  913. mov rsi,rdx
  914. mov rdx,r8
  915. mov rcx,r9
  916. mov r8,QWORD PTR[40+rsp]
  917. mov r9,QWORD PTR[48+rsp]
  918. lea rsp,QWORD PTR[((-88))+rsp]
  919. movaps XMMWORD PTR[rsp],xmm6
  920. movaps XMMWORD PTR[16+rsp],xmm7
  921. movaps XMMWORD PTR[32+rsp],xmm8
  922. movaps XMMWORD PTR[48+rsp],xmm9
  923. $L$ccm64_dec_body::
  924. mov eax,DWORD PTR[240+rcx]
  925. movups xmm6,XMMWORD PTR[r8]
  926. movdqu xmm3,XMMWORD PTR[r9]
  927. movdqa xmm9,XMMWORD PTR[$L$increment64]
  928. movdqa xmm7,XMMWORD PTR[$L$bswap_mask]
  929. movaps xmm2,xmm6
  930. mov r10d,eax
  931. mov r11,rcx
  932. DB 102,15,56,0,247
  933. movups xmm0,XMMWORD PTR[rcx]
  934. movups xmm1,XMMWORD PTR[16+rcx]
  935. lea rcx,QWORD PTR[32+rcx]
  936. xorps xmm2,xmm0
  937. $L$oop_enc1_5::
  938. DB 102,15,56,220,209
  939. dec eax
  940. movups xmm1,XMMWORD PTR[rcx]
  941. lea rcx,QWORD PTR[16+rcx]
  942. jnz $L$oop_enc1_5
  943. DB 102,15,56,221,209
  944. shl r10d,4
  945. mov eax,16
  946. movups xmm8,XMMWORD PTR[rdi]
  947. paddq xmm6,xmm9
  948. lea rdi,QWORD PTR[16+rdi]
  949. sub rax,r10
  950. lea rcx,QWORD PTR[32+r10*1+r11]
  951. mov r10,rax
  952. jmp $L$ccm64_dec_outer
  953. ALIGN 16
  954. $L$ccm64_dec_outer::
  955. xorps xmm8,xmm2
  956. movdqa xmm2,xmm6
  957. movups XMMWORD PTR[rsi],xmm8
  958. lea rsi,QWORD PTR[16+rsi]
  959. DB 102,15,56,0,215
  960. sub rdx,1
  961. jz $L$ccm64_dec_break
  962. movups xmm0,XMMWORD PTR[r11]
  963. mov rax,r10
  964. movups xmm1,XMMWORD PTR[16+r11]
  965. xorps xmm8,xmm0
  966. xorps xmm2,xmm0
  967. xorps xmm3,xmm8
  968. movups xmm0,XMMWORD PTR[32+r11]
  969. jmp $L$ccm64_dec2_loop
  970. ALIGN 16
  971. $L$ccm64_dec2_loop::
  972. DB 102,15,56,220,209
  973. DB 102,15,56,220,217
  974. movups xmm1,XMMWORD PTR[rax*1+rcx]
  975. add rax,32
  976. DB 102,15,56,220,208
  977. DB 102,15,56,220,216
  978. movups xmm0,XMMWORD PTR[((-16))+rax*1+rcx]
  979. jnz $L$ccm64_dec2_loop
  980. movups xmm8,XMMWORD PTR[rdi]
  981. paddq xmm6,xmm9
  982. DB 102,15,56,220,209
  983. DB 102,15,56,220,217
  984. DB 102,15,56,221,208
  985. DB 102,15,56,221,216
  986. lea rdi,QWORD PTR[16+rdi]
  987. jmp $L$ccm64_dec_outer
  988. ALIGN 16
  989. $L$ccm64_dec_break::
  990. mov eax,DWORD PTR[240+r11]
  991. movups xmm0,XMMWORD PTR[r11]
  992. movups xmm1,XMMWORD PTR[16+r11]
  993. xorps xmm8,xmm0
  994. lea r11,QWORD PTR[32+r11]
  995. xorps xmm3,xmm8
  996. $L$oop_enc1_6::
  997. DB 102,15,56,220,217
  998. dec eax
  999. movups xmm1,XMMWORD PTR[r11]
  1000. lea r11,QWORD PTR[16+r11]
  1001. jnz $L$oop_enc1_6
  1002. DB 102,15,56,221,217
  1003. pxor xmm0,xmm0
  1004. pxor xmm1,xmm1
  1005. pxor xmm2,xmm2
  1006. movups XMMWORD PTR[r9],xmm3
  1007. pxor xmm3,xmm3
  1008. pxor xmm8,xmm8
  1009. pxor xmm6,xmm6
  1010. movaps xmm6,XMMWORD PTR[rsp]
  1011. movaps XMMWORD PTR[rsp],xmm0
  1012. movaps xmm7,XMMWORD PTR[16+rsp]
  1013. movaps XMMWORD PTR[16+rsp],xmm0
  1014. movaps xmm8,XMMWORD PTR[32+rsp]
  1015. movaps XMMWORD PTR[32+rsp],xmm0
  1016. movaps xmm9,XMMWORD PTR[48+rsp]
  1017. movaps XMMWORD PTR[48+rsp],xmm0
  1018. lea rsp,QWORD PTR[88+rsp]
  1019. $L$ccm64_dec_ret::
  1020. mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
  1021. mov rsi,QWORD PTR[16+rsp]
  1022. DB 0F3h,0C3h ;repret
  1023. $L$SEH_end_aesni_ccm64_decrypt_blocks::
  1024. aesni_ccm64_decrypt_blocks ENDP
  1025. PUBLIC aesni_ctr32_encrypt_blocks
  1026. ALIGN 16
  1027. aesni_ctr32_encrypt_blocks PROC PUBLIC
  1028. mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
  1029. mov QWORD PTR[16+rsp],rsi
  1030. mov rax,rsp
  1031. $L$SEH_begin_aesni_ctr32_encrypt_blocks::
  1032. mov rdi,rcx
  1033. mov rsi,rdx
  1034. mov rdx,r8
  1035. mov rcx,r9
  1036. mov r8,QWORD PTR[40+rsp]
  1037. cmp rdx,1
  1038. jne $L$ctr32_bulk
  1039. movups xmm2,XMMWORD PTR[r8]
  1040. movups xmm3,XMMWORD PTR[rdi]
  1041. mov edx,DWORD PTR[240+rcx]
  1042. movups xmm0,XMMWORD PTR[rcx]
  1043. movups xmm1,XMMWORD PTR[16+rcx]
  1044. lea rcx,QWORD PTR[32+rcx]
  1045. xorps xmm2,xmm0
  1046. $L$oop_enc1_7::
  1047. DB 102,15,56,220,209
  1048. dec edx
  1049. movups xmm1,XMMWORD PTR[rcx]
  1050. lea rcx,QWORD PTR[16+rcx]
  1051. jnz $L$oop_enc1_7
  1052. DB 102,15,56,221,209
  1053. pxor xmm0,xmm0
  1054. pxor xmm1,xmm1
  1055. xorps xmm2,xmm3
  1056. pxor xmm3,xmm3
  1057. movups XMMWORD PTR[rsi],xmm2
  1058. xorps xmm2,xmm2
  1059. jmp $L$ctr32_epilogue
  1060. ALIGN 16
  1061. $L$ctr32_bulk::
  1062. lea r11,QWORD PTR[rsp]
  1063. push rbp
  1064. sub rsp,288
  1065. and rsp,-16
  1066. movaps XMMWORD PTR[(-168)+r11],xmm6
  1067. movaps XMMWORD PTR[(-152)+r11],xmm7
  1068. movaps XMMWORD PTR[(-136)+r11],xmm8
  1069. movaps XMMWORD PTR[(-120)+r11],xmm9
  1070. movaps XMMWORD PTR[(-104)+r11],xmm10
  1071. movaps XMMWORD PTR[(-88)+r11],xmm11
  1072. movaps XMMWORD PTR[(-72)+r11],xmm12
  1073. movaps XMMWORD PTR[(-56)+r11],xmm13
  1074. movaps XMMWORD PTR[(-40)+r11],xmm14
  1075. movaps XMMWORD PTR[(-24)+r11],xmm15
  1076. $L$ctr32_body::
  1077. movdqu xmm2,XMMWORD PTR[r8]
  1078. movdqu xmm0,XMMWORD PTR[rcx]
  1079. mov r8d,DWORD PTR[12+r8]
  1080. pxor xmm2,xmm0
  1081. mov ebp,DWORD PTR[12+rcx]
  1082. movdqa XMMWORD PTR[rsp],xmm2
  1083. bswap r8d
  1084. movdqa xmm3,xmm2
  1085. movdqa xmm4,xmm2
  1086. movdqa xmm5,xmm2
  1087. movdqa XMMWORD PTR[64+rsp],xmm2
  1088. movdqa XMMWORD PTR[80+rsp],xmm2
  1089. movdqa XMMWORD PTR[96+rsp],xmm2
  1090. mov r10,rdx
  1091. movdqa XMMWORD PTR[112+rsp],xmm2
  1092. lea rax,QWORD PTR[1+r8]
  1093. lea rdx,QWORD PTR[2+r8]
  1094. bswap eax
  1095. bswap edx
  1096. xor eax,ebp
  1097. xor edx,ebp
  1098. DB 102,15,58,34,216,3
  1099. lea rax,QWORD PTR[3+r8]
  1100. movdqa XMMWORD PTR[16+rsp],xmm3
  1101. DB 102,15,58,34,226,3
  1102. bswap eax
  1103. mov rdx,r10
  1104. lea r10,QWORD PTR[4+r8]
  1105. movdqa XMMWORD PTR[32+rsp],xmm4
  1106. xor eax,ebp
  1107. bswap r10d
  1108. DB 102,15,58,34,232,3
  1109. xor r10d,ebp
  1110. movdqa XMMWORD PTR[48+rsp],xmm5
  1111. lea r9,QWORD PTR[5+r8]
  1112. mov DWORD PTR[((64+12))+rsp],r10d
  1113. bswap r9d
  1114. lea r10,QWORD PTR[6+r8]
  1115. mov eax,DWORD PTR[240+rcx]
  1116. xor r9d,ebp
  1117. bswap r10d
  1118. mov DWORD PTR[((80+12))+rsp],r9d
  1119. xor r10d,ebp
  1120. lea r9,QWORD PTR[7+r8]
  1121. mov DWORD PTR[((96+12))+rsp],r10d
  1122. bswap r9d
  1123. mov r10d,DWORD PTR[((OPENSSL_ia32cap_P+4))]
  1124. xor r9d,ebp
  1125. and r10d,71303168
  1126. mov DWORD PTR[((112+12))+rsp],r9d
  1127. movups xmm1,XMMWORD PTR[16+rcx]
  1128. movdqa xmm6,XMMWORD PTR[64+rsp]
  1129. movdqa xmm7,XMMWORD PTR[80+rsp]
  1130. cmp rdx,8
  1131. jb $L$ctr32_tail
  1132. sub rdx,6
  1133. cmp r10d,4194304
  1134. je $L$ctr32_6x
  1135. lea rcx,QWORD PTR[128+rcx]
  1136. sub rdx,2
  1137. jmp $L$ctr32_loop8
  1138. ALIGN 16
  1139. $L$ctr32_6x::
  1140. shl eax,4
  1141. mov r10d,48
  1142. bswap ebp
  1143. lea rcx,QWORD PTR[32+rax*1+rcx]
  1144. sub r10,rax
  1145. jmp $L$ctr32_loop6
  1146. ALIGN 16
  1147. $L$ctr32_loop6::
  1148. add r8d,6
  1149. movups xmm0,XMMWORD PTR[((-48))+r10*1+rcx]
  1150. DB 102,15,56,220,209
  1151. mov eax,r8d
  1152. xor eax,ebp
  1153. DB 102,15,56,220,217
  1154. DB 00fh,038h,0f1h,044h,024h,12
  1155. lea eax,DWORD PTR[1+r8]
  1156. DB 102,15,56,220,225
  1157. xor eax,ebp
  1158. DB 00fh,038h,0f1h,044h,024h,28
  1159. DB 102,15,56,220,233
  1160. lea eax,DWORD PTR[2+r8]
  1161. xor eax,ebp
  1162. DB 102,15,56,220,241
  1163. DB 00fh,038h,0f1h,044h,024h,44
  1164. lea eax,DWORD PTR[3+r8]
  1165. DB 102,15,56,220,249
  1166. movups xmm1,XMMWORD PTR[((-32))+r10*1+rcx]
  1167. xor eax,ebp
  1168. DB 102,15,56,220,208
  1169. DB 00fh,038h,0f1h,044h,024h,60
  1170. lea eax,DWORD PTR[4+r8]
  1171. DB 102,15,56,220,216
  1172. xor eax,ebp
  1173. DB 00fh,038h,0f1h,044h,024h,76
  1174. DB 102,15,56,220,224
  1175. lea eax,DWORD PTR[5+r8]
  1176. xor eax,ebp
  1177. DB 102,15,56,220,232
  1178. DB 00fh,038h,0f1h,044h,024h,92
  1179. mov rax,r10
  1180. DB 102,15,56,220,240
  1181. DB 102,15,56,220,248
  1182. movups xmm0,XMMWORD PTR[((-16))+r10*1+rcx]
  1183. call $L$enc_loop6
  1184. movdqu xmm8,XMMWORD PTR[rdi]
  1185. movdqu xmm9,XMMWORD PTR[16+rdi]
  1186. movdqu xmm10,XMMWORD PTR[32+rdi]
  1187. movdqu xmm11,XMMWORD PTR[48+rdi]
  1188. movdqu xmm12,XMMWORD PTR[64+rdi]
  1189. movdqu xmm13,XMMWORD PTR[80+rdi]
  1190. lea rdi,QWORD PTR[96+rdi]
  1191. movups xmm1,XMMWORD PTR[((-64))+r10*1+rcx]
  1192. pxor xmm8,xmm2
  1193. movaps xmm2,XMMWORD PTR[rsp]
  1194. pxor xmm9,xmm3
  1195. movaps xmm3,XMMWORD PTR[16+rsp]
  1196. pxor xmm10,xmm4
  1197. movaps xmm4,XMMWORD PTR[32+rsp]
  1198. pxor xmm11,xmm5
  1199. movaps xmm5,XMMWORD PTR[48+rsp]
  1200. pxor xmm12,xmm6
  1201. movaps xmm6,XMMWORD PTR[64+rsp]
  1202. pxor xmm13,xmm7
  1203. movaps xmm7,XMMWORD PTR[80+rsp]
  1204. movdqu XMMWORD PTR[rsi],xmm8
  1205. movdqu XMMWORD PTR[16+rsi],xmm9
  1206. movdqu XMMWORD PTR[32+rsi],xmm10
  1207. movdqu XMMWORD PTR[48+rsi],xmm11
  1208. movdqu XMMWORD PTR[64+rsi],xmm12
  1209. movdqu XMMWORD PTR[80+rsi],xmm13
  1210. lea rsi,QWORD PTR[96+rsi]
  1211. sub rdx,6
  1212. jnc $L$ctr32_loop6
  1213. add rdx,6
  1214. jz $L$ctr32_done
  1215. lea eax,DWORD PTR[((-48))+r10]
  1216. lea rcx,QWORD PTR[((-80))+r10*1+rcx]
  1217. neg eax
  1218. shr eax,4
  1219. jmp $L$ctr32_tail
  1220. ALIGN 32
  1221. $L$ctr32_loop8::
  1222. add r8d,8
  1223. movdqa xmm8,XMMWORD PTR[96+rsp]
  1224. DB 102,15,56,220,209
  1225. mov r9d,r8d
  1226. movdqa xmm9,XMMWORD PTR[112+rsp]
  1227. DB 102,15,56,220,217
  1228. bswap r9d
  1229. movups xmm0,XMMWORD PTR[((32-128))+rcx]
  1230. DB 102,15,56,220,225
  1231. xor r9d,ebp
  1232. nop
  1233. DB 102,15,56,220,233
  1234. mov DWORD PTR[((0+12))+rsp],r9d
  1235. lea r9,QWORD PTR[1+r8]
  1236. DB 102,15,56,220,241
  1237. DB 102,15,56,220,249
  1238. DB 102,68,15,56,220,193
  1239. DB 102,68,15,56,220,201
  1240. movups xmm1,XMMWORD PTR[((48-128))+rcx]
  1241. bswap r9d
  1242. DB 102,15,56,220,208
  1243. DB 102,15,56,220,216
  1244. xor r9d,ebp
  1245. DB 066h,090h
  1246. DB 102,15,56,220,224
  1247. DB 102,15,56,220,232
  1248. mov DWORD PTR[((16+12))+rsp],r9d
  1249. lea r9,QWORD PTR[2+r8]
  1250. DB 102,15,56,220,240
  1251. DB 102,15,56,220,248
  1252. DB 102,68,15,56,220,192
  1253. DB 102,68,15,56,220,200
  1254. movups xmm0,XMMWORD PTR[((64-128))+rcx]
  1255. bswap r9d
  1256. DB 102,15,56,220,209
  1257. DB 102,15,56,220,217
  1258. xor r9d,ebp
  1259. DB 066h,090h
  1260. DB 102,15,56,220,225
  1261. DB 102,15,56,220,233
  1262. mov DWORD PTR[((32+12))+rsp],r9d
  1263. lea r9,QWORD PTR[3+r8]
  1264. DB 102,15,56,220,241
  1265. DB 102,15,56,220,249
  1266. DB 102,68,15,56,220,193
  1267. DB 102,68,15,56,220,201
  1268. movups xmm1,XMMWORD PTR[((80-128))+rcx]
  1269. bswap r9d
  1270. DB 102,15,56,220,208
  1271. DB 102,15,56,220,216
  1272. xor r9d,ebp
  1273. DB 066h,090h
  1274. DB 102,15,56,220,224
  1275. DB 102,15,56,220,232
  1276. mov DWORD PTR[((48+12))+rsp],r9d
  1277. lea r9,QWORD PTR[4+r8]
  1278. DB 102,15,56,220,240
  1279. DB 102,15,56,220,248
  1280. DB 102,68,15,56,220,192
  1281. DB 102,68,15,56,220,200
  1282. movups xmm0,XMMWORD PTR[((96-128))+rcx]
  1283. bswap r9d
  1284. DB 102,15,56,220,209
  1285. DB 102,15,56,220,217
  1286. xor r9d,ebp
  1287. DB 066h,090h
  1288. DB 102,15,56,220,225
  1289. DB 102,15,56,220,233
  1290. mov DWORD PTR[((64+12))+rsp],r9d
  1291. lea r9,QWORD PTR[5+r8]
  1292. DB 102,15,56,220,241
  1293. DB 102,15,56,220,249
  1294. DB 102,68,15,56,220,193
  1295. DB 102,68,15,56,220,201
  1296. movups xmm1,XMMWORD PTR[((112-128))+rcx]
  1297. bswap r9d
  1298. DB 102,15,56,220,208
  1299. DB 102,15,56,220,216
  1300. xor r9d,ebp
  1301. DB 066h,090h
  1302. DB 102,15,56,220,224
  1303. DB 102,15,56,220,232
  1304. mov DWORD PTR[((80+12))+rsp],r9d
  1305. lea r9,QWORD PTR[6+r8]
  1306. DB 102,15,56,220,240
  1307. DB 102,15,56,220,248
  1308. DB 102,68,15,56,220,192
  1309. DB 102,68,15,56,220,200
  1310. movups xmm0,XMMWORD PTR[((128-128))+rcx]
  1311. bswap r9d
  1312. DB 102,15,56,220,209
  1313. DB 102,15,56,220,217
  1314. xor r9d,ebp
  1315. DB 066h,090h
  1316. DB 102,15,56,220,225
  1317. DB 102,15,56,220,233
  1318. mov DWORD PTR[((96+12))+rsp],r9d
  1319. lea r9,QWORD PTR[7+r8]
  1320. DB 102,15,56,220,241
  1321. DB 102,15,56,220,249
  1322. DB 102,68,15,56,220,193
  1323. DB 102,68,15,56,220,201
  1324. movups xmm1,XMMWORD PTR[((144-128))+rcx]
  1325. bswap r9d
  1326. DB 102,15,56,220,208
  1327. DB 102,15,56,220,216
  1328. DB 102,15,56,220,224
  1329. xor r9d,ebp
  1330. movdqu xmm10,XMMWORD PTR[rdi]
  1331. DB 102,15,56,220,232
  1332. mov DWORD PTR[((112+12))+rsp],r9d
  1333. cmp eax,11
  1334. DB 102,15,56,220,240
  1335. DB 102,15,56,220,248
  1336. DB 102,68,15,56,220,192
  1337. DB 102,68,15,56,220,200
  1338. movups xmm0,XMMWORD PTR[((160-128))+rcx]
  1339. jb $L$ctr32_enc_done
  1340. DB 102,15,56,220,209
  1341. DB 102,15,56,220,217
  1342. DB 102,15,56,220,225
  1343. DB 102,15,56,220,233
  1344. DB 102,15,56,220,241
  1345. DB 102,15,56,220,249
  1346. DB 102,68,15,56,220,193
  1347. DB 102,68,15,56,220,201
  1348. movups xmm1,XMMWORD PTR[((176-128))+rcx]
  1349. DB 102,15,56,220,208
  1350. DB 102,15,56,220,216
  1351. DB 102,15,56,220,224
  1352. DB 102,15,56,220,232
  1353. DB 102,15,56,220,240
  1354. DB 102,15,56,220,248
  1355. DB 102,68,15,56,220,192
  1356. DB 102,68,15,56,220,200
  1357. movups xmm0,XMMWORD PTR[((192-128))+rcx]
  1358. je $L$ctr32_enc_done
  1359. DB 102,15,56,220,209
  1360. DB 102,15,56,220,217
  1361. DB 102,15,56,220,225
  1362. DB 102,15,56,220,233
  1363. DB 102,15,56,220,241
  1364. DB 102,15,56,220,249
  1365. DB 102,68,15,56,220,193
  1366. DB 102,68,15,56,220,201
  1367. movups xmm1,XMMWORD PTR[((208-128))+rcx]
  1368. DB 102,15,56,220,208
  1369. DB 102,15,56,220,216
  1370. DB 102,15,56,220,224
  1371. DB 102,15,56,220,232
  1372. DB 102,15,56,220,240
  1373. DB 102,15,56,220,248
  1374. DB 102,68,15,56,220,192
  1375. DB 102,68,15,56,220,200
  1376. movups xmm0,XMMWORD PTR[((224-128))+rcx]
  1377. jmp $L$ctr32_enc_done
  1378. ALIGN 16
  1379. $L$ctr32_enc_done::
  1380. movdqu xmm11,XMMWORD PTR[16+rdi]
  1381. pxor xmm10,xmm0
  1382. movdqu xmm12,XMMWORD PTR[32+rdi]
  1383. pxor xmm11,xmm0
  1384. movdqu xmm13,XMMWORD PTR[48+rdi]
  1385. pxor xmm12,xmm0
  1386. movdqu xmm14,XMMWORD PTR[64+rdi]
  1387. pxor xmm13,xmm0
  1388. movdqu xmm15,XMMWORD PTR[80+rdi]
  1389. pxor xmm14,xmm0
  1390. pxor xmm15,xmm0
  1391. DB 102,15,56,220,209
  1392. DB 102,15,56,220,217
  1393. DB 102,15,56,220,225
  1394. DB 102,15,56,220,233
  1395. DB 102,15,56,220,241
  1396. DB 102,15,56,220,249
  1397. DB 102,68,15,56,220,193
  1398. DB 102,68,15,56,220,201
  1399. movdqu xmm1,XMMWORD PTR[96+rdi]
  1400. lea rdi,QWORD PTR[128+rdi]
  1401. DB 102,65,15,56,221,210
  1402. pxor xmm1,xmm0
  1403. movdqu xmm10,XMMWORD PTR[((112-128))+rdi]
  1404. DB 102,65,15,56,221,219
  1405. pxor xmm10,xmm0
  1406. movdqa xmm11,XMMWORD PTR[rsp]
  1407. DB 102,65,15,56,221,228
  1408. DB 102,65,15,56,221,237
  1409. movdqa xmm12,XMMWORD PTR[16+rsp]
  1410. movdqa xmm13,XMMWORD PTR[32+rsp]
  1411. DB 102,65,15,56,221,246
  1412. DB 102,65,15,56,221,255
  1413. movdqa xmm14,XMMWORD PTR[48+rsp]
  1414. movdqa xmm15,XMMWORD PTR[64+rsp]
  1415. DB 102,68,15,56,221,193
  1416. movdqa xmm0,XMMWORD PTR[80+rsp]
  1417. movups xmm1,XMMWORD PTR[((16-128))+rcx]
  1418. DB 102,69,15,56,221,202
  1419. movups XMMWORD PTR[rsi],xmm2
  1420. movdqa xmm2,xmm11
  1421. movups XMMWORD PTR[16+rsi],xmm3
  1422. movdqa xmm3,xmm12
  1423. movups XMMWORD PTR[32+rsi],xmm4
  1424. movdqa xmm4,xmm13
  1425. movups XMMWORD PTR[48+rsi],xmm5
  1426. movdqa xmm5,xmm14
  1427. movups XMMWORD PTR[64+rsi],xmm6
  1428. movdqa xmm6,xmm15
  1429. movups XMMWORD PTR[80+rsi],xmm7
  1430. movdqa xmm7,xmm0
  1431. movups XMMWORD PTR[96+rsi],xmm8
  1432. movups XMMWORD PTR[112+rsi],xmm9
  1433. lea rsi,QWORD PTR[128+rsi]
  1434. sub rdx,8
  1435. jnc $L$ctr32_loop8
  1436. add rdx,8
  1437. jz $L$ctr32_done
  1438. lea rcx,QWORD PTR[((-128))+rcx]
  1439. $L$ctr32_tail::
  1440. lea rcx,QWORD PTR[16+rcx]
  1441. cmp rdx,4
  1442. jb $L$ctr32_loop3
  1443. je $L$ctr32_loop4
  1444. shl eax,4
  1445. movdqa xmm8,XMMWORD PTR[96+rsp]
  1446. pxor xmm9,xmm9
  1447. movups xmm0,XMMWORD PTR[16+rcx]
  1448. DB 102,15,56,220,209
  1449. DB 102,15,56,220,217
  1450. lea rcx,QWORD PTR[((32-16))+rax*1+rcx]
  1451. neg rax
  1452. DB 102,15,56,220,225
  1453. add rax,16
  1454. movups xmm10,XMMWORD PTR[rdi]
  1455. DB 102,15,56,220,233
  1456. DB 102,15,56,220,241
  1457. movups xmm11,XMMWORD PTR[16+rdi]
  1458. movups xmm12,XMMWORD PTR[32+rdi]
  1459. DB 102,15,56,220,249
  1460. DB 102,68,15,56,220,193
  1461. call $L$enc_loop8_enter
  1462. movdqu xmm13,XMMWORD PTR[48+rdi]
  1463. pxor xmm2,xmm10
  1464. movdqu xmm10,XMMWORD PTR[64+rdi]
  1465. pxor xmm3,xmm11
  1466. movdqu XMMWORD PTR[rsi],xmm2
  1467. pxor xmm4,xmm12
  1468. movdqu XMMWORD PTR[16+rsi],xmm3
  1469. pxor xmm5,xmm13
  1470. movdqu XMMWORD PTR[32+rsi],xmm4
  1471. pxor xmm6,xmm10
  1472. movdqu XMMWORD PTR[48+rsi],xmm5
  1473. movdqu XMMWORD PTR[64+rsi],xmm6
  1474. cmp rdx,6
  1475. jb $L$ctr32_done
  1476. movups xmm11,XMMWORD PTR[80+rdi]
  1477. xorps xmm7,xmm11
  1478. movups XMMWORD PTR[80+rsi],xmm7
  1479. je $L$ctr32_done
  1480. movups xmm12,XMMWORD PTR[96+rdi]
  1481. xorps xmm8,xmm12
  1482. movups XMMWORD PTR[96+rsi],xmm8
  1483. jmp $L$ctr32_done
  1484. ALIGN 32
  1485. $L$ctr32_loop4::
  1486. DB 102,15,56,220,209
  1487. lea rcx,QWORD PTR[16+rcx]
  1488. dec eax
  1489. DB 102,15,56,220,217
  1490. DB 102,15,56,220,225
  1491. DB 102,15,56,220,233
  1492. movups xmm1,XMMWORD PTR[rcx]
  1493. jnz $L$ctr32_loop4
  1494. DB 102,15,56,221,209
  1495. DB 102,15,56,221,217
  1496. movups xmm10,XMMWORD PTR[rdi]
  1497. movups xmm11,XMMWORD PTR[16+rdi]
  1498. DB 102,15,56,221,225
  1499. DB 102,15,56,221,233
  1500. movups xmm12,XMMWORD PTR[32+rdi]
  1501. movups xmm13,XMMWORD PTR[48+rdi]
  1502. xorps xmm2,xmm10
  1503. movups XMMWORD PTR[rsi],xmm2
  1504. xorps xmm3,xmm11
  1505. movups XMMWORD PTR[16+rsi],xmm3
  1506. pxor xmm4,xmm12
  1507. movdqu XMMWORD PTR[32+rsi],xmm4
  1508. pxor xmm5,xmm13
  1509. movdqu XMMWORD PTR[48+rsi],xmm5
  1510. jmp $L$ctr32_done
  1511. ALIGN 32
  1512. $L$ctr32_loop3::
  1513. DB 102,15,56,220,209
  1514. lea rcx,QWORD PTR[16+rcx]
  1515. dec eax
  1516. DB 102,15,56,220,217
  1517. DB 102,15,56,220,225
  1518. movups xmm1,XMMWORD PTR[rcx]
  1519. jnz $L$ctr32_loop3
  1520. DB 102,15,56,221,209
  1521. DB 102,15,56,221,217
  1522. DB 102,15,56,221,225
  1523. movups xmm10,XMMWORD PTR[rdi]
  1524. xorps xmm2,xmm10
  1525. movups XMMWORD PTR[rsi],xmm2
  1526. cmp rdx,2
  1527. jb $L$ctr32_done
  1528. movups xmm11,XMMWORD PTR[16+rdi]
  1529. xorps xmm3,xmm11
  1530. movups XMMWORD PTR[16+rsi],xmm3
  1531. je $L$ctr32_done
  1532. movups xmm12,XMMWORD PTR[32+rdi]
  1533. xorps xmm4,xmm12
  1534. movups XMMWORD PTR[32+rsi],xmm4
  1535. $L$ctr32_done::
  1536. xorps xmm0,xmm0
  1537. xor ebp,ebp
  1538. pxor xmm1,xmm1
  1539. pxor xmm2,xmm2
  1540. pxor xmm3,xmm3
  1541. pxor xmm4,xmm4
  1542. pxor xmm5,xmm5
  1543. movaps xmm6,XMMWORD PTR[((-168))+r11]
  1544. movaps XMMWORD PTR[(-168)+r11],xmm0
  1545. movaps xmm7,XMMWORD PTR[((-152))+r11]
  1546. movaps XMMWORD PTR[(-152)+r11],xmm0
  1547. movaps xmm8,XMMWORD PTR[((-136))+r11]
  1548. movaps XMMWORD PTR[(-136)+r11],xmm0
  1549. movaps xmm9,XMMWORD PTR[((-120))+r11]
  1550. movaps XMMWORD PTR[(-120)+r11],xmm0
  1551. movaps xmm10,XMMWORD PTR[((-104))+r11]
  1552. movaps XMMWORD PTR[(-104)+r11],xmm0
  1553. movaps xmm11,XMMWORD PTR[((-88))+r11]
  1554. movaps XMMWORD PTR[(-88)+r11],xmm0
  1555. movaps xmm12,XMMWORD PTR[((-72))+r11]
  1556. movaps XMMWORD PTR[(-72)+r11],xmm0
  1557. movaps xmm13,XMMWORD PTR[((-56))+r11]
  1558. movaps XMMWORD PTR[(-56)+r11],xmm0
  1559. movaps xmm14,XMMWORD PTR[((-40))+r11]
  1560. movaps XMMWORD PTR[(-40)+r11],xmm0
  1561. movaps xmm15,XMMWORD PTR[((-24))+r11]
  1562. movaps XMMWORD PTR[(-24)+r11],xmm0
  1563. movaps XMMWORD PTR[rsp],xmm0
  1564. movaps XMMWORD PTR[16+rsp],xmm0
  1565. movaps XMMWORD PTR[32+rsp],xmm0
  1566. movaps XMMWORD PTR[48+rsp],xmm0
  1567. movaps XMMWORD PTR[64+rsp],xmm0
  1568. movaps XMMWORD PTR[80+rsp],xmm0
  1569. movaps XMMWORD PTR[96+rsp],xmm0
  1570. movaps XMMWORD PTR[112+rsp],xmm0
  1571. mov rbp,QWORD PTR[((-8))+r11]
  1572. lea rsp,QWORD PTR[r11]
  1573. $L$ctr32_epilogue::
  1574. mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
  1575. mov rsi,QWORD PTR[16+rsp]
  1576. DB 0F3h,0C3h ;repret
  1577. $L$SEH_end_aesni_ctr32_encrypt_blocks::
  1578. aesni_ctr32_encrypt_blocks ENDP
  1579. PUBLIC aesni_xts_encrypt
  1580. ALIGN 16
  1581. aesni_xts_encrypt PROC PUBLIC
  1582. mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
  1583. mov QWORD PTR[16+rsp],rsi
  1584. mov rax,rsp
  1585. $L$SEH_begin_aesni_xts_encrypt::
  1586. mov rdi,rcx
  1587. mov rsi,rdx
  1588. mov rdx,r8
  1589. mov rcx,r9
  1590. mov r8,QWORD PTR[40+rsp]
  1591. mov r9,QWORD PTR[48+rsp]
  1592. lea r11,QWORD PTR[rsp]
  1593. push rbp
  1594. sub rsp,272
  1595. and rsp,-16
  1596. movaps XMMWORD PTR[(-168)+r11],xmm6
  1597. movaps XMMWORD PTR[(-152)+r11],xmm7
  1598. movaps XMMWORD PTR[(-136)+r11],xmm8
  1599. movaps XMMWORD PTR[(-120)+r11],xmm9
  1600. movaps XMMWORD PTR[(-104)+r11],xmm10
  1601. movaps XMMWORD PTR[(-88)+r11],xmm11
  1602. movaps XMMWORD PTR[(-72)+r11],xmm12
  1603. movaps XMMWORD PTR[(-56)+r11],xmm13
  1604. movaps XMMWORD PTR[(-40)+r11],xmm14
  1605. movaps XMMWORD PTR[(-24)+r11],xmm15
  1606. $L$xts_enc_body::
  1607. movups xmm2,XMMWORD PTR[r9]
  1608. mov eax,DWORD PTR[240+r8]
  1609. mov r10d,DWORD PTR[240+rcx]
  1610. movups xmm0,XMMWORD PTR[r8]
  1611. movups xmm1,XMMWORD PTR[16+r8]
  1612. lea r8,QWORD PTR[32+r8]
  1613. xorps xmm2,xmm0
  1614. $L$oop_enc1_8::
  1615. DB 102,15,56,220,209
  1616. dec eax
  1617. movups xmm1,XMMWORD PTR[r8]
  1618. lea r8,QWORD PTR[16+r8]
  1619. jnz $L$oop_enc1_8
  1620. DB 102,15,56,221,209
  1621. movups xmm0,XMMWORD PTR[rcx]
  1622. mov rbp,rcx
  1623. mov eax,r10d
  1624. shl r10d,4
  1625. mov r9,rdx
  1626. and rdx,-16
  1627. movups xmm1,XMMWORD PTR[16+r10*1+rcx]
  1628. movdqa xmm8,XMMWORD PTR[$L$xts_magic]
  1629. movdqa xmm15,xmm2
  1630. pshufd xmm9,xmm2,05fh
  1631. pxor xmm1,xmm0
  1632. movdqa xmm14,xmm9
  1633. paddd xmm9,xmm9
  1634. movdqa xmm10,xmm15
  1635. psrad xmm14,31
  1636. paddq xmm15,xmm15
  1637. pand xmm14,xmm8
  1638. pxor xmm10,xmm0
  1639. pxor xmm15,xmm14
  1640. movdqa xmm14,xmm9
  1641. paddd xmm9,xmm9
  1642. movdqa xmm11,xmm15
  1643. psrad xmm14,31
  1644. paddq xmm15,xmm15
  1645. pand xmm14,xmm8
  1646. pxor xmm11,xmm0
  1647. pxor xmm15,xmm14
  1648. movdqa xmm14,xmm9
  1649. paddd xmm9,xmm9
  1650. movdqa xmm12,xmm15
  1651. psrad xmm14,31
  1652. paddq xmm15,xmm15
  1653. pand xmm14,xmm8
  1654. pxor xmm12,xmm0
  1655. pxor xmm15,xmm14
  1656. movdqa xmm14,xmm9
  1657. paddd xmm9,xmm9
  1658. movdqa xmm13,xmm15
  1659. psrad xmm14,31
  1660. paddq xmm15,xmm15
  1661. pand xmm14,xmm8
  1662. pxor xmm13,xmm0
  1663. pxor xmm15,xmm14
  1664. movdqa xmm14,xmm15
  1665. psrad xmm9,31
  1666. paddq xmm15,xmm15
  1667. pand xmm9,xmm8
  1668. pxor xmm14,xmm0
  1669. pxor xmm15,xmm9
  1670. movaps XMMWORD PTR[96+rsp],xmm1
  1671. sub rdx,16*6
  1672. jc $L$xts_enc_short
  1673. mov eax,16+96
  1674. lea rcx,QWORD PTR[32+r10*1+rbp]
  1675. sub rax,r10
  1676. movups xmm1,XMMWORD PTR[16+rbp]
  1677. mov r10,rax
  1678. lea r8,QWORD PTR[$L$xts_magic]
  1679. jmp $L$xts_enc_grandloop
  1680. ALIGN 32
  1681. $L$xts_enc_grandloop::
  1682. movdqu xmm2,XMMWORD PTR[rdi]
  1683. movdqa xmm8,xmm0
  1684. movdqu xmm3,XMMWORD PTR[16+rdi]
  1685. pxor xmm2,xmm10
  1686. movdqu xmm4,XMMWORD PTR[32+rdi]
  1687. pxor xmm3,xmm11
  1688. DB 102,15,56,220,209
  1689. movdqu xmm5,XMMWORD PTR[48+rdi]
  1690. pxor xmm4,xmm12
  1691. DB 102,15,56,220,217
  1692. movdqu xmm6,XMMWORD PTR[64+rdi]
  1693. pxor xmm5,xmm13
  1694. DB 102,15,56,220,225
  1695. movdqu xmm7,XMMWORD PTR[80+rdi]
  1696. pxor xmm8,xmm15
  1697. movdqa xmm9,XMMWORD PTR[96+rsp]
  1698. pxor xmm6,xmm14
  1699. DB 102,15,56,220,233
  1700. movups xmm0,XMMWORD PTR[32+rbp]
  1701. lea rdi,QWORD PTR[96+rdi]
  1702. pxor xmm7,xmm8
  1703. pxor xmm10,xmm9
  1704. DB 102,15,56,220,241
  1705. pxor xmm11,xmm9
  1706. movdqa XMMWORD PTR[rsp],xmm10
  1707. DB 102,15,56,220,249
  1708. movups xmm1,XMMWORD PTR[48+rbp]
  1709. pxor xmm12,xmm9
  1710. DB 102,15,56,220,208
  1711. pxor xmm13,xmm9
  1712. movdqa XMMWORD PTR[16+rsp],xmm11
  1713. DB 102,15,56,220,216
  1714. pxor xmm14,xmm9
  1715. movdqa XMMWORD PTR[32+rsp],xmm12
  1716. DB 102,15,56,220,224
  1717. DB 102,15,56,220,232
  1718. pxor xmm8,xmm9
  1719. movdqa XMMWORD PTR[64+rsp],xmm14
  1720. DB 102,15,56,220,240
  1721. DB 102,15,56,220,248
  1722. movups xmm0,XMMWORD PTR[64+rbp]
  1723. movdqa XMMWORD PTR[80+rsp],xmm8
  1724. pshufd xmm9,xmm15,05fh
  1725. jmp $L$xts_enc_loop6
  1726. ALIGN 32
  1727. $L$xts_enc_loop6::
  1728. DB 102,15,56,220,209
  1729. DB 102,15,56,220,217
  1730. DB 102,15,56,220,225
  1731. DB 102,15,56,220,233
  1732. DB 102,15,56,220,241
  1733. DB 102,15,56,220,249
  1734. movups xmm1,XMMWORD PTR[((-64))+rax*1+rcx]
  1735. add rax,32
  1736. DB 102,15,56,220,208
  1737. DB 102,15,56,220,216
  1738. DB 102,15,56,220,224
  1739. DB 102,15,56,220,232
  1740. DB 102,15,56,220,240
  1741. DB 102,15,56,220,248
  1742. movups xmm0,XMMWORD PTR[((-80))+rax*1+rcx]
  1743. jnz $L$xts_enc_loop6
  1744. movdqa xmm8,XMMWORD PTR[r8]
  1745. movdqa xmm14,xmm9
  1746. paddd xmm9,xmm9
  1747. DB 102,15,56,220,209
  1748. paddq xmm15,xmm15
  1749. psrad xmm14,31
  1750. DB 102,15,56,220,217
  1751. pand xmm14,xmm8
  1752. movups xmm10,XMMWORD PTR[rbp]
  1753. DB 102,15,56,220,225
  1754. DB 102,15,56,220,233
  1755. DB 102,15,56,220,241
  1756. pxor xmm15,xmm14
  1757. movaps xmm11,xmm10
  1758. DB 102,15,56,220,249
  1759. movups xmm1,XMMWORD PTR[((-64))+rcx]
  1760. movdqa xmm14,xmm9
  1761. DB 102,15,56,220,208
  1762. paddd xmm9,xmm9
  1763. pxor xmm10,xmm15
  1764. DB 102,15,56,220,216
  1765. psrad xmm14,31
  1766. paddq xmm15,xmm15
  1767. DB 102,15,56,220,224
  1768. DB 102,15,56,220,232
  1769. pand xmm14,xmm8
  1770. movaps xmm12,xmm11
  1771. DB 102,15,56,220,240
  1772. pxor xmm15,xmm14
  1773. movdqa xmm14,xmm9
  1774. DB 102,15,56,220,248
  1775. movups xmm0,XMMWORD PTR[((-48))+rcx]
  1776. paddd xmm9,xmm9
  1777. DB 102,15,56,220,209
  1778. pxor xmm11,xmm15
  1779. psrad xmm14,31
  1780. DB 102,15,56,220,217
  1781. paddq xmm15,xmm15
  1782. pand xmm14,xmm8
  1783. DB 102,15,56,220,225
  1784. DB 102,15,56,220,233
  1785. movdqa XMMWORD PTR[48+rsp],xmm13
  1786. pxor xmm15,xmm14
  1787. DB 102,15,56,220,241
  1788. movaps xmm13,xmm12
  1789. movdqa xmm14,xmm9
  1790. DB 102,15,56,220,249
  1791. movups xmm1,XMMWORD PTR[((-32))+rcx]
  1792. paddd xmm9,xmm9
  1793. DB 102,15,56,220,208
  1794. pxor xmm12,xmm15
  1795. psrad xmm14,31
  1796. DB 102,15,56,220,216
  1797. paddq xmm15,xmm15
  1798. pand xmm14,xmm8
  1799. DB 102,15,56,220,224
  1800. DB 102,15,56,220,232
  1801. DB 102,15,56,220,240
  1802. pxor xmm15,xmm14
  1803. movaps xmm14,xmm13
  1804. DB 102,15,56,220,248
  1805. movdqa xmm0,xmm9
  1806. paddd xmm9,xmm9
  1807. DB 102,15,56,220,209
  1808. pxor xmm13,xmm15
  1809. psrad xmm0,31
  1810. DB 102,15,56,220,217
  1811. paddq xmm15,xmm15
  1812. pand xmm0,xmm8
  1813. DB 102,15,56,220,225
  1814. DB 102,15,56,220,233
  1815. pxor xmm15,xmm0
  1816. movups xmm0,XMMWORD PTR[rbp]
  1817. DB 102,15,56,220,241
  1818. DB 102,15,56,220,249
  1819. movups xmm1,XMMWORD PTR[16+rbp]
  1820. pxor xmm14,xmm15
  1821. DB 102,15,56,221,84,36,0
  1822. psrad xmm9,31
  1823. paddq xmm15,xmm15
  1824. DB 102,15,56,221,92,36,16
  1825. DB 102,15,56,221,100,36,32
  1826. pand xmm9,xmm8
  1827. mov rax,r10
  1828. DB 102,15,56,221,108,36,48
  1829. DB 102,15,56,221,116,36,64
  1830. DB 102,15,56,221,124,36,80
  1831. pxor xmm15,xmm9
  1832. lea rsi,QWORD PTR[96+rsi]
  1833. movups XMMWORD PTR[(-96)+rsi],xmm2
  1834. movups XMMWORD PTR[(-80)+rsi],xmm3
  1835. movups XMMWORD PTR[(-64)+rsi],xmm4
  1836. movups XMMWORD PTR[(-48)+rsi],xmm5
  1837. movups XMMWORD PTR[(-32)+rsi],xmm6
  1838. movups XMMWORD PTR[(-16)+rsi],xmm7
  1839. sub rdx,16*6
  1840. jnc $L$xts_enc_grandloop
  1841. mov eax,16+96
  1842. sub eax,r10d
  1843. mov rcx,rbp
  1844. shr eax,4
  1845. $L$xts_enc_short::
  1846. mov r10d,eax
  1847. pxor xmm10,xmm0
  1848. add rdx,16*6
  1849. jz $L$xts_enc_done
  1850. pxor xmm11,xmm0
  1851. cmp rdx,020h
  1852. jb $L$xts_enc_one
  1853. pxor xmm12,xmm0
  1854. je $L$xts_enc_two
  1855. pxor xmm13,xmm0
  1856. cmp rdx,040h
  1857. jb $L$xts_enc_three
  1858. pxor xmm14,xmm0
  1859. je $L$xts_enc_four
  1860. movdqu xmm2,XMMWORD PTR[rdi]
  1861. movdqu xmm3,XMMWORD PTR[16+rdi]
  1862. movdqu xmm4,XMMWORD PTR[32+rdi]
  1863. pxor xmm2,xmm10
  1864. movdqu xmm5,XMMWORD PTR[48+rdi]
  1865. pxor xmm3,xmm11
  1866. movdqu xmm6,XMMWORD PTR[64+rdi]
  1867. lea rdi,QWORD PTR[80+rdi]
  1868. pxor xmm4,xmm12
  1869. pxor xmm5,xmm13
  1870. pxor xmm6,xmm14
  1871. pxor xmm7,xmm7
  1872. call _aesni_encrypt6
  1873. xorps xmm2,xmm10
  1874. movdqa xmm10,xmm15
  1875. xorps xmm3,xmm11
  1876. xorps xmm4,xmm12
  1877. movdqu XMMWORD PTR[rsi],xmm2
  1878. xorps xmm5,xmm13
  1879. movdqu XMMWORD PTR[16+rsi],xmm3
  1880. xorps xmm6,xmm14
  1881. movdqu XMMWORD PTR[32+rsi],xmm4
  1882. movdqu XMMWORD PTR[48+rsi],xmm5
  1883. movdqu XMMWORD PTR[64+rsi],xmm6
  1884. lea rsi,QWORD PTR[80+rsi]
  1885. jmp $L$xts_enc_done
  1886. ALIGN 16
  1887. $L$xts_enc_one::
  1888. movups xmm2,XMMWORD PTR[rdi]
  1889. lea rdi,QWORD PTR[16+rdi]
  1890. xorps xmm2,xmm10
  1891. movups xmm0,XMMWORD PTR[rcx]
  1892. movups xmm1,XMMWORD PTR[16+rcx]
  1893. lea rcx,QWORD PTR[32+rcx]
  1894. xorps xmm2,xmm0
  1895. $L$oop_enc1_9::
  1896. DB 102,15,56,220,209
  1897. dec eax
  1898. movups xmm1,XMMWORD PTR[rcx]
  1899. lea rcx,QWORD PTR[16+rcx]
  1900. jnz $L$oop_enc1_9
  1901. DB 102,15,56,221,209
  1902. xorps xmm2,xmm10
  1903. movdqa xmm10,xmm11
  1904. movups XMMWORD PTR[rsi],xmm2
  1905. lea rsi,QWORD PTR[16+rsi]
  1906. jmp $L$xts_enc_done
  1907. ALIGN 16
  1908. $L$xts_enc_two::
  1909. movups xmm2,XMMWORD PTR[rdi]
  1910. movups xmm3,XMMWORD PTR[16+rdi]
  1911. lea rdi,QWORD PTR[32+rdi]
  1912. xorps xmm2,xmm10
  1913. xorps xmm3,xmm11
  1914. call _aesni_encrypt2
  1915. xorps xmm2,xmm10
  1916. movdqa xmm10,xmm12
  1917. xorps xmm3,xmm11
  1918. movups XMMWORD PTR[rsi],xmm2
  1919. movups XMMWORD PTR[16+rsi],xmm3
  1920. lea rsi,QWORD PTR[32+rsi]
  1921. jmp $L$xts_enc_done
  1922. ALIGN 16
  1923. $L$xts_enc_three::
  1924. movups xmm2,XMMWORD PTR[rdi]
  1925. movups xmm3,XMMWORD PTR[16+rdi]
  1926. movups xmm4,XMMWORD PTR[32+rdi]
  1927. lea rdi,QWORD PTR[48+rdi]
  1928. xorps xmm2,xmm10
  1929. xorps xmm3,xmm11
  1930. xorps xmm4,xmm12
  1931. call _aesni_encrypt3
  1932. xorps xmm2,xmm10
  1933. movdqa xmm10,xmm13
  1934. xorps xmm3,xmm11
  1935. xorps xmm4,xmm12
  1936. movups XMMWORD PTR[rsi],xmm2
  1937. movups XMMWORD PTR[16+rsi],xmm3
  1938. movups XMMWORD PTR[32+rsi],xmm4
  1939. lea rsi,QWORD PTR[48+rsi]
  1940. jmp $L$xts_enc_done
  1941. ALIGN 16
  1942. $L$xts_enc_four::
  1943. movups xmm2,XMMWORD PTR[rdi]
  1944. movups xmm3,XMMWORD PTR[16+rdi]
  1945. movups xmm4,XMMWORD PTR[32+rdi]
  1946. xorps xmm2,xmm10
  1947. movups xmm5,XMMWORD PTR[48+rdi]
  1948. lea rdi,QWORD PTR[64+rdi]
  1949. xorps xmm3,xmm11
  1950. xorps xmm4,xmm12
  1951. xorps xmm5,xmm13
  1952. call _aesni_encrypt4
  1953. pxor xmm2,xmm10
  1954. movdqa xmm10,xmm14
  1955. pxor xmm3,xmm11
  1956. pxor xmm4,xmm12
  1957. movdqu XMMWORD PTR[rsi],xmm2
  1958. pxor xmm5,xmm13
  1959. movdqu XMMWORD PTR[16+rsi],xmm3
  1960. movdqu XMMWORD PTR[32+rsi],xmm4
  1961. movdqu XMMWORD PTR[48+rsi],xmm5
  1962. lea rsi,QWORD PTR[64+rsi]
  1963. jmp $L$xts_enc_done
  1964. ALIGN 16
  1965. $L$xts_enc_done::
  1966. and r9,15
  1967. jz $L$xts_enc_ret
  1968. mov rdx,r9
  1969. $L$xts_enc_steal::
  1970. movzx eax,BYTE PTR[rdi]
  1971. movzx ecx,BYTE PTR[((-16))+rsi]
  1972. lea rdi,QWORD PTR[1+rdi]
  1973. mov BYTE PTR[((-16))+rsi],al
  1974. mov BYTE PTR[rsi],cl
  1975. lea rsi,QWORD PTR[1+rsi]
  1976. sub rdx,1
  1977. jnz $L$xts_enc_steal
  1978. sub rsi,r9
  1979. mov rcx,rbp
  1980. mov eax,r10d
  1981. movups xmm2,XMMWORD PTR[((-16))+rsi]
  1982. xorps xmm2,xmm10
  1983. movups xmm0,XMMWORD PTR[rcx]
  1984. movups xmm1,XMMWORD PTR[16+rcx]
  1985. lea rcx,QWORD PTR[32+rcx]
  1986. xorps xmm2,xmm0
  1987. $L$oop_enc1_10::
  1988. DB 102,15,56,220,209
  1989. dec eax
  1990. movups xmm1,XMMWORD PTR[rcx]
  1991. lea rcx,QWORD PTR[16+rcx]
  1992. jnz $L$oop_enc1_10
  1993. DB 102,15,56,221,209
  1994. xorps xmm2,xmm10
  1995. movups XMMWORD PTR[(-16)+rsi],xmm2
  1996. $L$xts_enc_ret::
  1997. xorps xmm0,xmm0
  1998. pxor xmm1,xmm1
  1999. pxor xmm2,xmm2
  2000. pxor xmm3,xmm3
  2001. pxor xmm4,xmm4
  2002. pxor xmm5,xmm5
  2003. movaps xmm6,XMMWORD PTR[((-168))+r11]
  2004. movaps XMMWORD PTR[(-168)+r11],xmm0
  2005. movaps xmm7,XMMWORD PTR[((-152))+r11]
  2006. movaps XMMWORD PTR[(-152)+r11],xmm0
  2007. movaps xmm8,XMMWORD PTR[((-136))+r11]
  2008. movaps XMMWORD PTR[(-136)+r11],xmm0
  2009. movaps xmm9,XMMWORD PTR[((-120))+r11]
  2010. movaps XMMWORD PTR[(-120)+r11],xmm0
  2011. movaps xmm10,XMMWORD PTR[((-104))+r11]
  2012. movaps XMMWORD PTR[(-104)+r11],xmm0
  2013. movaps xmm11,XMMWORD PTR[((-88))+r11]
  2014. movaps XMMWORD PTR[(-88)+r11],xmm0
  2015. movaps xmm12,XMMWORD PTR[((-72))+r11]
  2016. movaps XMMWORD PTR[(-72)+r11],xmm0
  2017. movaps xmm13,XMMWORD PTR[((-56))+r11]
  2018. movaps XMMWORD PTR[(-56)+r11],xmm0
  2019. movaps xmm14,XMMWORD PTR[((-40))+r11]
  2020. movaps XMMWORD PTR[(-40)+r11],xmm0
  2021. movaps xmm15,XMMWORD PTR[((-24))+r11]
  2022. movaps XMMWORD PTR[(-24)+r11],xmm0
  2023. movaps XMMWORD PTR[rsp],xmm0
  2024. movaps XMMWORD PTR[16+rsp],xmm0
  2025. movaps XMMWORD PTR[32+rsp],xmm0
  2026. movaps XMMWORD PTR[48+rsp],xmm0
  2027. movaps XMMWORD PTR[64+rsp],xmm0
  2028. movaps XMMWORD PTR[80+rsp],xmm0
  2029. movaps XMMWORD PTR[96+rsp],xmm0
  2030. mov rbp,QWORD PTR[((-8))+r11]
  2031. lea rsp,QWORD PTR[r11]
  2032. $L$xts_enc_epilogue::
  2033. mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
  2034. mov rsi,QWORD PTR[16+rsp]
  2035. DB 0F3h,0C3h ;repret
  2036. $L$SEH_end_aesni_xts_encrypt::
  2037. aesni_xts_encrypt ENDP
  2038. PUBLIC aesni_xts_decrypt
  2039. ALIGN 16
  2040. aesni_xts_decrypt PROC PUBLIC
  2041. mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
  2042. mov QWORD PTR[16+rsp],rsi
  2043. mov rax,rsp
  2044. $L$SEH_begin_aesni_xts_decrypt::
  2045. mov rdi,rcx
  2046. mov rsi,rdx
  2047. mov rdx,r8
  2048. mov rcx,r9
  2049. mov r8,QWORD PTR[40+rsp]
  2050. mov r9,QWORD PTR[48+rsp]
  2051. lea r11,QWORD PTR[rsp]
  2052. push rbp
  2053. sub rsp,272
  2054. and rsp,-16
  2055. movaps XMMWORD PTR[(-168)+r11],xmm6
  2056. movaps XMMWORD PTR[(-152)+r11],xmm7
  2057. movaps XMMWORD PTR[(-136)+r11],xmm8
  2058. movaps XMMWORD PTR[(-120)+r11],xmm9
  2059. movaps XMMWORD PTR[(-104)+r11],xmm10
  2060. movaps XMMWORD PTR[(-88)+r11],xmm11
  2061. movaps XMMWORD PTR[(-72)+r11],xmm12
  2062. movaps XMMWORD PTR[(-56)+r11],xmm13
  2063. movaps XMMWORD PTR[(-40)+r11],xmm14
  2064. movaps XMMWORD PTR[(-24)+r11],xmm15
  2065. $L$xts_dec_body::
  2066. movups xmm2,XMMWORD PTR[r9]
  2067. mov eax,DWORD PTR[240+r8]
  2068. mov r10d,DWORD PTR[240+rcx]
  2069. movups xmm0,XMMWORD PTR[r8]
  2070. movups xmm1,XMMWORD PTR[16+r8]
  2071. lea r8,QWORD PTR[32+r8]
  2072. xorps xmm2,xmm0
  2073. $L$oop_enc1_11::
  2074. DB 102,15,56,220,209
  2075. dec eax
  2076. movups xmm1,XMMWORD PTR[r8]
  2077. lea r8,QWORD PTR[16+r8]
  2078. jnz $L$oop_enc1_11
  2079. DB 102,15,56,221,209
  2080. xor eax,eax
  2081. test rdx,15
  2082. setnz al
  2083. shl rax,4
  2084. sub rdx,rax
  2085. movups xmm0,XMMWORD PTR[rcx]
  2086. mov rbp,rcx
  2087. mov eax,r10d
  2088. shl r10d,4
  2089. mov r9,rdx
  2090. and rdx,-16
  2091. movups xmm1,XMMWORD PTR[16+r10*1+rcx]
  2092. movdqa xmm8,XMMWORD PTR[$L$xts_magic]
  2093. movdqa xmm15,xmm2
  2094. pshufd xmm9,xmm2,05fh
  2095. pxor xmm1,xmm0
  2096. movdqa xmm14,xmm9
  2097. paddd xmm9,xmm9
  2098. movdqa xmm10,xmm15
  2099. psrad xmm14,31
  2100. paddq xmm15,xmm15
  2101. pand xmm14,xmm8
  2102. pxor xmm10,xmm0
  2103. pxor xmm15,xmm14
  2104. movdqa xmm14,xmm9
  2105. paddd xmm9,xmm9
  2106. movdqa xmm11,xmm15
  2107. psrad xmm14,31
  2108. paddq xmm15,xmm15
  2109. pand xmm14,xmm8
  2110. pxor xmm11,xmm0
  2111. pxor xmm15,xmm14
  2112. movdqa xmm14,xmm9
  2113. paddd xmm9,xmm9
  2114. movdqa xmm12,xmm15
  2115. psrad xmm14,31
  2116. paddq xmm15,xmm15
  2117. pand xmm14,xmm8
  2118. pxor xmm12,xmm0
  2119. pxor xmm15,xmm14
  2120. movdqa xmm14,xmm9
  2121. paddd xmm9,xmm9
  2122. movdqa xmm13,xmm15
  2123. psrad xmm14,31
  2124. paddq xmm15,xmm15
  2125. pand xmm14,xmm8
  2126. pxor xmm13,xmm0
  2127. pxor xmm15,xmm14
  2128. movdqa xmm14,xmm15
  2129. psrad xmm9,31
  2130. paddq xmm15,xmm15
  2131. pand xmm9,xmm8
  2132. pxor xmm14,xmm0
  2133. pxor xmm15,xmm9
  2134. movaps XMMWORD PTR[96+rsp],xmm1
  2135. sub rdx,16*6
  2136. jc $L$xts_dec_short
  2137. mov eax,16+96
  2138. lea rcx,QWORD PTR[32+r10*1+rbp]
  2139. sub rax,r10
  2140. movups xmm1,XMMWORD PTR[16+rbp]
  2141. mov r10,rax
  2142. lea r8,QWORD PTR[$L$xts_magic]
  2143. jmp $L$xts_dec_grandloop
  2144. ALIGN 32
  2145. $L$xts_dec_grandloop::
  2146. movdqu xmm2,XMMWORD PTR[rdi]
  2147. movdqa xmm8,xmm0
  2148. movdqu xmm3,XMMWORD PTR[16+rdi]
  2149. pxor xmm2,xmm10
  2150. movdqu xmm4,XMMWORD PTR[32+rdi]
  2151. pxor xmm3,xmm11
  2152. DB 102,15,56,222,209
  2153. movdqu xmm5,XMMWORD PTR[48+rdi]
  2154. pxor xmm4,xmm12
  2155. DB 102,15,56,222,217
  2156. movdqu xmm6,XMMWORD PTR[64+rdi]
  2157. pxor xmm5,xmm13
  2158. DB 102,15,56,222,225
  2159. movdqu xmm7,XMMWORD PTR[80+rdi]
  2160. pxor xmm8,xmm15
  2161. movdqa xmm9,XMMWORD PTR[96+rsp]
  2162. pxor xmm6,xmm14
  2163. DB 102,15,56,222,233
  2164. movups xmm0,XMMWORD PTR[32+rbp]
  2165. lea rdi,QWORD PTR[96+rdi]
  2166. pxor xmm7,xmm8
  2167. pxor xmm10,xmm9
  2168. DB 102,15,56,222,241
  2169. pxor xmm11,xmm9
  2170. movdqa XMMWORD PTR[rsp],xmm10
  2171. DB 102,15,56,222,249
  2172. movups xmm1,XMMWORD PTR[48+rbp]
  2173. pxor xmm12,xmm9
  2174. DB 102,15,56,222,208
  2175. pxor xmm13,xmm9
  2176. movdqa XMMWORD PTR[16+rsp],xmm11
  2177. DB 102,15,56,222,216
  2178. pxor xmm14,xmm9
  2179. movdqa XMMWORD PTR[32+rsp],xmm12
  2180. DB 102,15,56,222,224
  2181. DB 102,15,56,222,232
  2182. pxor xmm8,xmm9
  2183. movdqa XMMWORD PTR[64+rsp],xmm14
  2184. DB 102,15,56,222,240
  2185. DB 102,15,56,222,248
  2186. movups xmm0,XMMWORD PTR[64+rbp]
  2187. movdqa XMMWORD PTR[80+rsp],xmm8
  2188. pshufd xmm9,xmm15,05fh
  2189. jmp $L$xts_dec_loop6
  2190. ALIGN 32
  2191. $L$xts_dec_loop6::
  2192. DB 102,15,56,222,209
  2193. DB 102,15,56,222,217
  2194. DB 102,15,56,222,225
  2195. DB 102,15,56,222,233
  2196. DB 102,15,56,222,241
  2197. DB 102,15,56,222,249
  2198. movups xmm1,XMMWORD PTR[((-64))+rax*1+rcx]
  2199. add rax,32
  2200. DB 102,15,56,222,208
  2201. DB 102,15,56,222,216
  2202. DB 102,15,56,222,224
  2203. DB 102,15,56,222,232
  2204. DB 102,15,56,222,240
  2205. DB 102,15,56,222,248
  2206. movups xmm0,XMMWORD PTR[((-80))+rax*1+rcx]
  2207. jnz $L$xts_dec_loop6
  2208. movdqa xmm8,XMMWORD PTR[r8]
  2209. movdqa xmm14,xmm9
  2210. paddd xmm9,xmm9
  2211. DB 102,15,56,222,209
  2212. paddq xmm15,xmm15
  2213. psrad xmm14,31
  2214. DB 102,15,56,222,217
  2215. pand xmm14,xmm8
  2216. movups xmm10,XMMWORD PTR[rbp]
  2217. DB 102,15,56,222,225
  2218. DB 102,15,56,222,233
  2219. DB 102,15,56,222,241
  2220. pxor xmm15,xmm14
  2221. movaps xmm11,xmm10
  2222. DB 102,15,56,222,249
  2223. movups xmm1,XMMWORD PTR[((-64))+rcx]
  2224. movdqa xmm14,xmm9
  2225. DB 102,15,56,222,208
  2226. paddd xmm9,xmm9
  2227. pxor xmm10,xmm15
  2228. DB 102,15,56,222,216
  2229. psrad xmm14,31
  2230. paddq xmm15,xmm15
  2231. DB 102,15,56,222,224
  2232. DB 102,15,56,222,232
  2233. pand xmm14,xmm8
  2234. movaps xmm12,xmm11
  2235. DB 102,15,56,222,240
  2236. pxor xmm15,xmm14
  2237. movdqa xmm14,xmm9
  2238. DB 102,15,56,222,248
  2239. movups xmm0,XMMWORD PTR[((-48))+rcx]
  2240. paddd xmm9,xmm9
  2241. DB 102,15,56,222,209
  2242. pxor xmm11,xmm15
  2243. psrad xmm14,31
  2244. DB 102,15,56,222,217
  2245. paddq xmm15,xmm15
  2246. pand xmm14,xmm8
  2247. DB 102,15,56,222,225
  2248. DB 102,15,56,222,233
  2249. movdqa XMMWORD PTR[48+rsp],xmm13
  2250. pxor xmm15,xmm14
  2251. DB 102,15,56,222,241
  2252. movaps xmm13,xmm12
  2253. movdqa xmm14,xmm9
  2254. DB 102,15,56,222,249
  2255. movups xmm1,XMMWORD PTR[((-32))+rcx]
  2256. paddd xmm9,xmm9
  2257. DB 102,15,56,222,208
  2258. pxor xmm12,xmm15
  2259. psrad xmm14,31
  2260. DB 102,15,56,222,216
  2261. paddq xmm15,xmm15
  2262. pand xmm14,xmm8
  2263. DB 102,15,56,222,224
  2264. DB 102,15,56,222,232
  2265. DB 102,15,56,222,240
  2266. pxor xmm15,xmm14
  2267. movaps xmm14,xmm13
  2268. DB 102,15,56,222,248
  2269. movdqa xmm0,xmm9
  2270. paddd xmm9,xmm9
  2271. DB 102,15,56,222,209
  2272. pxor xmm13,xmm15
  2273. psrad xmm0,31
  2274. DB 102,15,56,222,217
  2275. paddq xmm15,xmm15
  2276. pand xmm0,xmm8
  2277. DB 102,15,56,222,225
  2278. DB 102,15,56,222,233
  2279. pxor xmm15,xmm0
  2280. movups xmm0,XMMWORD PTR[rbp]
  2281. DB 102,15,56,222,241
  2282. DB 102,15,56,222,249
  2283. movups xmm1,XMMWORD PTR[16+rbp]
  2284. pxor xmm14,xmm15
  2285. DB 102,15,56,223,84,36,0
  2286. psrad xmm9,31
  2287. paddq xmm15,xmm15
  2288. DB 102,15,56,223,92,36,16
  2289. DB 102,15,56,223,100,36,32
  2290. pand xmm9,xmm8
  2291. mov rax,r10
  2292. DB 102,15,56,223,108,36,48
  2293. DB 102,15,56,223,116,36,64
  2294. DB 102,15,56,223,124,36,80
  2295. pxor xmm15,xmm9
  2296. lea rsi,QWORD PTR[96+rsi]
  2297. movups XMMWORD PTR[(-96)+rsi],xmm2
  2298. movups XMMWORD PTR[(-80)+rsi],xmm3
  2299. movups XMMWORD PTR[(-64)+rsi],xmm4
  2300. movups XMMWORD PTR[(-48)+rsi],xmm5
  2301. movups XMMWORD PTR[(-32)+rsi],xmm6
  2302. movups XMMWORD PTR[(-16)+rsi],xmm7
  2303. sub rdx,16*6
  2304. jnc $L$xts_dec_grandloop
  2305. mov eax,16+96
  2306. sub eax,r10d
  2307. mov rcx,rbp
  2308. shr eax,4
  2309. $L$xts_dec_short::
  2310. mov r10d,eax
  2311. pxor xmm10,xmm0
  2312. pxor xmm11,xmm0
  2313. add rdx,16*6
  2314. jz $L$xts_dec_done
  2315. pxor xmm12,xmm0
  2316. cmp rdx,020h
  2317. jb $L$xts_dec_one
  2318. pxor xmm13,xmm0
  2319. je $L$xts_dec_two
  2320. pxor xmm14,xmm0
  2321. cmp rdx,040h
  2322. jb $L$xts_dec_three
  2323. je $L$xts_dec_four
  2324. movdqu xmm2,XMMWORD PTR[rdi]
  2325. movdqu xmm3,XMMWORD PTR[16+rdi]
  2326. movdqu xmm4,XMMWORD PTR[32+rdi]
  2327. pxor xmm2,xmm10
  2328. movdqu xmm5,XMMWORD PTR[48+rdi]
  2329. pxor xmm3,xmm11
  2330. movdqu xmm6,XMMWORD PTR[64+rdi]
  2331. lea rdi,QWORD PTR[80+rdi]
  2332. pxor xmm4,xmm12
  2333. pxor xmm5,xmm13
  2334. pxor xmm6,xmm14
  2335. call _aesni_decrypt6
  2336. xorps xmm2,xmm10
  2337. xorps xmm3,xmm11
  2338. xorps xmm4,xmm12
  2339. movdqu XMMWORD PTR[rsi],xmm2
  2340. xorps xmm5,xmm13
  2341. movdqu XMMWORD PTR[16+rsi],xmm3
  2342. xorps xmm6,xmm14
  2343. movdqu XMMWORD PTR[32+rsi],xmm4
  2344. pxor xmm14,xmm14
  2345. movdqu XMMWORD PTR[48+rsi],xmm5
  2346. pcmpgtd xmm14,xmm15
  2347. movdqu XMMWORD PTR[64+rsi],xmm6
  2348. lea rsi,QWORD PTR[80+rsi]
  2349. pshufd xmm11,xmm14,013h
  2350. and r9,15
  2351. jz $L$xts_dec_ret
  2352. movdqa xmm10,xmm15
  2353. paddq xmm15,xmm15
  2354. pand xmm11,xmm8
  2355. pxor xmm11,xmm15
  2356. jmp $L$xts_dec_done2
  2357. ALIGN 16
  2358. $L$xts_dec_one::
  2359. movups xmm2,XMMWORD PTR[rdi]
  2360. lea rdi,QWORD PTR[16+rdi]
  2361. xorps xmm2,xmm10
  2362. movups xmm0,XMMWORD PTR[rcx]
  2363. movups xmm1,XMMWORD PTR[16+rcx]
  2364. lea rcx,QWORD PTR[32+rcx]
  2365. xorps xmm2,xmm0
  2366. $L$oop_dec1_12::
  2367. DB 102,15,56,222,209
  2368. dec eax
  2369. movups xmm1,XMMWORD PTR[rcx]
  2370. lea rcx,QWORD PTR[16+rcx]
  2371. jnz $L$oop_dec1_12
  2372. DB 102,15,56,223,209
  2373. xorps xmm2,xmm10
  2374. movdqa xmm10,xmm11
  2375. movups XMMWORD PTR[rsi],xmm2
  2376. movdqa xmm11,xmm12
  2377. lea rsi,QWORD PTR[16+rsi]
  2378. jmp $L$xts_dec_done
  2379. ALIGN 16
  2380. $L$xts_dec_two::
  2381. movups xmm2,XMMWORD PTR[rdi]
  2382. movups xmm3,XMMWORD PTR[16+rdi]
  2383. lea rdi,QWORD PTR[32+rdi]
  2384. xorps xmm2,xmm10
  2385. xorps xmm3,xmm11
  2386. call _aesni_decrypt2
  2387. xorps xmm2,xmm10
  2388. movdqa xmm10,xmm12
  2389. xorps xmm3,xmm11
  2390. movdqa xmm11,xmm13
  2391. movups XMMWORD PTR[rsi],xmm2
  2392. movups XMMWORD PTR[16+rsi],xmm3
  2393. lea rsi,QWORD PTR[32+rsi]
  2394. jmp $L$xts_dec_done
  2395. ALIGN 16
  2396. $L$xts_dec_three::
  2397. movups xmm2,XMMWORD PTR[rdi]
  2398. movups xmm3,XMMWORD PTR[16+rdi]
  2399. movups xmm4,XMMWORD PTR[32+rdi]
  2400. lea rdi,QWORD PTR[48+rdi]
  2401. xorps xmm2,xmm10
  2402. xorps xmm3,xmm11
  2403. xorps xmm4,xmm12
  2404. call _aesni_decrypt3
  2405. xorps xmm2,xmm10
  2406. movdqa xmm10,xmm13
  2407. xorps xmm3,xmm11
  2408. movdqa xmm11,xmm14
  2409. xorps xmm4,xmm12
  2410. movups XMMWORD PTR[rsi],xmm2
  2411. movups XMMWORD PTR[16+rsi],xmm3
  2412. movups XMMWORD PTR[32+rsi],xmm4
  2413. lea rsi,QWORD PTR[48+rsi]
  2414. jmp $L$xts_dec_done
  2415. ALIGN 16
  2416. $L$xts_dec_four::
  2417. movups xmm2,XMMWORD PTR[rdi]
  2418. movups xmm3,XMMWORD PTR[16+rdi]
  2419. movups xmm4,XMMWORD PTR[32+rdi]
  2420. xorps xmm2,xmm10
  2421. movups xmm5,XMMWORD PTR[48+rdi]
  2422. lea rdi,QWORD PTR[64+rdi]
  2423. xorps xmm3,xmm11
  2424. xorps xmm4,xmm12
  2425. xorps xmm5,xmm13
  2426. call _aesni_decrypt4
  2427. pxor xmm2,xmm10
  2428. movdqa xmm10,xmm14
  2429. pxor xmm3,xmm11
  2430. movdqa xmm11,xmm15
  2431. pxor xmm4,xmm12
  2432. movdqu XMMWORD PTR[rsi],xmm2
  2433. pxor xmm5,xmm13
  2434. movdqu XMMWORD PTR[16+rsi],xmm3
  2435. movdqu XMMWORD PTR[32+rsi],xmm4
  2436. movdqu XMMWORD PTR[48+rsi],xmm5
  2437. lea rsi,QWORD PTR[64+rsi]
  2438. jmp $L$xts_dec_done
  2439. ALIGN 16
  2440. $L$xts_dec_done::
  2441. and r9,15
  2442. jz $L$xts_dec_ret
  2443. $L$xts_dec_done2::
  2444. mov rdx,r9
  2445. mov rcx,rbp
  2446. mov eax,r10d
  2447. movups xmm2,XMMWORD PTR[rdi]
  2448. xorps xmm2,xmm11
  2449. movups xmm0,XMMWORD PTR[rcx]
  2450. movups xmm1,XMMWORD PTR[16+rcx]
  2451. lea rcx,QWORD PTR[32+rcx]
  2452. xorps xmm2,xmm0
  2453. $L$oop_dec1_13::
  2454. DB 102,15,56,222,209
  2455. dec eax
  2456. movups xmm1,XMMWORD PTR[rcx]
  2457. lea rcx,QWORD PTR[16+rcx]
  2458. jnz $L$oop_dec1_13
  2459. DB 102,15,56,223,209
  2460. xorps xmm2,xmm11
  2461. movups XMMWORD PTR[rsi],xmm2
  2462. $L$xts_dec_steal::
  2463. movzx eax,BYTE PTR[16+rdi]
  2464. movzx ecx,BYTE PTR[rsi]
  2465. lea rdi,QWORD PTR[1+rdi]
  2466. mov BYTE PTR[rsi],al
  2467. mov BYTE PTR[16+rsi],cl
  2468. lea rsi,QWORD PTR[1+rsi]
  2469. sub rdx,1
  2470. jnz $L$xts_dec_steal
  2471. sub rsi,r9
  2472. mov rcx,rbp
  2473. mov eax,r10d
  2474. movups xmm2,XMMWORD PTR[rsi]
  2475. xorps xmm2,xmm10
  2476. movups xmm0,XMMWORD PTR[rcx]
  2477. movups xmm1,XMMWORD PTR[16+rcx]
  2478. lea rcx,QWORD PTR[32+rcx]
  2479. xorps xmm2,xmm0
  2480. $L$oop_dec1_14::
  2481. DB 102,15,56,222,209
  2482. dec eax
  2483. movups xmm1,XMMWORD PTR[rcx]
  2484. lea rcx,QWORD PTR[16+rcx]
  2485. jnz $L$oop_dec1_14
  2486. DB 102,15,56,223,209
  2487. xorps xmm2,xmm10
  2488. movups XMMWORD PTR[rsi],xmm2
  2489. $L$xts_dec_ret::
  2490. xorps xmm0,xmm0
  2491. pxor xmm1,xmm1
  2492. pxor xmm2,xmm2
  2493. pxor xmm3,xmm3
  2494. pxor xmm4,xmm4
  2495. pxor xmm5,xmm5
  2496. movaps xmm6,XMMWORD PTR[((-168))+r11]
  2497. movaps XMMWORD PTR[(-168)+r11],xmm0
  2498. movaps xmm7,XMMWORD PTR[((-152))+r11]
  2499. movaps XMMWORD PTR[(-152)+r11],xmm0
  2500. movaps xmm8,XMMWORD PTR[((-136))+r11]
  2501. movaps XMMWORD PTR[(-136)+r11],xmm0
  2502. movaps xmm9,XMMWORD PTR[((-120))+r11]
  2503. movaps XMMWORD PTR[(-120)+r11],xmm0
  2504. movaps xmm10,XMMWORD PTR[((-104))+r11]
  2505. movaps XMMWORD PTR[(-104)+r11],xmm0
  2506. movaps xmm11,XMMWORD PTR[((-88))+r11]
  2507. movaps XMMWORD PTR[(-88)+r11],xmm0
  2508. movaps xmm12,XMMWORD PTR[((-72))+r11]
  2509. movaps XMMWORD PTR[(-72)+r11],xmm0
  2510. movaps xmm13,XMMWORD PTR[((-56))+r11]
  2511. movaps XMMWORD PTR[(-56)+r11],xmm0
  2512. movaps xmm14,XMMWORD PTR[((-40))+r11]
  2513. movaps XMMWORD PTR[(-40)+r11],xmm0
  2514. movaps xmm15,XMMWORD PTR[((-24))+r11]
  2515. movaps XMMWORD PTR[(-24)+r11],xmm0
  2516. movaps XMMWORD PTR[rsp],xmm0
  2517. movaps XMMWORD PTR[16+rsp],xmm0
  2518. movaps XMMWORD PTR[32+rsp],xmm0
  2519. movaps XMMWORD PTR[48+rsp],xmm0
  2520. movaps XMMWORD PTR[64+rsp],xmm0
  2521. movaps XMMWORD PTR[80+rsp],xmm0
  2522. movaps XMMWORD PTR[96+rsp],xmm0
  2523. mov rbp,QWORD PTR[((-8))+r11]
  2524. lea rsp,QWORD PTR[r11]
  2525. $L$xts_dec_epilogue::
  2526. mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
  2527. mov rsi,QWORD PTR[16+rsp]
  2528. DB 0F3h,0C3h ;repret
  2529. $L$SEH_end_aesni_xts_decrypt::
  2530. aesni_xts_decrypt ENDP
  2531. PUBLIC aesni_ocb_encrypt
  2532. ALIGN 32
  2533. aesni_ocb_encrypt PROC PUBLIC
  2534. mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
  2535. mov QWORD PTR[16+rsp],rsi
  2536. mov rax,rsp
  2537. $L$SEH_begin_aesni_ocb_encrypt::
  2538. mov rdi,rcx
  2539. mov rsi,rdx
  2540. mov rdx,r8
  2541. mov rcx,r9
  2542. mov r8,QWORD PTR[40+rsp]
  2543. mov r9,QWORD PTR[48+rsp]
  2544. lea rax,QWORD PTR[rsp]
  2545. push rbx
  2546. push rbp
  2547. push r12
  2548. push r13
  2549. push r14
  2550. lea rsp,QWORD PTR[((-160))+rsp]
  2551. movaps XMMWORD PTR[rsp],xmm6
  2552. movaps XMMWORD PTR[16+rsp],xmm7
  2553. movaps XMMWORD PTR[32+rsp],xmm8
  2554. movaps XMMWORD PTR[48+rsp],xmm9
  2555. movaps XMMWORD PTR[64+rsp],xmm10
  2556. movaps XMMWORD PTR[80+rsp],xmm11
  2557. movaps XMMWORD PTR[96+rsp],xmm12
  2558. movaps XMMWORD PTR[112+rsp],xmm13
  2559. movaps XMMWORD PTR[128+rsp],xmm14
  2560. movaps XMMWORD PTR[144+rsp],xmm15
  2561. $L$ocb_enc_body::
  2562. mov rbx,QWORD PTR[56+rax]
  2563. mov rbp,QWORD PTR[((56+8))+rax]
  2564. mov r10d,DWORD PTR[240+rcx]
  2565. mov r11,rcx
  2566. shl r10d,4
  2567. movups xmm9,XMMWORD PTR[rcx]
  2568. movups xmm1,XMMWORD PTR[16+r10*1+rcx]
  2569. movdqu xmm15,XMMWORD PTR[r9]
  2570. pxor xmm9,xmm1
  2571. pxor xmm15,xmm1
  2572. mov eax,16+32
  2573. lea rcx,QWORD PTR[32+r10*1+r11]
  2574. movups xmm1,XMMWORD PTR[16+r11]
  2575. sub rax,r10
  2576. mov r10,rax
  2577. movdqu xmm10,XMMWORD PTR[rbx]
  2578. movdqu xmm8,XMMWORD PTR[rbp]
  2579. test r8,1
  2580. jnz $L$ocb_enc_odd
  2581. bsf r12,r8
  2582. add r8,1
  2583. shl r12,4
  2584. movdqu xmm7,XMMWORD PTR[r12*1+rbx]
  2585. movdqu xmm2,XMMWORD PTR[rdi]
  2586. lea rdi,QWORD PTR[16+rdi]
  2587. call __ocb_encrypt1
  2588. movdqa xmm15,xmm7
  2589. movups XMMWORD PTR[rsi],xmm2
  2590. lea rsi,QWORD PTR[16+rsi]
  2591. sub rdx,1
  2592. jz $L$ocb_enc_done
  2593. $L$ocb_enc_odd::
  2594. lea r12,QWORD PTR[1+r8]
  2595. lea r13,QWORD PTR[3+r8]
  2596. lea r14,QWORD PTR[5+r8]
  2597. lea r8,QWORD PTR[6+r8]
  2598. bsf r12,r12
  2599. bsf r13,r13
  2600. bsf r14,r14
  2601. shl r12,4
  2602. shl r13,4
  2603. shl r14,4
  2604. sub rdx,6
  2605. jc $L$ocb_enc_short
  2606. jmp $L$ocb_enc_grandloop
  2607. ALIGN 32
  2608. $L$ocb_enc_grandloop::
  2609. movdqu xmm2,XMMWORD PTR[rdi]
  2610. movdqu xmm3,XMMWORD PTR[16+rdi]
  2611. movdqu xmm4,XMMWORD PTR[32+rdi]
  2612. movdqu xmm5,XMMWORD PTR[48+rdi]
  2613. movdqu xmm6,XMMWORD PTR[64+rdi]
  2614. movdqu xmm7,XMMWORD PTR[80+rdi]
  2615. lea rdi,QWORD PTR[96+rdi]
  2616. call __ocb_encrypt6
  2617. movups XMMWORD PTR[rsi],xmm2
  2618. movups XMMWORD PTR[16+rsi],xmm3
  2619. movups XMMWORD PTR[32+rsi],xmm4
  2620. movups XMMWORD PTR[48+rsi],xmm5
  2621. movups XMMWORD PTR[64+rsi],xmm6
  2622. movups XMMWORD PTR[80+rsi],xmm7
  2623. lea rsi,QWORD PTR[96+rsi]
  2624. sub rdx,6
  2625. jnc $L$ocb_enc_grandloop
  2626. $L$ocb_enc_short::
  2627. add rdx,6
  2628. jz $L$ocb_enc_done
  2629. movdqu xmm2,XMMWORD PTR[rdi]
  2630. cmp rdx,2
  2631. jb $L$ocb_enc_one
  2632. movdqu xmm3,XMMWORD PTR[16+rdi]
  2633. je $L$ocb_enc_two
  2634. movdqu xmm4,XMMWORD PTR[32+rdi]
  2635. cmp rdx,4
  2636. jb $L$ocb_enc_three
  2637. movdqu xmm5,XMMWORD PTR[48+rdi]
  2638. je $L$ocb_enc_four
  2639. movdqu xmm6,XMMWORD PTR[64+rdi]
  2640. pxor xmm7,xmm7
  2641. call __ocb_encrypt6
  2642. movdqa xmm15,xmm14
  2643. movups XMMWORD PTR[rsi],xmm2
  2644. movups XMMWORD PTR[16+rsi],xmm3
  2645. movups XMMWORD PTR[32+rsi],xmm4
  2646. movups XMMWORD PTR[48+rsi],xmm5
  2647. movups XMMWORD PTR[64+rsi],xmm6
  2648. jmp $L$ocb_enc_done
  2649. ALIGN 16
  2650. $L$ocb_enc_one::
  2651. movdqa xmm7,xmm10
  2652. call __ocb_encrypt1
  2653. movdqa xmm15,xmm7
  2654. movups XMMWORD PTR[rsi],xmm2
  2655. jmp $L$ocb_enc_done
  2656. ALIGN 16
  2657. $L$ocb_enc_two::
  2658. pxor xmm4,xmm4
  2659. pxor xmm5,xmm5
  2660. call __ocb_encrypt4
  2661. movdqa xmm15,xmm11
  2662. movups XMMWORD PTR[rsi],xmm2
  2663. movups XMMWORD PTR[16+rsi],xmm3
  2664. jmp $L$ocb_enc_done
  2665. ALIGN 16
  2666. $L$ocb_enc_three::
  2667. pxor xmm5,xmm5
  2668. call __ocb_encrypt4
  2669. movdqa xmm15,xmm12
  2670. movups XMMWORD PTR[rsi],xmm2
  2671. movups XMMWORD PTR[16+rsi],xmm3
  2672. movups XMMWORD PTR[32+rsi],xmm4
  2673. jmp $L$ocb_enc_done
  2674. ALIGN 16
  2675. $L$ocb_enc_four::
  2676. call __ocb_encrypt4
  2677. movdqa xmm15,xmm13
  2678. movups XMMWORD PTR[rsi],xmm2
  2679. movups XMMWORD PTR[16+rsi],xmm3
  2680. movups XMMWORD PTR[32+rsi],xmm4
  2681. movups XMMWORD PTR[48+rsi],xmm5
  2682. $L$ocb_enc_done::
  2683. pxor xmm15,xmm0
  2684. movdqu XMMWORD PTR[rbp],xmm8
  2685. movdqu XMMWORD PTR[r9],xmm15
  2686. xorps xmm0,xmm0
  2687. pxor xmm1,xmm1
  2688. pxor xmm2,xmm2
  2689. pxor xmm3,xmm3
  2690. pxor xmm4,xmm4
  2691. pxor xmm5,xmm5
  2692. movaps xmm6,XMMWORD PTR[rsp]
  2693. movaps XMMWORD PTR[rsp],xmm0
  2694. movaps xmm7,XMMWORD PTR[16+rsp]
  2695. movaps XMMWORD PTR[16+rsp],xmm0
  2696. movaps xmm8,XMMWORD PTR[32+rsp]
  2697. movaps XMMWORD PTR[32+rsp],xmm0
  2698. movaps xmm9,XMMWORD PTR[48+rsp]
  2699. movaps XMMWORD PTR[48+rsp],xmm0
  2700. movaps xmm10,XMMWORD PTR[64+rsp]
  2701. movaps XMMWORD PTR[64+rsp],xmm0
  2702. movaps xmm11,XMMWORD PTR[80+rsp]
  2703. movaps XMMWORD PTR[80+rsp],xmm0
  2704. movaps xmm12,XMMWORD PTR[96+rsp]
  2705. movaps XMMWORD PTR[96+rsp],xmm0
  2706. movaps xmm13,XMMWORD PTR[112+rsp]
  2707. movaps XMMWORD PTR[112+rsp],xmm0
  2708. movaps xmm14,XMMWORD PTR[128+rsp]
  2709. movaps XMMWORD PTR[128+rsp],xmm0
  2710. movaps xmm15,XMMWORD PTR[144+rsp]
  2711. movaps XMMWORD PTR[144+rsp],xmm0
  2712. lea rax,QWORD PTR[((160+40))+rsp]
  2713. $L$ocb_enc_pop::
  2714. mov r14,QWORD PTR[((-40))+rax]
  2715. mov r13,QWORD PTR[((-32))+rax]
  2716. mov r12,QWORD PTR[((-24))+rax]
  2717. mov rbp,QWORD PTR[((-16))+rax]
  2718. mov rbx,QWORD PTR[((-8))+rax]
  2719. lea rsp,QWORD PTR[rax]
  2720. $L$ocb_enc_epilogue::
  2721. mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
  2722. mov rsi,QWORD PTR[16+rsp]
  2723. DB 0F3h,0C3h ;repret
  2724. $L$SEH_end_aesni_ocb_encrypt::
  2725. aesni_ocb_encrypt ENDP
  2726. ALIGN 32
  2727. __ocb_encrypt6 PROC PRIVATE
  2728. pxor xmm15,xmm9
  2729. movdqu xmm11,XMMWORD PTR[r12*1+rbx]
  2730. movdqa xmm12,xmm10
  2731. movdqu xmm13,XMMWORD PTR[r13*1+rbx]
  2732. movdqa xmm14,xmm10
  2733. pxor xmm10,xmm15
  2734. movdqu xmm15,XMMWORD PTR[r14*1+rbx]
  2735. pxor xmm11,xmm10
  2736. pxor xmm8,xmm2
  2737. pxor xmm2,xmm10
  2738. pxor xmm12,xmm11
  2739. pxor xmm8,xmm3
  2740. pxor xmm3,xmm11
  2741. pxor xmm13,xmm12
  2742. pxor xmm8,xmm4
  2743. pxor xmm4,xmm12
  2744. pxor xmm14,xmm13
  2745. pxor xmm8,xmm5
  2746. pxor xmm5,xmm13
  2747. pxor xmm15,xmm14
  2748. pxor xmm8,xmm6
  2749. pxor xmm6,xmm14
  2750. pxor xmm8,xmm7
  2751. pxor xmm7,xmm15
  2752. movups xmm0,XMMWORD PTR[32+r11]
  2753. lea r12,QWORD PTR[1+r8]
  2754. lea r13,QWORD PTR[3+r8]
  2755. lea r14,QWORD PTR[5+r8]
  2756. add r8,6
  2757. pxor xmm10,xmm9
  2758. bsf r12,r12
  2759. bsf r13,r13
  2760. bsf r14,r14
  2761. DB 102,15,56,220,209
  2762. DB 102,15,56,220,217
  2763. DB 102,15,56,220,225
  2764. DB 102,15,56,220,233
  2765. pxor xmm11,xmm9
  2766. pxor xmm12,xmm9
  2767. DB 102,15,56,220,241
  2768. pxor xmm13,xmm9
  2769. pxor xmm14,xmm9
  2770. DB 102,15,56,220,249
  2771. movups xmm1,XMMWORD PTR[48+r11]
  2772. pxor xmm15,xmm9
  2773. DB 102,15,56,220,208
  2774. DB 102,15,56,220,216
  2775. DB 102,15,56,220,224
  2776. DB 102,15,56,220,232
  2777. DB 102,15,56,220,240
  2778. DB 102,15,56,220,248
  2779. movups xmm0,XMMWORD PTR[64+r11]
  2780. shl r12,4
  2781. shl r13,4
  2782. jmp $L$ocb_enc_loop6
  2783. ALIGN 32
  2784. $L$ocb_enc_loop6::
  2785. DB 102,15,56,220,209
  2786. DB 102,15,56,220,217
  2787. DB 102,15,56,220,225
  2788. DB 102,15,56,220,233
  2789. DB 102,15,56,220,241
  2790. DB 102,15,56,220,249
  2791. movups xmm1,XMMWORD PTR[rax*1+rcx]
  2792. add rax,32
  2793. DB 102,15,56,220,208
  2794. DB 102,15,56,220,216
  2795. DB 102,15,56,220,224
  2796. DB 102,15,56,220,232
  2797. DB 102,15,56,220,240
  2798. DB 102,15,56,220,248
  2799. movups xmm0,XMMWORD PTR[((-16))+rax*1+rcx]
  2800. jnz $L$ocb_enc_loop6
  2801. DB 102,15,56,220,209
  2802. DB 102,15,56,220,217
  2803. DB 102,15,56,220,225
  2804. DB 102,15,56,220,233
  2805. DB 102,15,56,220,241
  2806. DB 102,15,56,220,249
  2807. movups xmm1,XMMWORD PTR[16+r11]
  2808. shl r14,4
  2809. DB 102,65,15,56,221,210
  2810. movdqu xmm10,XMMWORD PTR[rbx]
  2811. mov rax,r10
  2812. DB 102,65,15,56,221,219
  2813. DB 102,65,15,56,221,228
  2814. DB 102,65,15,56,221,237
  2815. DB 102,65,15,56,221,246
  2816. DB 102,65,15,56,221,255
  2817. DB 0F3h,0C3h ;repret
  2818. __ocb_encrypt6 ENDP
  2819. ALIGN 32
  2820. __ocb_encrypt4 PROC PRIVATE
  2821. pxor xmm15,xmm9
  2822. movdqu xmm11,XMMWORD PTR[r12*1+rbx]
  2823. movdqa xmm12,xmm10
  2824. movdqu xmm13,XMMWORD PTR[r13*1+rbx]
  2825. pxor xmm10,xmm15
  2826. pxor xmm11,xmm10
  2827. pxor xmm8,xmm2
  2828. pxor xmm2,xmm10
  2829. pxor xmm12,xmm11
  2830. pxor xmm8,xmm3
  2831. pxor xmm3,xmm11
  2832. pxor xmm13,xmm12
  2833. pxor xmm8,xmm4
  2834. pxor xmm4,xmm12
  2835. pxor xmm8,xmm5
  2836. pxor xmm5,xmm13
  2837. movups xmm0,XMMWORD PTR[32+r11]
  2838. pxor xmm10,xmm9
  2839. pxor xmm11,xmm9
  2840. pxor xmm12,xmm9
  2841. pxor xmm13,xmm9
  2842. DB 102,15,56,220,209
  2843. DB 102,15,56,220,217
  2844. DB 102,15,56,220,225
  2845. DB 102,15,56,220,233
  2846. movups xmm1,XMMWORD PTR[48+r11]
  2847. DB 102,15,56,220,208
  2848. DB 102,15,56,220,216
  2849. DB 102,15,56,220,224
  2850. DB 102,15,56,220,232
  2851. movups xmm0,XMMWORD PTR[64+r11]
  2852. jmp $L$ocb_enc_loop4
  2853. ALIGN 32
  2854. $L$ocb_enc_loop4::
  2855. DB 102,15,56,220,209
  2856. DB 102,15,56,220,217
  2857. DB 102,15,56,220,225
  2858. DB 102,15,56,220,233
  2859. movups xmm1,XMMWORD PTR[rax*1+rcx]
  2860. add rax,32
  2861. DB 102,15,56,220,208
  2862. DB 102,15,56,220,216
  2863. DB 102,15,56,220,224
  2864. DB 102,15,56,220,232
  2865. movups xmm0,XMMWORD PTR[((-16))+rax*1+rcx]
  2866. jnz $L$ocb_enc_loop4
  2867. DB 102,15,56,220,209
  2868. DB 102,15,56,220,217
  2869. DB 102,15,56,220,225
  2870. DB 102,15,56,220,233
  2871. movups xmm1,XMMWORD PTR[16+r11]
  2872. mov rax,r10
  2873. DB 102,65,15,56,221,210
  2874. DB 102,65,15,56,221,219
  2875. DB 102,65,15,56,221,228
  2876. DB 102,65,15,56,221,237
  2877. DB 0F3h,0C3h ;repret
  2878. __ocb_encrypt4 ENDP
  2879. ALIGN 32
  2880. __ocb_encrypt1 PROC PRIVATE
  2881. pxor xmm7,xmm15
  2882. pxor xmm7,xmm9
  2883. pxor xmm8,xmm2
  2884. pxor xmm2,xmm7
  2885. movups xmm0,XMMWORD PTR[32+r11]
  2886. DB 102,15,56,220,209
  2887. movups xmm1,XMMWORD PTR[48+r11]
  2888. pxor xmm7,xmm9
  2889. DB 102,15,56,220,208
  2890. movups xmm0,XMMWORD PTR[64+r11]
  2891. jmp $L$ocb_enc_loop1
  2892. ALIGN 32
  2893. $L$ocb_enc_loop1::
  2894. DB 102,15,56,220,209
  2895. movups xmm1,XMMWORD PTR[rax*1+rcx]
  2896. add rax,32
  2897. DB 102,15,56,220,208
  2898. movups xmm0,XMMWORD PTR[((-16))+rax*1+rcx]
  2899. jnz $L$ocb_enc_loop1
  2900. DB 102,15,56,220,209
  2901. movups xmm1,XMMWORD PTR[16+r11]
  2902. mov rax,r10
  2903. DB 102,15,56,221,215
  2904. DB 0F3h,0C3h ;repret
  2905. __ocb_encrypt1 ENDP
  2906. PUBLIC aesni_ocb_decrypt
  2907. ALIGN 32
  2908. aesni_ocb_decrypt PROC PUBLIC
  2909. mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
  2910. mov QWORD PTR[16+rsp],rsi
  2911. mov rax,rsp
  2912. $L$SEH_begin_aesni_ocb_decrypt::
  2913. mov rdi,rcx
  2914. mov rsi,rdx
  2915. mov rdx,r8
  2916. mov rcx,r9
  2917. mov r8,QWORD PTR[40+rsp]
  2918. mov r9,QWORD PTR[48+rsp]
  2919. lea rax,QWORD PTR[rsp]
  2920. push rbx
  2921. push rbp
  2922. push r12
  2923. push r13
  2924. push r14
  2925. lea rsp,QWORD PTR[((-160))+rsp]
  2926. movaps XMMWORD PTR[rsp],xmm6
  2927. movaps XMMWORD PTR[16+rsp],xmm7
  2928. movaps XMMWORD PTR[32+rsp],xmm8
  2929. movaps XMMWORD PTR[48+rsp],xmm9
  2930. movaps XMMWORD PTR[64+rsp],xmm10
  2931. movaps XMMWORD PTR[80+rsp],xmm11
  2932. movaps XMMWORD PTR[96+rsp],xmm12
  2933. movaps XMMWORD PTR[112+rsp],xmm13
  2934. movaps XMMWORD PTR[128+rsp],xmm14
  2935. movaps XMMWORD PTR[144+rsp],xmm15
  2936. $L$ocb_dec_body::
  2937. mov rbx,QWORD PTR[56+rax]
  2938. mov rbp,QWORD PTR[((56+8))+rax]
  2939. mov r10d,DWORD PTR[240+rcx]
  2940. mov r11,rcx
  2941. shl r10d,4
  2942. movups xmm9,XMMWORD PTR[rcx]
  2943. movups xmm1,XMMWORD PTR[16+r10*1+rcx]
  2944. movdqu xmm15,XMMWORD PTR[r9]
  2945. pxor xmm9,xmm1
  2946. pxor xmm15,xmm1
  2947. mov eax,16+32
  2948. lea rcx,QWORD PTR[32+r10*1+r11]
  2949. movups xmm1,XMMWORD PTR[16+r11]
  2950. sub rax,r10
  2951. mov r10,rax
  2952. movdqu xmm10,XMMWORD PTR[rbx]
  2953. movdqu xmm8,XMMWORD PTR[rbp]
  2954. test r8,1
  2955. jnz $L$ocb_dec_odd
  2956. bsf r12,r8
  2957. add r8,1
  2958. shl r12,4
  2959. movdqu xmm7,XMMWORD PTR[r12*1+rbx]
  2960. movdqu xmm2,XMMWORD PTR[rdi]
  2961. lea rdi,QWORD PTR[16+rdi]
  2962. call __ocb_decrypt1
  2963. movdqa xmm15,xmm7
  2964. movups XMMWORD PTR[rsi],xmm2
  2965. xorps xmm8,xmm2
  2966. lea rsi,QWORD PTR[16+rsi]
  2967. sub rdx,1
  2968. jz $L$ocb_dec_done
  2969. $L$ocb_dec_odd::
  2970. lea r12,QWORD PTR[1+r8]
  2971. lea r13,QWORD PTR[3+r8]
  2972. lea r14,QWORD PTR[5+r8]
  2973. lea r8,QWORD PTR[6+r8]
  2974. bsf r12,r12
  2975. bsf r13,r13
  2976. bsf r14,r14
  2977. shl r12,4
  2978. shl r13,4
  2979. shl r14,4
  2980. sub rdx,6
  2981. jc $L$ocb_dec_short
  2982. jmp $L$ocb_dec_grandloop
  2983. ALIGN 32
  2984. $L$ocb_dec_grandloop::
  2985. movdqu xmm2,XMMWORD PTR[rdi]
  2986. movdqu xmm3,XMMWORD PTR[16+rdi]
  2987. movdqu xmm4,XMMWORD PTR[32+rdi]
  2988. movdqu xmm5,XMMWORD PTR[48+rdi]
  2989. movdqu xmm6,XMMWORD PTR[64+rdi]
  2990. movdqu xmm7,XMMWORD PTR[80+rdi]
  2991. lea rdi,QWORD PTR[96+rdi]
  2992. call __ocb_decrypt6
  2993. movups XMMWORD PTR[rsi],xmm2
  2994. pxor xmm8,xmm2
  2995. movups XMMWORD PTR[16+rsi],xmm3
  2996. pxor xmm8,xmm3
  2997. movups XMMWORD PTR[32+rsi],xmm4
  2998. pxor xmm8,xmm4
  2999. movups XMMWORD PTR[48+rsi],xmm5
  3000. pxor xmm8,xmm5
  3001. movups XMMWORD PTR[64+rsi],xmm6
  3002. pxor xmm8,xmm6
  3003. movups XMMWORD PTR[80+rsi],xmm7
  3004. pxor xmm8,xmm7
  3005. lea rsi,QWORD PTR[96+rsi]
  3006. sub rdx,6
  3007. jnc $L$ocb_dec_grandloop
  3008. $L$ocb_dec_short::
  3009. add rdx,6
  3010. jz $L$ocb_dec_done
  3011. movdqu xmm2,XMMWORD PTR[rdi]
  3012. cmp rdx,2
  3013. jb $L$ocb_dec_one
  3014. movdqu xmm3,XMMWORD PTR[16+rdi]
  3015. je $L$ocb_dec_two
  3016. movdqu xmm4,XMMWORD PTR[32+rdi]
  3017. cmp rdx,4
  3018. jb $L$ocb_dec_three
  3019. movdqu xmm5,XMMWORD PTR[48+rdi]
  3020. je $L$ocb_dec_four
  3021. movdqu xmm6,XMMWORD PTR[64+rdi]
  3022. pxor xmm7,xmm7
  3023. call __ocb_decrypt6
  3024. movdqa xmm15,xmm14
  3025. movups XMMWORD PTR[rsi],xmm2
  3026. pxor xmm8,xmm2
  3027. movups XMMWORD PTR[16+rsi],xmm3
  3028. pxor xmm8,xmm3
  3029. movups XMMWORD PTR[32+rsi],xmm4
  3030. pxor xmm8,xmm4
  3031. movups XMMWORD PTR[48+rsi],xmm5
  3032. pxor xmm8,xmm5
  3033. movups XMMWORD PTR[64+rsi],xmm6
  3034. pxor xmm8,xmm6
  3035. jmp $L$ocb_dec_done
  3036. ALIGN 16
  3037. $L$ocb_dec_one::
  3038. movdqa xmm7,xmm10
  3039. call __ocb_decrypt1
  3040. movdqa xmm15,xmm7
  3041. movups XMMWORD PTR[rsi],xmm2
  3042. xorps xmm8,xmm2
  3043. jmp $L$ocb_dec_done
  3044. ALIGN 16
  3045. $L$ocb_dec_two::
  3046. pxor xmm4,xmm4
  3047. pxor xmm5,xmm5
  3048. call __ocb_decrypt4
  3049. movdqa xmm15,xmm11
  3050. movups XMMWORD PTR[rsi],xmm2
  3051. xorps xmm8,xmm2
  3052. movups XMMWORD PTR[16+rsi],xmm3
  3053. xorps xmm8,xmm3
  3054. jmp $L$ocb_dec_done
  3055. ALIGN 16
  3056. $L$ocb_dec_three::
  3057. pxor xmm5,xmm5
  3058. call __ocb_decrypt4
  3059. movdqa xmm15,xmm12
  3060. movups XMMWORD PTR[rsi],xmm2
  3061. xorps xmm8,xmm2
  3062. movups XMMWORD PTR[16+rsi],xmm3
  3063. xorps xmm8,xmm3
  3064. movups XMMWORD PTR[32+rsi],xmm4
  3065. xorps xmm8,xmm4
  3066. jmp $L$ocb_dec_done
  3067. ALIGN 16
  3068. $L$ocb_dec_four::
  3069. call __ocb_decrypt4
  3070. movdqa xmm15,xmm13
  3071. movups XMMWORD PTR[rsi],xmm2
  3072. pxor xmm8,xmm2
  3073. movups XMMWORD PTR[16+rsi],xmm3
  3074. pxor xmm8,xmm3
  3075. movups XMMWORD PTR[32+rsi],xmm4
  3076. pxor xmm8,xmm4
  3077. movups XMMWORD PTR[48+rsi],xmm5
  3078. pxor xmm8,xmm5
  3079. $L$ocb_dec_done::
  3080. pxor xmm15,xmm0
  3081. movdqu XMMWORD PTR[rbp],xmm8
  3082. movdqu XMMWORD PTR[r9],xmm15
  3083. xorps xmm0,xmm0
  3084. pxor xmm1,xmm1
  3085. pxor xmm2,xmm2
  3086. pxor xmm3,xmm3
  3087. pxor xmm4,xmm4
  3088. pxor xmm5,xmm5
  3089. movaps xmm6,XMMWORD PTR[rsp]
  3090. movaps XMMWORD PTR[rsp],xmm0
  3091. movaps xmm7,XMMWORD PTR[16+rsp]
  3092. movaps XMMWORD PTR[16+rsp],xmm0
  3093. movaps xmm8,XMMWORD PTR[32+rsp]
  3094. movaps XMMWORD PTR[32+rsp],xmm0
  3095. movaps xmm9,XMMWORD PTR[48+rsp]
  3096. movaps XMMWORD PTR[48+rsp],xmm0
  3097. movaps xmm10,XMMWORD PTR[64+rsp]
  3098. movaps XMMWORD PTR[64+rsp],xmm0
  3099. movaps xmm11,XMMWORD PTR[80+rsp]
  3100. movaps XMMWORD PTR[80+rsp],xmm0
  3101. movaps xmm12,XMMWORD PTR[96+rsp]
  3102. movaps XMMWORD PTR[96+rsp],xmm0
  3103. movaps xmm13,XMMWORD PTR[112+rsp]
  3104. movaps XMMWORD PTR[112+rsp],xmm0
  3105. movaps xmm14,XMMWORD PTR[128+rsp]
  3106. movaps XMMWORD PTR[128+rsp],xmm0
  3107. movaps xmm15,XMMWORD PTR[144+rsp]
  3108. movaps XMMWORD PTR[144+rsp],xmm0
  3109. lea rax,QWORD PTR[((160+40))+rsp]
  3110. $L$ocb_dec_pop::
  3111. mov r14,QWORD PTR[((-40))+rax]
  3112. mov r13,QWORD PTR[((-32))+rax]
  3113. mov r12,QWORD PTR[((-24))+rax]
  3114. mov rbp,QWORD PTR[((-16))+rax]
  3115. mov rbx,QWORD PTR[((-8))+rax]
  3116. lea rsp,QWORD PTR[rax]
  3117. $L$ocb_dec_epilogue::
  3118. mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
  3119. mov rsi,QWORD PTR[16+rsp]
  3120. DB 0F3h,0C3h ;repret
  3121. $L$SEH_end_aesni_ocb_decrypt::
  3122. aesni_ocb_decrypt ENDP
  3123. ALIGN 32
  3124. __ocb_decrypt6 PROC PRIVATE
  3125. pxor xmm15,xmm9
  3126. movdqu xmm11,XMMWORD PTR[r12*1+rbx]
  3127. movdqa xmm12,xmm10
  3128. movdqu xmm13,XMMWORD PTR[r13*1+rbx]
  3129. movdqa xmm14,xmm10
  3130. pxor xmm10,xmm15
  3131. movdqu xmm15,XMMWORD PTR[r14*1+rbx]
  3132. pxor xmm11,xmm10
  3133. pxor xmm2,xmm10
  3134. pxor xmm12,xmm11
  3135. pxor xmm3,xmm11
  3136. pxor xmm13,xmm12
  3137. pxor xmm4,xmm12
  3138. pxor xmm14,xmm13
  3139. pxor xmm5,xmm13
  3140. pxor xmm15,xmm14
  3141. pxor xmm6,xmm14
  3142. pxor xmm7,xmm15
  3143. movups xmm0,XMMWORD PTR[32+r11]
  3144. lea r12,QWORD PTR[1+r8]
  3145. lea r13,QWORD PTR[3+r8]
  3146. lea r14,QWORD PTR[5+r8]
  3147. add r8,6
  3148. pxor xmm10,xmm9
  3149. bsf r12,r12
  3150. bsf r13,r13
  3151. bsf r14,r14
  3152. DB 102,15,56,222,209
  3153. DB 102,15,56,222,217
  3154. DB 102,15,56,222,225
  3155. DB 102,15,56,222,233
  3156. pxor xmm11,xmm9
  3157. pxor xmm12,xmm9
  3158. DB 102,15,56,222,241
  3159. pxor xmm13,xmm9
  3160. pxor xmm14,xmm9
  3161. DB 102,15,56,222,249
  3162. movups xmm1,XMMWORD PTR[48+r11]
  3163. pxor xmm15,xmm9
  3164. DB 102,15,56,222,208
  3165. DB 102,15,56,222,216
  3166. DB 102,15,56,222,224
  3167. DB 102,15,56,222,232
  3168. DB 102,15,56,222,240
  3169. DB 102,15,56,222,248
  3170. movups xmm0,XMMWORD PTR[64+r11]
  3171. shl r12,4
  3172. shl r13,4
  3173. jmp $L$ocb_dec_loop6
  3174. ALIGN 32
  3175. $L$ocb_dec_loop6::
  3176. DB 102,15,56,222,209
  3177. DB 102,15,56,222,217
  3178. DB 102,15,56,222,225
  3179. DB 102,15,56,222,233
  3180. DB 102,15,56,222,241
  3181. DB 102,15,56,222,249
  3182. movups xmm1,XMMWORD PTR[rax*1+rcx]
  3183. add rax,32
  3184. DB 102,15,56,222,208
  3185. DB 102,15,56,222,216
  3186. DB 102,15,56,222,224
  3187. DB 102,15,56,222,232
  3188. DB 102,15,56,222,240
  3189. DB 102,15,56,222,248
  3190. movups xmm0,XMMWORD PTR[((-16))+rax*1+rcx]
  3191. jnz $L$ocb_dec_loop6
  3192. DB 102,15,56,222,209
  3193. DB 102,15,56,222,217
  3194. DB 102,15,56,222,225
  3195. DB 102,15,56,222,233
  3196. DB 102,15,56,222,241
  3197. DB 102,15,56,222,249
  3198. movups xmm1,XMMWORD PTR[16+r11]
  3199. shl r14,4
  3200. DB 102,65,15,56,223,210
  3201. movdqu xmm10,XMMWORD PTR[rbx]
  3202. mov rax,r10
  3203. DB 102,65,15,56,223,219
  3204. DB 102,65,15,56,223,228
  3205. DB 102,65,15,56,223,237
  3206. DB 102,65,15,56,223,246
  3207. DB 102,65,15,56,223,255
  3208. DB 0F3h,0C3h ;repret
  3209. __ocb_decrypt6 ENDP
  3210. ALIGN 32
  3211. __ocb_decrypt4 PROC PRIVATE
  3212. pxor xmm15,xmm9
  3213. movdqu xmm11,XMMWORD PTR[r12*1+rbx]
  3214. movdqa xmm12,xmm10
  3215. movdqu xmm13,XMMWORD PTR[r13*1+rbx]
  3216. pxor xmm10,xmm15
  3217. pxor xmm11,xmm10
  3218. pxor xmm2,xmm10
  3219. pxor xmm12,xmm11
  3220. pxor xmm3,xmm11
  3221. pxor xmm13,xmm12
  3222. pxor xmm4,xmm12
  3223. pxor xmm5,xmm13
  3224. movups xmm0,XMMWORD PTR[32+r11]
  3225. pxor xmm10,xmm9
  3226. pxor xmm11,xmm9
  3227. pxor xmm12,xmm9
  3228. pxor xmm13,xmm9
  3229. DB 102,15,56,222,209
  3230. DB 102,15,56,222,217
  3231. DB 102,15,56,222,225
  3232. DB 102,15,56,222,233
  3233. movups xmm1,XMMWORD PTR[48+r11]
  3234. DB 102,15,56,222,208
  3235. DB 102,15,56,222,216
  3236. DB 102,15,56,222,224
  3237. DB 102,15,56,222,232
  3238. movups xmm0,XMMWORD PTR[64+r11]
  3239. jmp $L$ocb_dec_loop4
  3240. ALIGN 32
  3241. $L$ocb_dec_loop4::
  3242. DB 102,15,56,222,209
  3243. DB 102,15,56,222,217
  3244. DB 102,15,56,222,225
  3245. DB 102,15,56,222,233
  3246. movups xmm1,XMMWORD PTR[rax*1+rcx]
  3247. add rax,32
  3248. DB 102,15,56,222,208
  3249. DB 102,15,56,222,216
  3250. DB 102,15,56,222,224
  3251. DB 102,15,56,222,232
  3252. movups xmm0,XMMWORD PTR[((-16))+rax*1+rcx]
  3253. jnz $L$ocb_dec_loop4
  3254. DB 102,15,56,222,209
  3255. DB 102,15,56,222,217
  3256. DB 102,15,56,222,225
  3257. DB 102,15,56,222,233
  3258. movups xmm1,XMMWORD PTR[16+r11]
  3259. mov rax,r10
  3260. DB 102,65,15,56,223,210
  3261. DB 102,65,15,56,223,219
  3262. DB 102,65,15,56,223,228
  3263. DB 102,65,15,56,223,237
  3264. DB 0F3h,0C3h ;repret
  3265. __ocb_decrypt4 ENDP
  3266. ALIGN 32
  3267. __ocb_decrypt1 PROC PRIVATE
  3268. pxor xmm7,xmm15
  3269. pxor xmm7,xmm9
  3270. pxor xmm2,xmm7
  3271. movups xmm0,XMMWORD PTR[32+r11]
  3272. DB 102,15,56,222,209
  3273. movups xmm1,XMMWORD PTR[48+r11]
  3274. pxor xmm7,xmm9
  3275. DB 102,15,56,222,208
  3276. movups xmm0,XMMWORD PTR[64+r11]
  3277. jmp $L$ocb_dec_loop1
  3278. ALIGN 32
  3279. $L$ocb_dec_loop1::
  3280. DB 102,15,56,222,209
  3281. movups xmm1,XMMWORD PTR[rax*1+rcx]
  3282. add rax,32
  3283. DB 102,15,56,222,208
  3284. movups xmm0,XMMWORD PTR[((-16))+rax*1+rcx]
  3285. jnz $L$ocb_dec_loop1
  3286. DB 102,15,56,222,209
  3287. movups xmm1,XMMWORD PTR[16+r11]
  3288. mov rax,r10
  3289. DB 102,15,56,223,215
  3290. DB 0F3h,0C3h ;repret
  3291. __ocb_decrypt1 ENDP
  3292. PUBLIC aesni_cbc_encrypt
  3293. ALIGN 16
  3294. aesni_cbc_encrypt PROC PUBLIC
  3295. mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
  3296. mov QWORD PTR[16+rsp],rsi
  3297. mov rax,rsp
  3298. $L$SEH_begin_aesni_cbc_encrypt::
  3299. mov rdi,rcx
  3300. mov rsi,rdx
  3301. mov rdx,r8
  3302. mov rcx,r9
  3303. mov r8,QWORD PTR[40+rsp]
  3304. mov r9,QWORD PTR[48+rsp]
  3305. test rdx,rdx
  3306. jz $L$cbc_ret
  3307. mov r10d,DWORD PTR[240+rcx]
  3308. mov r11,rcx
  3309. test r9d,r9d
  3310. jz $L$cbc_decrypt
  3311. movups xmm2,XMMWORD PTR[r8]
  3312. mov eax,r10d
  3313. cmp rdx,16
  3314. jb $L$cbc_enc_tail
  3315. sub rdx,16
  3316. jmp $L$cbc_enc_loop
  3317. ALIGN 16
  3318. $L$cbc_enc_loop::
  3319. movups xmm3,XMMWORD PTR[rdi]
  3320. lea rdi,QWORD PTR[16+rdi]
  3321. movups xmm0,XMMWORD PTR[rcx]
  3322. movups xmm1,XMMWORD PTR[16+rcx]
  3323. xorps xmm3,xmm0
  3324. lea rcx,QWORD PTR[32+rcx]
  3325. xorps xmm2,xmm3
  3326. $L$oop_enc1_15::
  3327. DB 102,15,56,220,209
  3328. dec eax
  3329. movups xmm1,XMMWORD PTR[rcx]
  3330. lea rcx,QWORD PTR[16+rcx]
  3331. jnz $L$oop_enc1_15
  3332. DB 102,15,56,221,209
  3333. mov eax,r10d
  3334. mov rcx,r11
  3335. movups XMMWORD PTR[rsi],xmm2
  3336. lea rsi,QWORD PTR[16+rsi]
  3337. sub rdx,16
  3338. jnc $L$cbc_enc_loop
  3339. add rdx,16
  3340. jnz $L$cbc_enc_tail
  3341. pxor xmm0,xmm0
  3342. pxor xmm1,xmm1
  3343. movups XMMWORD PTR[r8],xmm2
  3344. pxor xmm2,xmm2
  3345. pxor xmm3,xmm3
  3346. jmp $L$cbc_ret
  3347. $L$cbc_enc_tail::
  3348. mov rcx,rdx
  3349. xchg rsi,rdi
  3350. DD 09066A4F3h
  3351. mov ecx,16
  3352. sub rcx,rdx
  3353. xor eax,eax
  3354. DD 09066AAF3h
  3355. lea rdi,QWORD PTR[((-16))+rdi]
  3356. mov eax,r10d
  3357. mov rsi,rdi
  3358. mov rcx,r11
  3359. xor rdx,rdx
  3360. jmp $L$cbc_enc_loop
  3361. ALIGN 16
  3362. $L$cbc_decrypt::
  3363. cmp rdx,16
  3364. jne $L$cbc_decrypt_bulk
  3365. movdqu xmm2,XMMWORD PTR[rdi]
  3366. movdqu xmm3,XMMWORD PTR[r8]
  3367. movdqa xmm4,xmm2
  3368. movups xmm0,XMMWORD PTR[rcx]
  3369. movups xmm1,XMMWORD PTR[16+rcx]
  3370. lea rcx,QWORD PTR[32+rcx]
  3371. xorps xmm2,xmm0
  3372. $L$oop_dec1_16::
  3373. DB 102,15,56,222,209
  3374. dec r10d
  3375. movups xmm1,XMMWORD PTR[rcx]
  3376. lea rcx,QWORD PTR[16+rcx]
  3377. jnz $L$oop_dec1_16
  3378. DB 102,15,56,223,209
  3379. pxor xmm0,xmm0
  3380. pxor xmm1,xmm1
  3381. movdqu XMMWORD PTR[r8],xmm4
  3382. xorps xmm2,xmm3
  3383. pxor xmm3,xmm3
  3384. movups XMMWORD PTR[rsi],xmm2
  3385. pxor xmm2,xmm2
  3386. jmp $L$cbc_ret
  3387. ALIGN 16
  3388. $L$cbc_decrypt_bulk::
  3389. lea r11,QWORD PTR[rsp]
  3390. push rbp
  3391. sub rsp,176
  3392. and rsp,-16
  3393. movaps XMMWORD PTR[16+rsp],xmm6
  3394. movaps XMMWORD PTR[32+rsp],xmm7
  3395. movaps XMMWORD PTR[48+rsp],xmm8
  3396. movaps XMMWORD PTR[64+rsp],xmm9
  3397. movaps XMMWORD PTR[80+rsp],xmm10
  3398. movaps XMMWORD PTR[96+rsp],xmm11
  3399. movaps XMMWORD PTR[112+rsp],xmm12
  3400. movaps XMMWORD PTR[128+rsp],xmm13
  3401. movaps XMMWORD PTR[144+rsp],xmm14
  3402. movaps XMMWORD PTR[160+rsp],xmm15
  3403. $L$cbc_decrypt_body::
  3404. mov rbp,rcx
  3405. movups xmm10,XMMWORD PTR[r8]
  3406. mov eax,r10d
  3407. cmp rdx,050h
  3408. jbe $L$cbc_dec_tail
  3409. movups xmm0,XMMWORD PTR[rcx]
  3410. movdqu xmm2,XMMWORD PTR[rdi]
  3411. movdqu xmm3,XMMWORD PTR[16+rdi]
  3412. movdqa xmm11,xmm2
  3413. movdqu xmm4,XMMWORD PTR[32+rdi]
  3414. movdqa xmm12,xmm3
  3415. movdqu xmm5,XMMWORD PTR[48+rdi]
  3416. movdqa xmm13,xmm4
  3417. movdqu xmm6,XMMWORD PTR[64+rdi]
  3418. movdqa xmm14,xmm5
  3419. movdqu xmm7,XMMWORD PTR[80+rdi]
  3420. movdqa xmm15,xmm6
  3421. mov r9d,DWORD PTR[((OPENSSL_ia32cap_P+4))]
  3422. cmp rdx,070h
  3423. jbe $L$cbc_dec_six_or_seven
  3424. and r9d,71303168
  3425. sub rdx,050h
  3426. cmp r9d,4194304
  3427. je $L$cbc_dec_loop6_enter
  3428. sub rdx,020h
  3429. lea rcx,QWORD PTR[112+rcx]
  3430. jmp $L$cbc_dec_loop8_enter
  3431. ALIGN 16
  3432. $L$cbc_dec_loop8::
  3433. movups XMMWORD PTR[rsi],xmm9
  3434. lea rsi,QWORD PTR[16+rsi]
  3435. $L$cbc_dec_loop8_enter::
  3436. movdqu xmm8,XMMWORD PTR[96+rdi]
  3437. pxor xmm2,xmm0
  3438. movdqu xmm9,XMMWORD PTR[112+rdi]
  3439. pxor xmm3,xmm0
  3440. movups xmm1,XMMWORD PTR[((16-112))+rcx]
  3441. pxor xmm4,xmm0
  3442. mov rbp,-1
  3443. cmp rdx,070h
  3444. pxor xmm5,xmm0
  3445. pxor xmm6,xmm0
  3446. pxor xmm7,xmm0
  3447. pxor xmm8,xmm0
  3448. DB 102,15,56,222,209
  3449. pxor xmm9,xmm0
  3450. movups xmm0,XMMWORD PTR[((32-112))+rcx]
  3451. DB 102,15,56,222,217
  3452. DB 102,15,56,222,225
  3453. DB 102,15,56,222,233
  3454. DB 102,15,56,222,241
  3455. DB 102,15,56,222,249
  3456. DB 102,68,15,56,222,193
  3457. adc rbp,0
  3458. and rbp,128
  3459. DB 102,68,15,56,222,201
  3460. add rbp,rdi
  3461. movups xmm1,XMMWORD PTR[((48-112))+rcx]
  3462. DB 102,15,56,222,208
  3463. DB 102,15,56,222,216
  3464. DB 102,15,56,222,224
  3465. DB 102,15,56,222,232
  3466. DB 102,15,56,222,240
  3467. DB 102,15,56,222,248
  3468. DB 102,68,15,56,222,192
  3469. DB 102,68,15,56,222,200
  3470. movups xmm0,XMMWORD PTR[((64-112))+rcx]
  3471. nop
  3472. DB 102,15,56,222,209
  3473. DB 102,15,56,222,217
  3474. DB 102,15,56,222,225
  3475. DB 102,15,56,222,233
  3476. DB 102,15,56,222,241
  3477. DB 102,15,56,222,249
  3478. DB 102,68,15,56,222,193
  3479. DB 102,68,15,56,222,201
  3480. movups xmm1,XMMWORD PTR[((80-112))+rcx]
  3481. nop
  3482. DB 102,15,56,222,208
  3483. DB 102,15,56,222,216
  3484. DB 102,15,56,222,224
  3485. DB 102,15,56,222,232
  3486. DB 102,15,56,222,240
  3487. DB 102,15,56,222,248
  3488. DB 102,68,15,56,222,192
  3489. DB 102,68,15,56,222,200
  3490. movups xmm0,XMMWORD PTR[((96-112))+rcx]
  3491. nop
  3492. DB 102,15,56,222,209
  3493. DB 102,15,56,222,217
  3494. DB 102,15,56,222,225
  3495. DB 102,15,56,222,233
  3496. DB 102,15,56,222,241
  3497. DB 102,15,56,222,249
  3498. DB 102,68,15,56,222,193
  3499. DB 102,68,15,56,222,201
  3500. movups xmm1,XMMWORD PTR[((112-112))+rcx]
  3501. nop
  3502. DB 102,15,56,222,208
  3503. DB 102,15,56,222,216
  3504. DB 102,15,56,222,224
  3505. DB 102,15,56,222,232
  3506. DB 102,15,56,222,240
  3507. DB 102,15,56,222,248
  3508. DB 102,68,15,56,222,192
  3509. DB 102,68,15,56,222,200
  3510. movups xmm0,XMMWORD PTR[((128-112))+rcx]
  3511. nop
  3512. DB 102,15,56,222,209
  3513. DB 102,15,56,222,217
  3514. DB 102,15,56,222,225
  3515. DB 102,15,56,222,233
  3516. DB 102,15,56,222,241
  3517. DB 102,15,56,222,249
  3518. DB 102,68,15,56,222,193
  3519. DB 102,68,15,56,222,201
  3520. movups xmm1,XMMWORD PTR[((144-112))+rcx]
  3521. cmp eax,11
  3522. DB 102,15,56,222,208
  3523. DB 102,15,56,222,216
  3524. DB 102,15,56,222,224
  3525. DB 102,15,56,222,232
  3526. DB 102,15,56,222,240
  3527. DB 102,15,56,222,248
  3528. DB 102,68,15,56,222,192
  3529. DB 102,68,15,56,222,200
  3530. movups xmm0,XMMWORD PTR[((160-112))+rcx]
  3531. jb $L$cbc_dec_done
  3532. DB 102,15,56,222,209
  3533. DB 102,15,56,222,217
  3534. DB 102,15,56,222,225
  3535. DB 102,15,56,222,233
  3536. DB 102,15,56,222,241
  3537. DB 102,15,56,222,249
  3538. DB 102,68,15,56,222,193
  3539. DB 102,68,15,56,222,201
  3540. movups xmm1,XMMWORD PTR[((176-112))+rcx]
  3541. nop
  3542. DB 102,15,56,222,208
  3543. DB 102,15,56,222,216
  3544. DB 102,15,56,222,224
  3545. DB 102,15,56,222,232
  3546. DB 102,15,56,222,240
  3547. DB 102,15,56,222,248
  3548. DB 102,68,15,56,222,192
  3549. DB 102,68,15,56,222,200
  3550. movups xmm0,XMMWORD PTR[((192-112))+rcx]
  3551. je $L$cbc_dec_done
  3552. DB 102,15,56,222,209
  3553. DB 102,15,56,222,217
  3554. DB 102,15,56,222,225
  3555. DB 102,15,56,222,233
  3556. DB 102,15,56,222,241
  3557. DB 102,15,56,222,249
  3558. DB 102,68,15,56,222,193
  3559. DB 102,68,15,56,222,201
  3560. movups xmm1,XMMWORD PTR[((208-112))+rcx]
  3561. nop
  3562. DB 102,15,56,222,208
  3563. DB 102,15,56,222,216
  3564. DB 102,15,56,222,224
  3565. DB 102,15,56,222,232
  3566. DB 102,15,56,222,240
  3567. DB 102,15,56,222,248
  3568. DB 102,68,15,56,222,192
  3569. DB 102,68,15,56,222,200
  3570. movups xmm0,XMMWORD PTR[((224-112))+rcx]
  3571. jmp $L$cbc_dec_done
  3572. ALIGN 16
  3573. $L$cbc_dec_done::
  3574. DB 102,15,56,222,209
  3575. DB 102,15,56,222,217
  3576. pxor xmm10,xmm0
  3577. pxor xmm11,xmm0
  3578. DB 102,15,56,222,225
  3579. DB 102,15,56,222,233
  3580. pxor xmm12,xmm0
  3581. pxor xmm13,xmm0
  3582. DB 102,15,56,222,241
  3583. DB 102,15,56,222,249
  3584. pxor xmm14,xmm0
  3585. pxor xmm15,xmm0
  3586. DB 102,68,15,56,222,193
  3587. DB 102,68,15,56,222,201
  3588. movdqu xmm1,XMMWORD PTR[80+rdi]
  3589. DB 102,65,15,56,223,210
  3590. movdqu xmm10,XMMWORD PTR[96+rdi]
  3591. pxor xmm1,xmm0
  3592. DB 102,65,15,56,223,219
  3593. pxor xmm10,xmm0
  3594. movdqu xmm0,XMMWORD PTR[112+rdi]
  3595. DB 102,65,15,56,223,228
  3596. lea rdi,QWORD PTR[128+rdi]
  3597. movdqu xmm11,XMMWORD PTR[rbp]
  3598. DB 102,65,15,56,223,237
  3599. DB 102,65,15,56,223,246
  3600. movdqu xmm12,XMMWORD PTR[16+rbp]
  3601. movdqu xmm13,XMMWORD PTR[32+rbp]
  3602. DB 102,65,15,56,223,255
  3603. DB 102,68,15,56,223,193
  3604. movdqu xmm14,XMMWORD PTR[48+rbp]
  3605. movdqu xmm15,XMMWORD PTR[64+rbp]
  3606. DB 102,69,15,56,223,202
  3607. movdqa xmm10,xmm0
  3608. movdqu xmm1,XMMWORD PTR[80+rbp]
  3609. movups xmm0,XMMWORD PTR[((-112))+rcx]
  3610. movups XMMWORD PTR[rsi],xmm2
  3611. movdqa xmm2,xmm11
  3612. movups XMMWORD PTR[16+rsi],xmm3
  3613. movdqa xmm3,xmm12
  3614. movups XMMWORD PTR[32+rsi],xmm4
  3615. movdqa xmm4,xmm13
  3616. movups XMMWORD PTR[48+rsi],xmm5
  3617. movdqa xmm5,xmm14
  3618. movups XMMWORD PTR[64+rsi],xmm6
  3619. movdqa xmm6,xmm15
  3620. movups XMMWORD PTR[80+rsi],xmm7
  3621. movdqa xmm7,xmm1
  3622. movups XMMWORD PTR[96+rsi],xmm8
  3623. lea rsi,QWORD PTR[112+rsi]
  3624. sub rdx,080h
  3625. ja $L$cbc_dec_loop8
  3626. movaps xmm2,xmm9
  3627. lea rcx,QWORD PTR[((-112))+rcx]
  3628. add rdx,070h
  3629. jle $L$cbc_dec_clear_tail_collected
  3630. movups XMMWORD PTR[rsi],xmm9
  3631. lea rsi,QWORD PTR[16+rsi]
  3632. cmp rdx,050h
  3633. jbe $L$cbc_dec_tail
  3634. movaps xmm2,xmm11
  3635. $L$cbc_dec_six_or_seven::
  3636. cmp rdx,060h
  3637. ja $L$cbc_dec_seven
  3638. movaps xmm8,xmm7
  3639. call _aesni_decrypt6
  3640. pxor xmm2,xmm10
  3641. movaps xmm10,xmm8
  3642. pxor xmm3,xmm11
  3643. movdqu XMMWORD PTR[rsi],xmm2
  3644. pxor xmm4,xmm12
  3645. movdqu XMMWORD PTR[16+rsi],xmm3
  3646. pxor xmm3,xmm3
  3647. pxor xmm5,xmm13
  3648. movdqu XMMWORD PTR[32+rsi],xmm4
  3649. pxor xmm4,xmm4
  3650. pxor xmm6,xmm14
  3651. movdqu XMMWORD PTR[48+rsi],xmm5
  3652. pxor xmm5,xmm5
  3653. pxor xmm7,xmm15
  3654. movdqu XMMWORD PTR[64+rsi],xmm6
  3655. pxor xmm6,xmm6
  3656. lea rsi,QWORD PTR[80+rsi]
  3657. movdqa xmm2,xmm7
  3658. pxor xmm7,xmm7
  3659. jmp $L$cbc_dec_tail_collected
  3660. ALIGN 16
  3661. $L$cbc_dec_seven::
  3662. movups xmm8,XMMWORD PTR[96+rdi]
  3663. xorps xmm9,xmm9
  3664. call _aesni_decrypt8
  3665. movups xmm9,XMMWORD PTR[80+rdi]
  3666. pxor xmm2,xmm10
  3667. movups xmm10,XMMWORD PTR[96+rdi]
  3668. pxor xmm3,xmm11
  3669. movdqu XMMWORD PTR[rsi],xmm2
  3670. pxor xmm4,xmm12
  3671. movdqu XMMWORD PTR[16+rsi],xmm3
  3672. pxor xmm3,xmm3
  3673. pxor xmm5,xmm13
  3674. movdqu XMMWORD PTR[32+rsi],xmm4
  3675. pxor xmm4,xmm4
  3676. pxor xmm6,xmm14
  3677. movdqu XMMWORD PTR[48+rsi],xmm5
  3678. pxor xmm5,xmm5
  3679. pxor xmm7,xmm15
  3680. movdqu XMMWORD PTR[64+rsi],xmm6
  3681. pxor xmm6,xmm6
  3682. pxor xmm8,xmm9
  3683. movdqu XMMWORD PTR[80+rsi],xmm7
  3684. pxor xmm7,xmm7
  3685. lea rsi,QWORD PTR[96+rsi]
  3686. movdqa xmm2,xmm8
  3687. pxor xmm8,xmm8
  3688. pxor xmm9,xmm9
  3689. jmp $L$cbc_dec_tail_collected
  3690. ALIGN 16
  3691. $L$cbc_dec_loop6::
  3692. movups XMMWORD PTR[rsi],xmm7
  3693. lea rsi,QWORD PTR[16+rsi]
  3694. movdqu xmm2,XMMWORD PTR[rdi]
  3695. movdqu xmm3,XMMWORD PTR[16+rdi]
  3696. movdqa xmm11,xmm2
  3697. movdqu xmm4,XMMWORD PTR[32+rdi]
  3698. movdqa xmm12,xmm3
  3699. movdqu xmm5,XMMWORD PTR[48+rdi]
  3700. movdqa xmm13,xmm4
  3701. movdqu xmm6,XMMWORD PTR[64+rdi]
  3702. movdqa xmm14,xmm5
  3703. movdqu xmm7,XMMWORD PTR[80+rdi]
  3704. movdqa xmm15,xmm6
  3705. $L$cbc_dec_loop6_enter::
  3706. lea rdi,QWORD PTR[96+rdi]
  3707. movdqa xmm8,xmm7
  3708. call _aesni_decrypt6
  3709. pxor xmm2,xmm10
  3710. movdqa xmm10,xmm8
  3711. pxor xmm3,xmm11
  3712. movdqu XMMWORD PTR[rsi],xmm2
  3713. pxor xmm4,xmm12
  3714. movdqu XMMWORD PTR[16+rsi],xmm3
  3715. pxor xmm5,xmm13
  3716. movdqu XMMWORD PTR[32+rsi],xmm4
  3717. pxor xmm6,xmm14
  3718. mov rcx,rbp
  3719. movdqu XMMWORD PTR[48+rsi],xmm5
  3720. pxor xmm7,xmm15
  3721. mov eax,r10d
  3722. movdqu XMMWORD PTR[64+rsi],xmm6
  3723. lea rsi,QWORD PTR[80+rsi]
  3724. sub rdx,060h
  3725. ja $L$cbc_dec_loop6
  3726. movdqa xmm2,xmm7
  3727. add rdx,050h
  3728. jle $L$cbc_dec_clear_tail_collected
  3729. movups XMMWORD PTR[rsi],xmm7
  3730. lea rsi,QWORD PTR[16+rsi]
  3731. $L$cbc_dec_tail::
  3732. movups xmm2,XMMWORD PTR[rdi]
  3733. sub rdx,010h
  3734. jbe $L$cbc_dec_one
  3735. movups xmm3,XMMWORD PTR[16+rdi]
  3736. movaps xmm11,xmm2
  3737. sub rdx,010h
  3738. jbe $L$cbc_dec_two
  3739. movups xmm4,XMMWORD PTR[32+rdi]
  3740. movaps xmm12,xmm3
  3741. sub rdx,010h
  3742. jbe $L$cbc_dec_three
  3743. movups xmm5,XMMWORD PTR[48+rdi]
  3744. movaps xmm13,xmm4
  3745. sub rdx,010h
  3746. jbe $L$cbc_dec_four
  3747. movups xmm6,XMMWORD PTR[64+rdi]
  3748. movaps xmm14,xmm5
  3749. movaps xmm15,xmm6
  3750. xorps xmm7,xmm7
  3751. call _aesni_decrypt6
  3752. pxor xmm2,xmm10
  3753. movaps xmm10,xmm15
  3754. pxor xmm3,xmm11
  3755. movdqu XMMWORD PTR[rsi],xmm2
  3756. pxor xmm4,xmm12
  3757. movdqu XMMWORD PTR[16+rsi],xmm3
  3758. pxor xmm3,xmm3
  3759. pxor xmm5,xmm13
  3760. movdqu XMMWORD PTR[32+rsi],xmm4
  3761. pxor xmm4,xmm4
  3762. pxor xmm6,xmm14
  3763. movdqu XMMWORD PTR[48+rsi],xmm5
  3764. pxor xmm5,xmm5
  3765. lea rsi,QWORD PTR[64+rsi]
  3766. movdqa xmm2,xmm6
  3767. pxor xmm6,xmm6
  3768. pxor xmm7,xmm7
  3769. sub rdx,010h
  3770. jmp $L$cbc_dec_tail_collected
  3771. ALIGN 16
  3772. $L$cbc_dec_one::
  3773. movaps xmm11,xmm2
  3774. movups xmm0,XMMWORD PTR[rcx]
  3775. movups xmm1,XMMWORD PTR[16+rcx]
  3776. lea rcx,QWORD PTR[32+rcx]
  3777. xorps xmm2,xmm0
  3778. $L$oop_dec1_17::
  3779. DB 102,15,56,222,209
  3780. dec eax
  3781. movups xmm1,XMMWORD PTR[rcx]
  3782. lea rcx,QWORD PTR[16+rcx]
  3783. jnz $L$oop_dec1_17
  3784. DB 102,15,56,223,209
  3785. xorps xmm2,xmm10
  3786. movaps xmm10,xmm11
  3787. jmp $L$cbc_dec_tail_collected
  3788. ALIGN 16
  3789. $L$cbc_dec_two::
  3790. movaps xmm12,xmm3
  3791. call _aesni_decrypt2
  3792. pxor xmm2,xmm10
  3793. movaps xmm10,xmm12
  3794. pxor xmm3,xmm11
  3795. movdqu XMMWORD PTR[rsi],xmm2
  3796. movdqa xmm2,xmm3
  3797. pxor xmm3,xmm3
  3798. lea rsi,QWORD PTR[16+rsi]
  3799. jmp $L$cbc_dec_tail_collected
  3800. ALIGN 16
  3801. $L$cbc_dec_three::
  3802. movaps xmm13,xmm4
  3803. call _aesni_decrypt3
  3804. pxor xmm2,xmm10
  3805. movaps xmm10,xmm13
  3806. pxor xmm3,xmm11
  3807. movdqu XMMWORD PTR[rsi],xmm2
  3808. pxor xmm4,xmm12
  3809. movdqu XMMWORD PTR[16+rsi],xmm3
  3810. pxor xmm3,xmm3
  3811. movdqa xmm2,xmm4
  3812. pxor xmm4,xmm4
  3813. lea rsi,QWORD PTR[32+rsi]
  3814. jmp $L$cbc_dec_tail_collected
  3815. ALIGN 16
  3816. $L$cbc_dec_four::
  3817. movaps xmm14,xmm5
  3818. call _aesni_decrypt4
  3819. pxor xmm2,xmm10
  3820. movaps xmm10,xmm14
  3821. pxor xmm3,xmm11
  3822. movdqu XMMWORD PTR[rsi],xmm2
  3823. pxor xmm4,xmm12
  3824. movdqu XMMWORD PTR[16+rsi],xmm3
  3825. pxor xmm3,xmm3
  3826. pxor xmm5,xmm13
  3827. movdqu XMMWORD PTR[32+rsi],xmm4
  3828. pxor xmm4,xmm4
  3829. movdqa xmm2,xmm5
  3830. pxor xmm5,xmm5
  3831. lea rsi,QWORD PTR[48+rsi]
  3832. jmp $L$cbc_dec_tail_collected
  3833. ALIGN 16
  3834. $L$cbc_dec_clear_tail_collected::
  3835. pxor xmm3,xmm3
  3836. pxor xmm4,xmm4
  3837. pxor xmm5,xmm5
  3838. $L$cbc_dec_tail_collected::
  3839. movups XMMWORD PTR[r8],xmm10
  3840. and rdx,15
  3841. jnz $L$cbc_dec_tail_partial
  3842. movups XMMWORD PTR[rsi],xmm2
  3843. pxor xmm2,xmm2
  3844. jmp $L$cbc_dec_ret
  3845. ALIGN 16
  3846. $L$cbc_dec_tail_partial::
  3847. movaps XMMWORD PTR[rsp],xmm2
  3848. pxor xmm2,xmm2
  3849. mov rcx,16
  3850. mov rdi,rsi
  3851. sub rcx,rdx
  3852. lea rsi,QWORD PTR[rsp]
  3853. DD 09066A4F3h
  3854. movdqa XMMWORD PTR[rsp],xmm2
  3855. $L$cbc_dec_ret::
  3856. xorps xmm0,xmm0
  3857. pxor xmm1,xmm1
  3858. movaps xmm6,XMMWORD PTR[16+rsp]
  3859. movaps XMMWORD PTR[16+rsp],xmm0
  3860. movaps xmm7,XMMWORD PTR[32+rsp]
  3861. movaps XMMWORD PTR[32+rsp],xmm0
  3862. movaps xmm8,XMMWORD PTR[48+rsp]
  3863. movaps XMMWORD PTR[48+rsp],xmm0
  3864. movaps xmm9,XMMWORD PTR[64+rsp]
  3865. movaps XMMWORD PTR[64+rsp],xmm0
  3866. movaps xmm10,XMMWORD PTR[80+rsp]
  3867. movaps XMMWORD PTR[80+rsp],xmm0
  3868. movaps xmm11,XMMWORD PTR[96+rsp]
  3869. movaps XMMWORD PTR[96+rsp],xmm0
  3870. movaps xmm12,XMMWORD PTR[112+rsp]
  3871. movaps XMMWORD PTR[112+rsp],xmm0
  3872. movaps xmm13,XMMWORD PTR[128+rsp]
  3873. movaps XMMWORD PTR[128+rsp],xmm0
  3874. movaps xmm14,XMMWORD PTR[144+rsp]
  3875. movaps XMMWORD PTR[144+rsp],xmm0
  3876. movaps xmm15,XMMWORD PTR[160+rsp]
  3877. movaps XMMWORD PTR[160+rsp],xmm0
  3878. mov rbp,QWORD PTR[((-8))+r11]
  3879. lea rsp,QWORD PTR[r11]
  3880. $L$cbc_ret::
  3881. mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
  3882. mov rsi,QWORD PTR[16+rsp]
  3883. DB 0F3h,0C3h ;repret
  3884. $L$SEH_end_aesni_cbc_encrypt::
  3885. aesni_cbc_encrypt ENDP
  3886. PUBLIC aesni_set_decrypt_key
  3887. ALIGN 16
  3888. aesni_set_decrypt_key PROC PUBLIC
  3889. DB 048h,083h,0ECh,008h
  3890. call __aesni_set_encrypt_key
  3891. shl edx,4
  3892. test eax,eax
  3893. jnz $L$dec_key_ret
  3894. lea rcx,QWORD PTR[16+rdx*1+r8]
  3895. movups xmm0,XMMWORD PTR[r8]
  3896. movups xmm1,XMMWORD PTR[rcx]
  3897. movups XMMWORD PTR[rcx],xmm0
  3898. movups XMMWORD PTR[r8],xmm1
  3899. lea r8,QWORD PTR[16+r8]
  3900. lea rcx,QWORD PTR[((-16))+rcx]
  3901. $L$dec_key_inverse::
  3902. movups xmm0,XMMWORD PTR[r8]
  3903. movups xmm1,XMMWORD PTR[rcx]
  3904. DB 102,15,56,219,192
  3905. DB 102,15,56,219,201
  3906. lea r8,QWORD PTR[16+r8]
  3907. lea rcx,QWORD PTR[((-16))+rcx]
  3908. movups XMMWORD PTR[16+rcx],xmm0
  3909. movups XMMWORD PTR[(-16)+r8],xmm1
  3910. cmp rcx,r8
  3911. ja $L$dec_key_inverse
  3912. movups xmm0,XMMWORD PTR[r8]
  3913. DB 102,15,56,219,192
  3914. pxor xmm1,xmm1
  3915. movups XMMWORD PTR[rcx],xmm0
  3916. pxor xmm0,xmm0
  3917. $L$dec_key_ret::
  3918. add rsp,8
  3919. DB 0F3h,0C3h ;repret
  3920. $L$SEH_end_set_decrypt_key::
  3921. aesni_set_decrypt_key ENDP
  3922. PUBLIC aesni_set_encrypt_key
  3923. ALIGN 16
  3924. aesni_set_encrypt_key PROC PUBLIC
  3925. __aesni_set_encrypt_key::
  3926. DB 048h,083h,0ECh,008h
  3927. mov rax,-1
  3928. test rcx,rcx
  3929. jz $L$enc_key_ret
  3930. test r8,r8
  3931. jz $L$enc_key_ret
  3932. mov r10d,268437504
  3933. movups xmm0,XMMWORD PTR[rcx]
  3934. xorps xmm4,xmm4
  3935. and r10d,DWORD PTR[((OPENSSL_ia32cap_P+4))]
  3936. lea rax,QWORD PTR[16+r8]
  3937. cmp edx,256
  3938. je $L$14rounds
  3939. cmp edx,192
  3940. je $L$12rounds
  3941. cmp edx,128
  3942. jne $L$bad_keybits
  3943. $L$10rounds::
  3944. mov edx,9
  3945. cmp r10d,268435456
  3946. je $L$10rounds_alt
  3947. movups XMMWORD PTR[r8],xmm0
  3948. DB 102,15,58,223,200,1
  3949. call $L$key_expansion_128_cold
  3950. DB 102,15,58,223,200,2
  3951. call $L$key_expansion_128
  3952. DB 102,15,58,223,200,4
  3953. call $L$key_expansion_128
  3954. DB 102,15,58,223,200,8
  3955. call $L$key_expansion_128
  3956. DB 102,15,58,223,200,16
  3957. call $L$key_expansion_128
  3958. DB 102,15,58,223,200,32
  3959. call $L$key_expansion_128
  3960. DB 102,15,58,223,200,64
  3961. call $L$key_expansion_128
  3962. DB 102,15,58,223,200,128
  3963. call $L$key_expansion_128
  3964. DB 102,15,58,223,200,27
  3965. call $L$key_expansion_128
  3966. DB 102,15,58,223,200,54
  3967. call $L$key_expansion_128
  3968. movups XMMWORD PTR[rax],xmm0
  3969. mov DWORD PTR[80+rax],edx
  3970. xor eax,eax
  3971. jmp $L$enc_key_ret
  3972. ALIGN 16
  3973. $L$10rounds_alt::
  3974. movdqa xmm5,XMMWORD PTR[$L$key_rotate]
  3975. mov r10d,8
  3976. movdqa xmm4,XMMWORD PTR[$L$key_rcon1]
  3977. movdqa xmm2,xmm0
  3978. movdqu XMMWORD PTR[r8],xmm0
  3979. jmp $L$oop_key128
  3980. ALIGN 16
  3981. $L$oop_key128::
  3982. DB 102,15,56,0,197
  3983. DB 102,15,56,221,196
  3984. pslld xmm4,1
  3985. lea rax,QWORD PTR[16+rax]
  3986. movdqa xmm3,xmm2
  3987. pslldq xmm2,4
  3988. pxor xmm3,xmm2
  3989. pslldq xmm2,4
  3990. pxor xmm3,xmm2
  3991. pslldq xmm2,4
  3992. pxor xmm2,xmm3
  3993. pxor xmm0,xmm2
  3994. movdqu XMMWORD PTR[(-16)+rax],xmm0
  3995. movdqa xmm2,xmm0
  3996. dec r10d
  3997. jnz $L$oop_key128
  3998. movdqa xmm4,XMMWORD PTR[$L$key_rcon1b]
  3999. DB 102,15,56,0,197
  4000. DB 102,15,56,221,196
  4001. pslld xmm4,1
  4002. movdqa xmm3,xmm2
  4003. pslldq xmm2,4
  4004. pxor xmm3,xmm2
  4005. pslldq xmm2,4
  4006. pxor xmm3,xmm2
  4007. pslldq xmm2,4
  4008. pxor xmm2,xmm3
  4009. pxor xmm0,xmm2
  4010. movdqu XMMWORD PTR[rax],xmm0
  4011. movdqa xmm2,xmm0
  4012. DB 102,15,56,0,197
  4013. DB 102,15,56,221,196
  4014. movdqa xmm3,xmm2
  4015. pslldq xmm2,4
  4016. pxor xmm3,xmm2
  4017. pslldq xmm2,4
  4018. pxor xmm3,xmm2
  4019. pslldq xmm2,4
  4020. pxor xmm2,xmm3
  4021. pxor xmm0,xmm2
  4022. movdqu XMMWORD PTR[16+rax],xmm0
  4023. mov DWORD PTR[96+rax],edx
  4024. xor eax,eax
  4025. jmp $L$enc_key_ret
  4026. ALIGN 16
  4027. $L$12rounds::
  4028. movq xmm2,QWORD PTR[16+rcx]
  4029. mov edx,11
  4030. cmp r10d,268435456
  4031. je $L$12rounds_alt
  4032. movups XMMWORD PTR[r8],xmm0
  4033. DB 102,15,58,223,202,1
  4034. call $L$key_expansion_192a_cold
  4035. DB 102,15,58,223,202,2
  4036. call $L$key_expansion_192b
  4037. DB 102,15,58,223,202,4
  4038. call $L$key_expansion_192a
  4039. DB 102,15,58,223,202,8
  4040. call $L$key_expansion_192b
  4041. DB 102,15,58,223,202,16
  4042. call $L$key_expansion_192a
  4043. DB 102,15,58,223,202,32
  4044. call $L$key_expansion_192b
  4045. DB 102,15,58,223,202,64
  4046. call $L$key_expansion_192a
  4047. DB 102,15,58,223,202,128
  4048. call $L$key_expansion_192b
  4049. movups XMMWORD PTR[rax],xmm0
  4050. mov DWORD PTR[48+rax],edx
  4051. xor rax,rax
  4052. jmp $L$enc_key_ret
  4053. ALIGN 16
  4054. $L$12rounds_alt::
  4055. movdqa xmm5,XMMWORD PTR[$L$key_rotate192]
  4056. movdqa xmm4,XMMWORD PTR[$L$key_rcon1]
  4057. mov r10d,8
  4058. movdqu XMMWORD PTR[r8],xmm0
  4059. jmp $L$oop_key192
  4060. ALIGN 16
  4061. $L$oop_key192::
  4062. movq QWORD PTR[rax],xmm2
  4063. movdqa xmm1,xmm2
  4064. DB 102,15,56,0,213
  4065. DB 102,15,56,221,212
  4066. pslld xmm4,1
  4067. lea rax,QWORD PTR[24+rax]
  4068. movdqa xmm3,xmm0
  4069. pslldq xmm0,4
  4070. pxor xmm3,xmm0
  4071. pslldq xmm0,4
  4072. pxor xmm3,xmm0
  4073. pslldq xmm0,4
  4074. pxor xmm0,xmm3
  4075. pshufd xmm3,xmm0,0ffh
  4076. pxor xmm3,xmm1
  4077. pslldq xmm1,4
  4078. pxor xmm3,xmm1
  4079. pxor xmm0,xmm2
  4080. pxor xmm2,xmm3
  4081. movdqu XMMWORD PTR[(-16)+rax],xmm0
  4082. dec r10d
  4083. jnz $L$oop_key192
  4084. mov DWORD PTR[32+rax],edx
  4085. xor eax,eax
  4086. jmp $L$enc_key_ret
  4087. ALIGN 16
  4088. $L$14rounds::
  4089. movups xmm2,XMMWORD PTR[16+rcx]
  4090. mov edx,13
  4091. lea rax,QWORD PTR[16+rax]
  4092. cmp r10d,268435456
  4093. je $L$14rounds_alt
  4094. movups XMMWORD PTR[r8],xmm0
  4095. movups XMMWORD PTR[16+r8],xmm2
  4096. DB 102,15,58,223,202,1
  4097. call $L$key_expansion_256a_cold
  4098. DB 102,15,58,223,200,1
  4099. call $L$key_expansion_256b
  4100. DB 102,15,58,223,202,2
  4101. call $L$key_expansion_256a
  4102. DB 102,15,58,223,200,2
  4103. call $L$key_expansion_256b
  4104. DB 102,15,58,223,202,4
  4105. call $L$key_expansion_256a
  4106. DB 102,15,58,223,200,4
  4107. call $L$key_expansion_256b
  4108. DB 102,15,58,223,202,8
  4109. call $L$key_expansion_256a
  4110. DB 102,15,58,223,200,8
  4111. call $L$key_expansion_256b
  4112. DB 102,15,58,223,202,16
  4113. call $L$key_expansion_256a
  4114. DB 102,15,58,223,200,16
  4115. call $L$key_expansion_256b
  4116. DB 102,15,58,223,202,32
  4117. call $L$key_expansion_256a
  4118. DB 102,15,58,223,200,32
  4119. call $L$key_expansion_256b
  4120. DB 102,15,58,223,202,64
  4121. call $L$key_expansion_256a
  4122. movups XMMWORD PTR[rax],xmm0
  4123. mov DWORD PTR[16+rax],edx
  4124. xor rax,rax
  4125. jmp $L$enc_key_ret
  4126. ALIGN 16
  4127. $L$14rounds_alt::
  4128. movdqa xmm5,XMMWORD PTR[$L$key_rotate]
  4129. movdqa xmm4,XMMWORD PTR[$L$key_rcon1]
  4130. mov r10d,7
  4131. movdqu XMMWORD PTR[r8],xmm0
  4132. movdqa xmm1,xmm2
  4133. movdqu XMMWORD PTR[16+r8],xmm2
  4134. jmp $L$oop_key256
  4135. ALIGN 16
  4136. $L$oop_key256::
  4137. DB 102,15,56,0,213
  4138. DB 102,15,56,221,212
  4139. movdqa xmm3,xmm0
  4140. pslldq xmm0,4
  4141. pxor xmm3,xmm0
  4142. pslldq xmm0,4
  4143. pxor xmm3,xmm0
  4144. pslldq xmm0,4
  4145. pxor xmm0,xmm3
  4146. pslld xmm4,1
  4147. pxor xmm0,xmm2
  4148. movdqu XMMWORD PTR[rax],xmm0
  4149. dec r10d
  4150. jz $L$done_key256
  4151. pshufd xmm2,xmm0,0ffh
  4152. pxor xmm3,xmm3
  4153. DB 102,15,56,221,211
  4154. movdqa xmm3,xmm1
  4155. pslldq xmm1,4
  4156. pxor xmm3,xmm1
  4157. pslldq xmm1,4
  4158. pxor xmm3,xmm1
  4159. pslldq xmm1,4
  4160. pxor xmm1,xmm3
  4161. pxor xmm2,xmm1
  4162. movdqu XMMWORD PTR[16+rax],xmm2
  4163. lea rax,QWORD PTR[32+rax]
  4164. movdqa xmm1,xmm2
  4165. jmp $L$oop_key256
  4166. $L$done_key256::
  4167. mov DWORD PTR[16+rax],edx
  4168. xor eax,eax
  4169. jmp $L$enc_key_ret
  4170. ALIGN 16
  4171. $L$bad_keybits::
  4172. mov rax,-2
  4173. $L$enc_key_ret::
  4174. pxor xmm0,xmm0
  4175. pxor xmm1,xmm1
  4176. pxor xmm2,xmm2
  4177. pxor xmm3,xmm3
  4178. pxor xmm4,xmm4
  4179. pxor xmm5,xmm5
  4180. add rsp,8
  4181. DB 0F3h,0C3h ;repret
  4182. $L$SEH_end_set_encrypt_key::
  4183. ALIGN 16
  4184. $L$key_expansion_128::
  4185. movups XMMWORD PTR[rax],xmm0
  4186. lea rax,QWORD PTR[16+rax]
  4187. $L$key_expansion_128_cold::
  4188. shufps xmm4,xmm0,16
  4189. xorps xmm0,xmm4
  4190. shufps xmm4,xmm0,140
  4191. xorps xmm0,xmm4
  4192. shufps xmm1,xmm1,255
  4193. xorps xmm0,xmm1
  4194. DB 0F3h,0C3h ;repret
  4195. ALIGN 16
  4196. $L$key_expansion_192a::
  4197. movups XMMWORD PTR[rax],xmm0
  4198. lea rax,QWORD PTR[16+rax]
  4199. $L$key_expansion_192a_cold::
  4200. movaps xmm5,xmm2
  4201. $L$key_expansion_192b_warm::
  4202. shufps xmm4,xmm0,16
  4203. movdqa xmm3,xmm2
  4204. xorps xmm0,xmm4
  4205. shufps xmm4,xmm0,140
  4206. pslldq xmm3,4
  4207. xorps xmm0,xmm4
  4208. pshufd xmm1,xmm1,85
  4209. pxor xmm2,xmm3
  4210. pxor xmm0,xmm1
  4211. pshufd xmm3,xmm0,255
  4212. pxor xmm2,xmm3
  4213. DB 0F3h,0C3h ;repret
  4214. ALIGN 16
  4215. $L$key_expansion_192b::
  4216. movaps xmm3,xmm0
  4217. shufps xmm5,xmm0,68
  4218. movups XMMWORD PTR[rax],xmm5
  4219. shufps xmm3,xmm2,78
  4220. movups XMMWORD PTR[16+rax],xmm3
  4221. lea rax,QWORD PTR[32+rax]
  4222. jmp $L$key_expansion_192b_warm
  4223. ALIGN 16
  4224. $L$key_expansion_256a::
  4225. movups XMMWORD PTR[rax],xmm2
  4226. lea rax,QWORD PTR[16+rax]
  4227. $L$key_expansion_256a_cold::
  4228. shufps xmm4,xmm0,16
  4229. xorps xmm0,xmm4
  4230. shufps xmm4,xmm0,140
  4231. xorps xmm0,xmm4
  4232. shufps xmm1,xmm1,255
  4233. xorps xmm0,xmm1
  4234. DB 0F3h,0C3h ;repret
  4235. ALIGN 16
  4236. $L$key_expansion_256b::
  4237. movups XMMWORD PTR[rax],xmm0
  4238. lea rax,QWORD PTR[16+rax]
  4239. shufps xmm4,xmm2,16
  4240. xorps xmm2,xmm4
  4241. shufps xmm4,xmm2,140
  4242. xorps xmm2,xmm4
  4243. shufps xmm1,xmm1,170
  4244. xorps xmm2,xmm1
  4245. DB 0F3h,0C3h ;repret
  4246. aesni_set_encrypt_key ENDP
  4247. ALIGN 64
  4248. $L$bswap_mask::
  4249. DB 15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0
  4250. $L$increment32::
  4251. DD 6,6,6,0
  4252. $L$increment64::
  4253. DD 1,0,0,0
  4254. $L$xts_magic::
  4255. DD 087h,0,1,0
  4256. $L$increment1::
  4257. DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
  4258. $L$key_rotate::
  4259. DD 00c0f0e0dh,00c0f0e0dh,00c0f0e0dh,00c0f0e0dh
  4260. $L$key_rotate192::
  4261. DD 004070605h,004070605h,004070605h,004070605h
  4262. $L$key_rcon1::
  4263. DD 1,1,1,1
  4264. $L$key_rcon1b::
  4265. DD 01bh,01bh,01bh,01bh
  4266. DB 65,69,83,32,102,111,114,32,73,110,116,101,108,32,65,69
  4267. DB 83,45,78,73,44,32,67,82,89,80,84,79,71,65,77,83
  4268. DB 32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115
  4269. DB 115,108,46,111,114,103,62,0
  4270. ALIGN 64
  4271. EXTERN __imp_RtlVirtualUnwind:NEAR
  4272. ALIGN 16
  4273. ecb_ccm64_se_handler PROC PRIVATE
  4274. push rsi
  4275. push rdi
  4276. push rbx
  4277. push rbp
  4278. push r12
  4279. push r13
  4280. push r14
  4281. push r15
  4282. pushfq
  4283. sub rsp,64
  4284. mov rax,QWORD PTR[120+r8]
  4285. mov rbx,QWORD PTR[248+r8]
  4286. mov rsi,QWORD PTR[8+r9]
  4287. mov r11,QWORD PTR[56+r9]
  4288. mov r10d,DWORD PTR[r11]
  4289. lea r10,QWORD PTR[r10*1+rsi]
  4290. cmp rbx,r10
  4291. jb $L$common_seh_tail
  4292. mov rax,QWORD PTR[152+r8]
  4293. mov r10d,DWORD PTR[4+r11]
  4294. lea r10,QWORD PTR[r10*1+rsi]
  4295. cmp rbx,r10
  4296. jae $L$common_seh_tail
  4297. lea rsi,QWORD PTR[rax]
  4298. lea rdi,QWORD PTR[512+r8]
  4299. mov ecx,8
  4300. DD 0a548f3fch
  4301. lea rax,QWORD PTR[88+rax]
  4302. jmp $L$common_seh_tail
  4303. ecb_ccm64_se_handler ENDP
  4304. ALIGN 16
  4305. ctr_xts_se_handler PROC PRIVATE
  4306. push rsi
  4307. push rdi
  4308. push rbx
  4309. push rbp
  4310. push r12
  4311. push r13
  4312. push r14
  4313. push r15
  4314. pushfq
  4315. sub rsp,64
  4316. mov rax,QWORD PTR[120+r8]
  4317. mov rbx,QWORD PTR[248+r8]
  4318. mov rsi,QWORD PTR[8+r9]
  4319. mov r11,QWORD PTR[56+r9]
  4320. mov r10d,DWORD PTR[r11]
  4321. lea r10,QWORD PTR[r10*1+rsi]
  4322. cmp rbx,r10
  4323. jb $L$common_seh_tail
  4324. mov rax,QWORD PTR[152+r8]
  4325. mov r10d,DWORD PTR[4+r11]
  4326. lea r10,QWORD PTR[r10*1+rsi]
  4327. cmp rbx,r10
  4328. jae $L$common_seh_tail
  4329. mov rax,QWORD PTR[208+r8]
  4330. lea rsi,QWORD PTR[((-168))+rax]
  4331. lea rdi,QWORD PTR[512+r8]
  4332. mov ecx,20
  4333. DD 0a548f3fch
  4334. mov rbp,QWORD PTR[((-8))+rax]
  4335. mov QWORD PTR[160+r8],rbp
  4336. jmp $L$common_seh_tail
  4337. ctr_xts_se_handler ENDP
  4338. ALIGN 16
  4339. ocb_se_handler PROC PRIVATE
  4340. push rsi
  4341. push rdi
  4342. push rbx
  4343. push rbp
  4344. push r12
  4345. push r13
  4346. push r14
  4347. push r15
  4348. pushfq
  4349. sub rsp,64
  4350. mov rax,QWORD PTR[120+r8]
  4351. mov rbx,QWORD PTR[248+r8]
  4352. mov rsi,QWORD PTR[8+r9]
  4353. mov r11,QWORD PTR[56+r9]
  4354. mov r10d,DWORD PTR[r11]
  4355. lea r10,QWORD PTR[r10*1+rsi]
  4356. cmp rbx,r10
  4357. jb $L$common_seh_tail
  4358. mov r10d,DWORD PTR[4+r11]
  4359. lea r10,QWORD PTR[r10*1+rsi]
  4360. cmp rbx,r10
  4361. jae $L$common_seh_tail
  4362. mov r10d,DWORD PTR[8+r11]
  4363. lea r10,QWORD PTR[r10*1+rsi]
  4364. cmp rbx,r10
  4365. jae $L$ocb_no_xmm
  4366. mov rax,QWORD PTR[152+r8]
  4367. lea rsi,QWORD PTR[rax]
  4368. lea rdi,QWORD PTR[512+r8]
  4369. mov ecx,20
  4370. DD 0a548f3fch
  4371. lea rax,QWORD PTR[((160+40))+rax]
  4372. $L$ocb_no_xmm::
  4373. mov rbx,QWORD PTR[((-8))+rax]
  4374. mov rbp,QWORD PTR[((-16))+rax]
  4375. mov r12,QWORD PTR[((-24))+rax]
  4376. mov r13,QWORD PTR[((-32))+rax]
  4377. mov r14,QWORD PTR[((-40))+rax]
  4378. mov QWORD PTR[144+r8],rbx
  4379. mov QWORD PTR[160+r8],rbp
  4380. mov QWORD PTR[216+r8],r12
  4381. mov QWORD PTR[224+r8],r13
  4382. mov QWORD PTR[232+r8],r14
  4383. jmp $L$common_seh_tail
  4384. ocb_se_handler ENDP
  4385. ALIGN 16
  4386. cbc_se_handler PROC PRIVATE
  4387. push rsi
  4388. push rdi
  4389. push rbx
  4390. push rbp
  4391. push r12
  4392. push r13
  4393. push r14
  4394. push r15
  4395. pushfq
  4396. sub rsp,64
  4397. mov rax,QWORD PTR[152+r8]
  4398. mov rbx,QWORD PTR[248+r8]
  4399. lea r10,QWORD PTR[$L$cbc_decrypt_bulk]
  4400. cmp rbx,r10
  4401. jb $L$common_seh_tail
  4402. mov rax,QWORD PTR[120+r8]
  4403. lea r10,QWORD PTR[$L$cbc_decrypt_body]
  4404. cmp rbx,r10
  4405. jb $L$common_seh_tail
  4406. mov rax,QWORD PTR[152+r8]
  4407. lea r10,QWORD PTR[$L$cbc_ret]
  4408. cmp rbx,r10
  4409. jae $L$common_seh_tail
  4410. lea rsi,QWORD PTR[16+rax]
  4411. lea rdi,QWORD PTR[512+r8]
  4412. mov ecx,20
  4413. DD 0a548f3fch
  4414. mov rax,QWORD PTR[208+r8]
  4415. mov rbp,QWORD PTR[((-8))+rax]
  4416. mov QWORD PTR[160+r8],rbp
  4417. $L$common_seh_tail::
  4418. mov rdi,QWORD PTR[8+rax]
  4419. mov rsi,QWORD PTR[16+rax]
  4420. mov QWORD PTR[152+r8],rax
  4421. mov QWORD PTR[168+r8],rsi
  4422. mov QWORD PTR[176+r8],rdi
  4423. mov rdi,QWORD PTR[40+r9]
  4424. mov rsi,r8
  4425. mov ecx,154
  4426. DD 0a548f3fch
  4427. mov rsi,r9
  4428. xor rcx,rcx
  4429. mov rdx,QWORD PTR[8+rsi]
  4430. mov r8,QWORD PTR[rsi]
  4431. mov r9,QWORD PTR[16+rsi]
  4432. mov r10,QWORD PTR[40+rsi]
  4433. lea r11,QWORD PTR[56+rsi]
  4434. lea r12,QWORD PTR[24+rsi]
  4435. mov QWORD PTR[32+rsp],r10
  4436. mov QWORD PTR[40+rsp],r11
  4437. mov QWORD PTR[48+rsp],r12
  4438. mov QWORD PTR[56+rsp],rcx
  4439. call QWORD PTR[__imp_RtlVirtualUnwind]
  4440. mov eax,1
  4441. add rsp,64
  4442. popfq
  4443. pop r15
  4444. pop r14
  4445. pop r13
  4446. pop r12
  4447. pop rbp
  4448. pop rbx
  4449. pop rdi
  4450. pop rsi
  4451. DB 0F3h,0C3h ;repret
  4452. cbc_se_handler ENDP
  4453. .text$ ENDS
  4454. .pdata SEGMENT READONLY ALIGN(4)
  4455. ALIGN 4
  4456. DD imagerel $L$SEH_begin_aesni_ecb_encrypt
  4457. DD imagerel $L$SEH_end_aesni_ecb_encrypt
  4458. DD imagerel $L$SEH_info_ecb
  4459. DD imagerel $L$SEH_begin_aesni_ccm64_encrypt_blocks
  4460. DD imagerel $L$SEH_end_aesni_ccm64_encrypt_blocks
  4461. DD imagerel $L$SEH_info_ccm64_enc
  4462. DD imagerel $L$SEH_begin_aesni_ccm64_decrypt_blocks
  4463. DD imagerel $L$SEH_end_aesni_ccm64_decrypt_blocks
  4464. DD imagerel $L$SEH_info_ccm64_dec
  4465. DD imagerel $L$SEH_begin_aesni_ctr32_encrypt_blocks
  4466. DD imagerel $L$SEH_end_aesni_ctr32_encrypt_blocks
  4467. DD imagerel $L$SEH_info_ctr32
  4468. DD imagerel $L$SEH_begin_aesni_xts_encrypt
  4469. DD imagerel $L$SEH_end_aesni_xts_encrypt
  4470. DD imagerel $L$SEH_info_xts_enc
  4471. DD imagerel $L$SEH_begin_aesni_xts_decrypt
  4472. DD imagerel $L$SEH_end_aesni_xts_decrypt
  4473. DD imagerel $L$SEH_info_xts_dec
  4474. DD imagerel $L$SEH_begin_aesni_ocb_encrypt
  4475. DD imagerel $L$SEH_end_aesni_ocb_encrypt
  4476. DD imagerel $L$SEH_info_ocb_enc
  4477. DD imagerel $L$SEH_begin_aesni_ocb_decrypt
  4478. DD imagerel $L$SEH_end_aesni_ocb_decrypt
  4479. DD imagerel $L$SEH_info_ocb_dec
  4480. DD imagerel $L$SEH_begin_aesni_cbc_encrypt
  4481. DD imagerel $L$SEH_end_aesni_cbc_encrypt
  4482. DD imagerel $L$SEH_info_cbc
  4483. DD imagerel aesni_set_decrypt_key
  4484. DD imagerel $L$SEH_end_set_decrypt_key
  4485. DD imagerel $L$SEH_info_key
  4486. DD imagerel aesni_set_encrypt_key
  4487. DD imagerel $L$SEH_end_set_encrypt_key
  4488. DD imagerel $L$SEH_info_key
  4489. .pdata ENDS
  4490. .xdata SEGMENT READONLY ALIGN(8)
  4491. ALIGN 8
  4492. $L$SEH_info_ecb::
  4493. DB 9,0,0,0
  4494. DD imagerel ecb_ccm64_se_handler
  4495. DD imagerel $L$ecb_enc_body,imagerel $L$ecb_enc_ret
  4496. $L$SEH_info_ccm64_enc::
  4497. DB 9,0,0,0
  4498. DD imagerel ecb_ccm64_se_handler
  4499. DD imagerel $L$ccm64_enc_body,imagerel $L$ccm64_enc_ret
  4500. $L$SEH_info_ccm64_dec::
  4501. DB 9,0,0,0
  4502. DD imagerel ecb_ccm64_se_handler
  4503. DD imagerel $L$ccm64_dec_body,imagerel $L$ccm64_dec_ret
  4504. $L$SEH_info_ctr32::
  4505. DB 9,0,0,0
  4506. DD imagerel ctr_xts_se_handler
  4507. DD imagerel $L$ctr32_body,imagerel $L$ctr32_epilogue
  4508. $L$SEH_info_xts_enc::
  4509. DB 9,0,0,0
  4510. DD imagerel ctr_xts_se_handler
  4511. DD imagerel $L$xts_enc_body,imagerel $L$xts_enc_epilogue
  4512. $L$SEH_info_xts_dec::
  4513. DB 9,0,0,0
  4514. DD imagerel ctr_xts_se_handler
  4515. DD imagerel $L$xts_dec_body,imagerel $L$xts_dec_epilogue
  4516. $L$SEH_info_ocb_enc::
  4517. DB 9,0,0,0
  4518. DD imagerel ocb_se_handler
  4519. DD imagerel $L$ocb_enc_body,imagerel $L$ocb_enc_epilogue
  4520. DD imagerel $L$ocb_enc_pop
  4521. DD 0
  4522. $L$SEH_info_ocb_dec::
  4523. DB 9,0,0,0
  4524. DD imagerel ocb_se_handler
  4525. DD imagerel $L$ocb_dec_body,imagerel $L$ocb_dec_epilogue
  4526. DD imagerel $L$ocb_dec_pop
  4527. DD 0
  4528. $L$SEH_info_cbc::
  4529. DB 9,0,0,0
  4530. DD imagerel cbc_se_handler
  4531. $L$SEH_info_key::
  4532. DB 001h,004h,001h,000h
  4533. DB 004h,002h,000h,000h
  4534. .xdata ENDS
  4535. END