123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191 |
- OPTION DOTNAME
- .text$ SEGMENT ALIGN(256) 'CODE'
- PUBLIC padlock_capability
- ALIGN 16
- padlock_capability PROC PUBLIC
- mov r8,rbx
- xor eax,eax
- cpuid
- xor eax,eax
- cmp ebx,0746e6543h
- jne $L$zhaoxin
- cmp edx,048727561h
- jne $L$noluck
- cmp ecx,0736c7561h
- jne $L$noluck
- jmp $L$zhaoxinEnd
- $L$zhaoxin::
- cmp ebx,068532020h
- jne $L$noluck
- cmp edx,068676e61h
- jne $L$noluck
- cmp ecx,020206961h
- jne $L$noluck
- $L$zhaoxinEnd::
- mov eax,0C0000000h
- cpuid
- mov edx,eax
- xor eax,eax
- cmp edx,0C0000001h
- jb $L$noluck
- mov eax,0C0000001h
- cpuid
- mov eax,edx
- and eax,0ffffffefh
- or eax,010h
- $L$noluck::
- mov rbx,r8
- DB 0F3h,0C3h ;repret
- padlock_capability ENDP
- PUBLIC padlock_key_bswap
- ALIGN 16
- padlock_key_bswap PROC PUBLIC
- mov edx,DWORD PTR[240+rcx]
- $L$bswap_loop::
- mov eax,DWORD PTR[rcx]
- bswap eax
- mov DWORD PTR[rcx],eax
- lea rcx,QWORD PTR[4+rcx]
- sub edx,1
- jnz $L$bswap_loop
- DB 0F3h,0C3h ;repret
- padlock_key_bswap ENDP
- PUBLIC padlock_verify_context
- ALIGN 16
- padlock_verify_context PROC PUBLIC
- mov rdx,rcx
- pushf
- lea rax,QWORD PTR[$L$padlock_saved_context]
- call _padlock_verify_ctx
- lea rsp,QWORD PTR[8+rsp]
- DB 0F3h,0C3h ;repret
- padlock_verify_context ENDP
- ALIGN 16
- _padlock_verify_ctx PROC PRIVATE
- mov r8,QWORD PTR[8+rsp]
- bt r8,30
- jnc $L$verified
- cmp rdx,QWORD PTR[rax]
- je $L$verified
- pushf
- popf
- $L$verified::
- mov QWORD PTR[rax],rdx
- DB 0F3h,0C3h ;repret
- _padlock_verify_ctx ENDP
- PUBLIC padlock_reload_key
- ALIGN 16
- padlock_reload_key PROC PUBLIC
- pushf
- popf
- DB 0F3h,0C3h ;repret
- padlock_reload_key ENDP
- PUBLIC padlock_aes_block
- ALIGN 16
- padlock_aes_block PROC PUBLIC
- mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
- mov QWORD PTR[16+rsp],rsi
- mov rax,rsp
- $L$SEH_begin_padlock_aes_block::
- mov rdi,rcx
- mov rsi,rdx
- mov rdx,r8
- mov r8,rbx
- mov rcx,1
- lea rbx,QWORD PTR[32+rdx]
- lea rdx,QWORD PTR[16+rdx]
- DB 0f3h,00fh,0a7h,0c8h
- mov rbx,r8
- mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
- mov rsi,QWORD PTR[16+rsp]
- DB 0F3h,0C3h ;repret
- $L$SEH_end_padlock_aes_block::
- padlock_aes_block ENDP
- PUBLIC padlock_xstore
- ALIGN 16
- padlock_xstore PROC PUBLIC
- mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
- mov QWORD PTR[16+rsp],rsi
- mov rax,rsp
- $L$SEH_begin_padlock_xstore::
- mov rdi,rcx
- mov rsi,rdx
- mov edx,esi
- DB 00fh,0a7h,0c0h
- mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
- mov rsi,QWORD PTR[16+rsp]
- DB 0F3h,0C3h ;repret
- $L$SEH_end_padlock_xstore::
- padlock_xstore ENDP
- PUBLIC padlock_sha1_oneshot
- ALIGN 16
- padlock_sha1_oneshot PROC PUBLIC
- mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
- mov QWORD PTR[16+rsp],rsi
- mov rax,rsp
- $L$SEH_begin_padlock_sha1_oneshot::
- mov rdi,rcx
- mov rsi,rdx
- mov rdx,r8
- mov rcx,rdx
- mov rdx,rdi
- movups xmm0,XMMWORD PTR[rdi]
- sub rsp,128+8
- mov eax,DWORD PTR[16+rdi]
- movaps XMMWORD PTR[rsp],xmm0
- mov rdi,rsp
- mov DWORD PTR[16+rsp],eax
- xor rax,rax
- DB 0f3h,00fh,0a6h,0c8h
- movaps xmm0,XMMWORD PTR[rsp]
- mov eax,DWORD PTR[16+rsp]
- add rsp,128+8
- movups XMMWORD PTR[rdx],xmm0
- mov DWORD PTR[16+rdx],eax
- mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
- mov rsi,QWORD PTR[16+rsp]
- DB 0F3h,0C3h ;repret
- $L$SEH_end_padlock_sha1_oneshot::
- padlock_sha1_oneshot ENDP
- PUBLIC padlock_sha1_blocks
- ALIGN 16
- padlock_sha1_blocks PROC PUBLIC
- mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
- mov QWORD PTR[16+rsp],rsi
- mov rax,rsp
- $L$SEH_begin_padlock_sha1_blocks::
- mov rdi,rcx
- mov rsi,rdx
- mov rdx,r8
- mov rcx,rdx
- mov rdx,rdi
- movups xmm0,XMMWORD PTR[rdi]
- sub rsp,128+8
- mov eax,DWORD PTR[16+rdi]
- movaps XMMWORD PTR[rsp],xmm0
- mov rdi,rsp
- mov DWORD PTR[16+rsp],eax
- mov rax,-1
- DB 0f3h,00fh,0a6h,0c8h
- movaps xmm0,XMMWORD PTR[rsp]
- mov eax,DWORD PTR[16+rsp]
- add rsp,128+8
- movups XMMWORD PTR[rdx],xmm0
- mov DWORD PTR[16+rdx],eax
- mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
- mov rsi,QWORD PTR[16+rsp]
- DB 0F3h,0C3h ;repret
- $L$SEH_end_padlock_sha1_blocks::
- padlock_sha1_blocks ENDP
- PUBLIC padlock_sha256_oneshot
- ALIGN 16
- padlock_sha256_oneshot PROC PUBLIC
- mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
- mov QWORD PTR[16+rsp],rsi
- mov rax,rsp
- $L$SEH_begin_padlock_sha256_oneshot::
- mov rdi,rcx
- mov rsi,rdx
- mov rdx,r8
- mov rcx,rdx
- mov rdx,rdi
- movups xmm0,XMMWORD PTR[rdi]
- sub rsp,128+8
- movups xmm1,XMMWORD PTR[16+rdi]
- movaps XMMWORD PTR[rsp],xmm0
- mov rdi,rsp
- movaps XMMWORD PTR[16+rsp],xmm1
- xor rax,rax
- DB 0f3h,00fh,0a6h,0d0h
- movaps xmm0,XMMWORD PTR[rsp]
- movaps xmm1,XMMWORD PTR[16+rsp]
- add rsp,128+8
- movups XMMWORD PTR[rdx],xmm0
- movups XMMWORD PTR[16+rdx],xmm1
- mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
- mov rsi,QWORD PTR[16+rsp]
- DB 0F3h,0C3h ;repret
- $L$SEH_end_padlock_sha256_oneshot::
- padlock_sha256_oneshot ENDP
- PUBLIC padlock_sha256_blocks
- ALIGN 16
- padlock_sha256_blocks PROC PUBLIC
- mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
- mov QWORD PTR[16+rsp],rsi
- mov rax,rsp
- $L$SEH_begin_padlock_sha256_blocks::
- mov rdi,rcx
- mov rsi,rdx
- mov rdx,r8
- mov rcx,rdx
- mov rdx,rdi
- movups xmm0,XMMWORD PTR[rdi]
- sub rsp,128+8
- movups xmm1,XMMWORD PTR[16+rdi]
- movaps XMMWORD PTR[rsp],xmm0
- mov rdi,rsp
- movaps XMMWORD PTR[16+rsp],xmm1
- mov rax,-1
- DB 0f3h,00fh,0a6h,0d0h
- movaps xmm0,XMMWORD PTR[rsp]
- movaps xmm1,XMMWORD PTR[16+rsp]
- add rsp,128+8
- movups XMMWORD PTR[rdx],xmm0
- movups XMMWORD PTR[16+rdx],xmm1
- mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
- mov rsi,QWORD PTR[16+rsp]
- DB 0F3h,0C3h ;repret
- $L$SEH_end_padlock_sha256_blocks::
- padlock_sha256_blocks ENDP
- PUBLIC padlock_sha512_blocks
- ALIGN 16
- padlock_sha512_blocks PROC PUBLIC
- mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
- mov QWORD PTR[16+rsp],rsi
- mov rax,rsp
- $L$SEH_begin_padlock_sha512_blocks::
- mov rdi,rcx
- mov rsi,rdx
- mov rdx,r8
- mov rcx,rdx
- mov rdx,rdi
- movups xmm0,XMMWORD PTR[rdi]
- sub rsp,128+8
- movups xmm1,XMMWORD PTR[16+rdi]
- movups xmm2,XMMWORD PTR[32+rdi]
- movups xmm3,XMMWORD PTR[48+rdi]
- movaps XMMWORD PTR[rsp],xmm0
- mov rdi,rsp
- movaps XMMWORD PTR[16+rsp],xmm1
- movaps XMMWORD PTR[32+rsp],xmm2
- movaps XMMWORD PTR[48+rsp],xmm3
- DB 0f3h,00fh,0a6h,0e0h
- movaps xmm0,XMMWORD PTR[rsp]
- movaps xmm1,XMMWORD PTR[16+rsp]
- movaps xmm2,XMMWORD PTR[32+rsp]
- movaps xmm3,XMMWORD PTR[48+rsp]
- add rsp,128+8
- movups XMMWORD PTR[rdx],xmm0
- movups XMMWORD PTR[16+rdx],xmm1
- movups XMMWORD PTR[32+rdx],xmm2
- movups XMMWORD PTR[48+rdx],xmm3
- mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
- mov rsi,QWORD PTR[16+rsp]
- DB 0F3h,0C3h ;repret
- $L$SEH_end_padlock_sha512_blocks::
- padlock_sha512_blocks ENDP
- PUBLIC padlock_ecb_encrypt
- ALIGN 16
- padlock_ecb_encrypt PROC PUBLIC
- mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
- mov QWORD PTR[16+rsp],rsi
- mov rax,rsp
- $L$SEH_begin_padlock_ecb_encrypt::
- mov rdi,rcx
- mov rsi,rdx
- mov rdx,r8
- mov rcx,r9
- push rbp
- push rbx
- xor eax,eax
- test rdx,15
- jnz $L$ecb_abort
- test rcx,15
- jnz $L$ecb_abort
- lea rax,QWORD PTR[$L$padlock_saved_context]
- pushf
- cld
- call _padlock_verify_ctx
- lea rdx,QWORD PTR[16+rdx]
- xor eax,eax
- xor ebx,ebx
- test DWORD PTR[rdx],32
- jnz $L$ecb_aligned
- test rdi,00fh
- setz al
- test rsi,00fh
- setz bl
- test eax,ebx
- jnz $L$ecb_aligned
- neg rax
- mov rbx,512
- not rax
- lea rbp,QWORD PTR[rsp]
- cmp rcx,rbx
- cmovc rbx,rcx
- and rax,rbx
- mov rbx,rcx
- neg rax
- and rbx,512-1
- lea rsp,QWORD PTR[rbp*1+rax]
- mov rax,512
- cmovz rbx,rax
- cmp rcx,rbx
- ja $L$ecb_loop
- mov rax,rsi
- cmp rbp,rsp
- cmove rax,rdi
- add rax,rcx
- neg rax
- and rax,0fffh
- cmp rax,128
- mov rax,-128
- cmovae rax,rbx
- and rbx,rax
- jz $L$ecb_unaligned_tail
- jmp $L$ecb_loop
- ALIGN 16
- $L$ecb_loop::
- cmp rbx,rcx
- cmova rbx,rcx
- mov r8,rdi
- mov r9,rsi
- mov r10,rcx
- mov rcx,rbx
- mov r11,rbx
- test rdi,00fh
- cmovnz rdi,rsp
- test rsi,00fh
- jz $L$ecb_inp_aligned
- shr rcx,3
- DB 0f3h,048h,0a5h
- sub rdi,rbx
- mov rcx,rbx
- mov rsi,rdi
- $L$ecb_inp_aligned::
- lea rax,QWORD PTR[((-16))+rdx]
- lea rbx,QWORD PTR[16+rdx]
- shr rcx,4
- DB 0f3h,00fh,0a7h,200
- mov rdi,r8
- mov rbx,r11
- test rdi,00fh
- jz $L$ecb_out_aligned
- mov rcx,rbx
- lea rsi,QWORD PTR[rsp]
- shr rcx,3
- DB 0f3h,048h,0a5h
- sub rdi,rbx
- $L$ecb_out_aligned::
- mov rsi,r9
- mov rcx,r10
- add rdi,rbx
- add rsi,rbx
- sub rcx,rbx
- mov rbx,512
- jz $L$ecb_break
- cmp rcx,rbx
- jae $L$ecb_loop
- $L$ecb_unaligned_tail::
- xor eax,eax
- cmp rbp,rsp
- cmove rax,rcx
- mov r8,rdi
- mov rbx,rcx
- sub rsp,rax
- shr rcx,3
- lea rdi,QWORD PTR[rsp]
- DB 0f3h,048h,0a5h
- mov rsi,rsp
- mov rdi,r8
- mov rcx,rbx
- jmp $L$ecb_loop
- ALIGN 16
- $L$ecb_break::
- cmp rsp,rbp
- je $L$ecb_done
- pxor xmm0,xmm0
- lea rax,QWORD PTR[rsp]
- $L$ecb_bzero::
- movaps XMMWORD PTR[rax],xmm0
- lea rax,QWORD PTR[16+rax]
- cmp rbp,rax
- ja $L$ecb_bzero
- $L$ecb_done::
- lea rsp,QWORD PTR[rbp]
- jmp $L$ecb_exit
- ALIGN 16
- $L$ecb_aligned::
- lea rbp,QWORD PTR[rcx*1+rsi]
- neg rbp
- and rbp,0fffh
- xor eax,eax
- cmp rbp,128
- mov rbp,128-1
- cmovae rbp,rax
- and rbp,rcx
- sub rcx,rbp
- jz $L$ecb_aligned_tail
- lea rax,QWORD PTR[((-16))+rdx]
- lea rbx,QWORD PTR[16+rdx]
- shr rcx,4
- DB 0f3h,00fh,0a7h,200
- test rbp,rbp
- jz $L$ecb_exit
- $L$ecb_aligned_tail::
- mov r8,rdi
- mov rbx,rbp
- mov rcx,rbp
- lea rbp,QWORD PTR[rsp]
- sub rsp,rcx
- shr rcx,3
- lea rdi,QWORD PTR[rsp]
- DB 0f3h,048h,0a5h
- lea rdi,QWORD PTR[r8]
- lea rsi,QWORD PTR[rsp]
- mov rcx,rbx
- jmp $L$ecb_loop
- $L$ecb_exit::
- mov eax,1
- lea rsp,QWORD PTR[8+rsp]
- $L$ecb_abort::
- pop rbx
- pop rbp
- mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
- mov rsi,QWORD PTR[16+rsp]
- DB 0F3h,0C3h ;repret
- $L$SEH_end_padlock_ecb_encrypt::
- padlock_ecb_encrypt ENDP
- PUBLIC padlock_cbc_encrypt
- ALIGN 16
- padlock_cbc_encrypt PROC PUBLIC
- mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
- mov QWORD PTR[16+rsp],rsi
- mov rax,rsp
- $L$SEH_begin_padlock_cbc_encrypt::
- mov rdi,rcx
- mov rsi,rdx
- mov rdx,r8
- mov rcx,r9
- push rbp
- push rbx
- xor eax,eax
- test rdx,15
- jnz $L$cbc_abort
- test rcx,15
- jnz $L$cbc_abort
- lea rax,QWORD PTR[$L$padlock_saved_context]
- pushf
- cld
- call _padlock_verify_ctx
- lea rdx,QWORD PTR[16+rdx]
- xor eax,eax
- xor ebx,ebx
- test DWORD PTR[rdx],32
- jnz $L$cbc_aligned
- test rdi,00fh
- setz al
- test rsi,00fh
- setz bl
- test eax,ebx
- jnz $L$cbc_aligned
- neg rax
- mov rbx,512
- not rax
- lea rbp,QWORD PTR[rsp]
- cmp rcx,rbx
- cmovc rbx,rcx
- and rax,rbx
- mov rbx,rcx
- neg rax
- and rbx,512-1
- lea rsp,QWORD PTR[rbp*1+rax]
- mov rax,512
- cmovz rbx,rax
- cmp rcx,rbx
- ja $L$cbc_loop
- mov rax,rsi
- cmp rbp,rsp
- cmove rax,rdi
- add rax,rcx
- neg rax
- and rax,0fffh
- cmp rax,64
- mov rax,-64
- cmovae rax,rbx
- and rbx,rax
- jz $L$cbc_unaligned_tail
- jmp $L$cbc_loop
- ALIGN 16
- $L$cbc_loop::
- cmp rbx,rcx
- cmova rbx,rcx
- mov r8,rdi
- mov r9,rsi
- mov r10,rcx
- mov rcx,rbx
- mov r11,rbx
- test rdi,00fh
- cmovnz rdi,rsp
- test rsi,00fh
- jz $L$cbc_inp_aligned
- shr rcx,3
- DB 0f3h,048h,0a5h
- sub rdi,rbx
- mov rcx,rbx
- mov rsi,rdi
- $L$cbc_inp_aligned::
- lea rax,QWORD PTR[((-16))+rdx]
- lea rbx,QWORD PTR[16+rdx]
- shr rcx,4
- DB 0f3h,00fh,0a7h,208
- movdqa xmm0,XMMWORD PTR[rax]
- movdqa XMMWORD PTR[(-16)+rdx],xmm0
- mov rdi,r8
- mov rbx,r11
- test rdi,00fh
- jz $L$cbc_out_aligned
- mov rcx,rbx
- lea rsi,QWORD PTR[rsp]
- shr rcx,3
- DB 0f3h,048h,0a5h
- sub rdi,rbx
- $L$cbc_out_aligned::
- mov rsi,r9
- mov rcx,r10
- add rdi,rbx
- add rsi,rbx
- sub rcx,rbx
- mov rbx,512
- jz $L$cbc_break
- cmp rcx,rbx
- jae $L$cbc_loop
- $L$cbc_unaligned_tail::
- xor eax,eax
- cmp rbp,rsp
- cmove rax,rcx
- mov r8,rdi
- mov rbx,rcx
- sub rsp,rax
- shr rcx,3
- lea rdi,QWORD PTR[rsp]
- DB 0f3h,048h,0a5h
- mov rsi,rsp
- mov rdi,r8
- mov rcx,rbx
- jmp $L$cbc_loop
- ALIGN 16
- $L$cbc_break::
- cmp rsp,rbp
- je $L$cbc_done
- pxor xmm0,xmm0
- lea rax,QWORD PTR[rsp]
- $L$cbc_bzero::
- movaps XMMWORD PTR[rax],xmm0
- lea rax,QWORD PTR[16+rax]
- cmp rbp,rax
- ja $L$cbc_bzero
- $L$cbc_done::
- lea rsp,QWORD PTR[rbp]
- jmp $L$cbc_exit
- ALIGN 16
- $L$cbc_aligned::
- lea rbp,QWORD PTR[rcx*1+rsi]
- neg rbp
- and rbp,0fffh
- xor eax,eax
- cmp rbp,64
- mov rbp,64-1
- cmovae rbp,rax
- and rbp,rcx
- sub rcx,rbp
- jz $L$cbc_aligned_tail
- lea rax,QWORD PTR[((-16))+rdx]
- lea rbx,QWORD PTR[16+rdx]
- shr rcx,4
- DB 0f3h,00fh,0a7h,208
- movdqa xmm0,XMMWORD PTR[rax]
- movdqa XMMWORD PTR[(-16)+rdx],xmm0
- test rbp,rbp
- jz $L$cbc_exit
- $L$cbc_aligned_tail::
- mov r8,rdi
- mov rbx,rbp
- mov rcx,rbp
- lea rbp,QWORD PTR[rsp]
- sub rsp,rcx
- shr rcx,3
- lea rdi,QWORD PTR[rsp]
- DB 0f3h,048h,0a5h
- lea rdi,QWORD PTR[r8]
- lea rsi,QWORD PTR[rsp]
- mov rcx,rbx
- jmp $L$cbc_loop
- $L$cbc_exit::
- mov eax,1
- lea rsp,QWORD PTR[8+rsp]
- $L$cbc_abort::
- pop rbx
- pop rbp
- mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
- mov rsi,QWORD PTR[16+rsp]
- DB 0F3h,0C3h ;repret
- $L$SEH_end_padlock_cbc_encrypt::
- padlock_cbc_encrypt ENDP
- PUBLIC padlock_cfb_encrypt
- ALIGN 16
- padlock_cfb_encrypt PROC PUBLIC
- mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
- mov QWORD PTR[16+rsp],rsi
- mov rax,rsp
- $L$SEH_begin_padlock_cfb_encrypt::
- mov rdi,rcx
- mov rsi,rdx
- mov rdx,r8
- mov rcx,r9
- push rbp
- push rbx
- xor eax,eax
- test rdx,15
- jnz $L$cfb_abort
- test rcx,15
- jnz $L$cfb_abort
- lea rax,QWORD PTR[$L$padlock_saved_context]
- pushf
- cld
- call _padlock_verify_ctx
- lea rdx,QWORD PTR[16+rdx]
- xor eax,eax
- xor ebx,ebx
- test DWORD PTR[rdx],32
- jnz $L$cfb_aligned
- test rdi,00fh
- setz al
- test rsi,00fh
- setz bl
- test eax,ebx
- jnz $L$cfb_aligned
- neg rax
- mov rbx,512
- not rax
- lea rbp,QWORD PTR[rsp]
- cmp rcx,rbx
- cmovc rbx,rcx
- and rax,rbx
- mov rbx,rcx
- neg rax
- and rbx,512-1
- lea rsp,QWORD PTR[rbp*1+rax]
- mov rax,512
- cmovz rbx,rax
- jmp $L$cfb_loop
- ALIGN 16
- $L$cfb_loop::
- cmp rbx,rcx
- cmova rbx,rcx
- mov r8,rdi
- mov r9,rsi
- mov r10,rcx
- mov rcx,rbx
- mov r11,rbx
- test rdi,00fh
- cmovnz rdi,rsp
- test rsi,00fh
- jz $L$cfb_inp_aligned
- shr rcx,3
- DB 0f3h,048h,0a5h
- sub rdi,rbx
- mov rcx,rbx
- mov rsi,rdi
- $L$cfb_inp_aligned::
- lea rax,QWORD PTR[((-16))+rdx]
- lea rbx,QWORD PTR[16+rdx]
- shr rcx,4
- DB 0f3h,00fh,0a7h,224
- movdqa xmm0,XMMWORD PTR[rax]
- movdqa XMMWORD PTR[(-16)+rdx],xmm0
- mov rdi,r8
- mov rbx,r11
- test rdi,00fh
- jz $L$cfb_out_aligned
- mov rcx,rbx
- lea rsi,QWORD PTR[rsp]
- shr rcx,3
- DB 0f3h,048h,0a5h
- sub rdi,rbx
- $L$cfb_out_aligned::
- mov rsi,r9
- mov rcx,r10
- add rdi,rbx
- add rsi,rbx
- sub rcx,rbx
- mov rbx,512
- jnz $L$cfb_loop
- cmp rsp,rbp
- je $L$cfb_done
- pxor xmm0,xmm0
- lea rax,QWORD PTR[rsp]
- $L$cfb_bzero::
- movaps XMMWORD PTR[rax],xmm0
- lea rax,QWORD PTR[16+rax]
- cmp rbp,rax
- ja $L$cfb_bzero
- $L$cfb_done::
- lea rsp,QWORD PTR[rbp]
- jmp $L$cfb_exit
- ALIGN 16
- $L$cfb_aligned::
- lea rax,QWORD PTR[((-16))+rdx]
- lea rbx,QWORD PTR[16+rdx]
- shr rcx,4
- DB 0f3h,00fh,0a7h,224
- movdqa xmm0,XMMWORD PTR[rax]
- movdqa XMMWORD PTR[(-16)+rdx],xmm0
- $L$cfb_exit::
- mov eax,1
- lea rsp,QWORD PTR[8+rsp]
- $L$cfb_abort::
- pop rbx
- pop rbp
- mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
- mov rsi,QWORD PTR[16+rsp]
- DB 0F3h,0C3h ;repret
- $L$SEH_end_padlock_cfb_encrypt::
- padlock_cfb_encrypt ENDP
- PUBLIC padlock_ofb_encrypt
- ALIGN 16
- padlock_ofb_encrypt PROC PUBLIC
- mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
- mov QWORD PTR[16+rsp],rsi
- mov rax,rsp
- $L$SEH_begin_padlock_ofb_encrypt::
- mov rdi,rcx
- mov rsi,rdx
- mov rdx,r8
- mov rcx,r9
- push rbp
- push rbx
- xor eax,eax
- test rdx,15
- jnz $L$ofb_abort
- test rcx,15
- jnz $L$ofb_abort
- lea rax,QWORD PTR[$L$padlock_saved_context]
- pushf
- cld
- call _padlock_verify_ctx
- lea rdx,QWORD PTR[16+rdx]
- xor eax,eax
- xor ebx,ebx
- test DWORD PTR[rdx],32
- jnz $L$ofb_aligned
- test rdi,00fh
- setz al
- test rsi,00fh
- setz bl
- test eax,ebx
- jnz $L$ofb_aligned
- neg rax
- mov rbx,512
- not rax
- lea rbp,QWORD PTR[rsp]
- cmp rcx,rbx
- cmovc rbx,rcx
- and rax,rbx
- mov rbx,rcx
- neg rax
- and rbx,512-1
- lea rsp,QWORD PTR[rbp*1+rax]
- mov rax,512
- cmovz rbx,rax
- jmp $L$ofb_loop
- ALIGN 16
- $L$ofb_loop::
- cmp rbx,rcx
- cmova rbx,rcx
- mov r8,rdi
- mov r9,rsi
- mov r10,rcx
- mov rcx,rbx
- mov r11,rbx
- test rdi,00fh
- cmovnz rdi,rsp
- test rsi,00fh
- jz $L$ofb_inp_aligned
- shr rcx,3
- DB 0f3h,048h,0a5h
- sub rdi,rbx
- mov rcx,rbx
- mov rsi,rdi
- $L$ofb_inp_aligned::
- lea rax,QWORD PTR[((-16))+rdx]
- lea rbx,QWORD PTR[16+rdx]
- shr rcx,4
- DB 0f3h,00fh,0a7h,232
- movdqa xmm0,XMMWORD PTR[rax]
- movdqa XMMWORD PTR[(-16)+rdx],xmm0
- mov rdi,r8
- mov rbx,r11
- test rdi,00fh
- jz $L$ofb_out_aligned
- mov rcx,rbx
- lea rsi,QWORD PTR[rsp]
- shr rcx,3
- DB 0f3h,048h,0a5h
- sub rdi,rbx
- $L$ofb_out_aligned::
- mov rsi,r9
- mov rcx,r10
- add rdi,rbx
- add rsi,rbx
- sub rcx,rbx
- mov rbx,512
- jnz $L$ofb_loop
- cmp rsp,rbp
- je $L$ofb_done
- pxor xmm0,xmm0
- lea rax,QWORD PTR[rsp]
- $L$ofb_bzero::
- movaps XMMWORD PTR[rax],xmm0
- lea rax,QWORD PTR[16+rax]
- cmp rbp,rax
- ja $L$ofb_bzero
- $L$ofb_done::
- lea rsp,QWORD PTR[rbp]
- jmp $L$ofb_exit
- ALIGN 16
- $L$ofb_aligned::
- lea rax,QWORD PTR[((-16))+rdx]
- lea rbx,QWORD PTR[16+rdx]
- shr rcx,4
- DB 0f3h,00fh,0a7h,232
- movdqa xmm0,XMMWORD PTR[rax]
- movdqa XMMWORD PTR[(-16)+rdx],xmm0
- $L$ofb_exit::
- mov eax,1
- lea rsp,QWORD PTR[8+rsp]
- $L$ofb_abort::
- pop rbx
- pop rbp
- mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
- mov rsi,QWORD PTR[16+rsp]
- DB 0F3h,0C3h ;repret
- $L$SEH_end_padlock_ofb_encrypt::
- padlock_ofb_encrypt ENDP
- PUBLIC padlock_ctr32_encrypt
- ALIGN 16
- padlock_ctr32_encrypt PROC PUBLIC
- mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
- mov QWORD PTR[16+rsp],rsi
- mov rax,rsp
- $L$SEH_begin_padlock_ctr32_encrypt::
- mov rdi,rcx
- mov rsi,rdx
- mov rdx,r8
- mov rcx,r9
- push rbp
- push rbx
- xor eax,eax
- test rdx,15
- jnz $L$ctr32_abort
- test rcx,15
- jnz $L$ctr32_abort
- lea rax,QWORD PTR[$L$padlock_saved_context]
- pushf
- cld
- call _padlock_verify_ctx
- lea rdx,QWORD PTR[16+rdx]
- xor eax,eax
- xor ebx,ebx
- test DWORD PTR[rdx],32
- jnz $L$ctr32_aligned
- test rdi,00fh
- setz al
- test rsi,00fh
- setz bl
- test eax,ebx
- jnz $L$ctr32_aligned
- neg rax
- mov rbx,512
- not rax
- lea rbp,QWORD PTR[rsp]
- cmp rcx,rbx
- cmovc rbx,rcx
- and rax,rbx
- mov rbx,rcx
- neg rax
- and rbx,512-1
- lea rsp,QWORD PTR[rbp*1+rax]
- mov rax,512
- cmovz rbx,rax
- $L$ctr32_reenter::
- mov eax,DWORD PTR[((-4))+rdx]
- bswap eax
- neg eax
- and eax,31
- mov rbx,512
- shl eax,4
- cmovz rax,rbx
- cmp rcx,rax
- cmova rbx,rax
- cmovbe rbx,rcx
- cmp rcx,rbx
- ja $L$ctr32_loop
- mov rax,rsi
- cmp rbp,rsp
- cmove rax,rdi
- add rax,rcx
- neg rax
- and rax,0fffh
- cmp rax,32
- mov rax,-32
- cmovae rax,rbx
- and rbx,rax
- jz $L$ctr32_unaligned_tail
- jmp $L$ctr32_loop
- ALIGN 16
- $L$ctr32_loop::
- cmp rbx,rcx
- cmova rbx,rcx
- mov r8,rdi
- mov r9,rsi
- mov r10,rcx
- mov rcx,rbx
- mov r11,rbx
- test rdi,00fh
- cmovnz rdi,rsp
- test rsi,00fh
- jz $L$ctr32_inp_aligned
- shr rcx,3
- DB 0f3h,048h,0a5h
- sub rdi,rbx
- mov rcx,rbx
- mov rsi,rdi
- $L$ctr32_inp_aligned::
- lea rax,QWORD PTR[((-16))+rdx]
- lea rbx,QWORD PTR[16+rdx]
- shr rcx,4
- DB 0f3h,00fh,0a7h,216
- mov eax,DWORD PTR[((-4))+rdx]
- test eax,0ffff0000h
- jnz $L$ctr32_no_carry
- bswap eax
- add eax,010000h
- bswap eax
- mov DWORD PTR[((-4))+rdx],eax
- $L$ctr32_no_carry::
- mov rdi,r8
- mov rbx,r11
- test rdi,00fh
- jz $L$ctr32_out_aligned
- mov rcx,rbx
- lea rsi,QWORD PTR[rsp]
- shr rcx,3
- DB 0f3h,048h,0a5h
- sub rdi,rbx
- $L$ctr32_out_aligned::
- mov rsi,r9
- mov rcx,r10
- add rdi,rbx
- add rsi,rbx
- sub rcx,rbx
- mov rbx,512
- jz $L$ctr32_break
- cmp rcx,rbx
- jae $L$ctr32_loop
- mov rbx,rcx
- mov rax,rsi
- cmp rbp,rsp
- cmove rax,rdi
- add rax,rcx
- neg rax
- and rax,0fffh
- cmp rax,32
- mov rax,-32
- cmovae rax,rbx
- and rbx,rax
- jnz $L$ctr32_loop
- $L$ctr32_unaligned_tail::
- xor eax,eax
- cmp rbp,rsp
- cmove rax,rcx
- mov r8,rdi
- mov rbx,rcx
- sub rsp,rax
- shr rcx,3
- lea rdi,QWORD PTR[rsp]
- DB 0f3h,048h,0a5h
- mov rsi,rsp
- mov rdi,r8
- mov rcx,rbx
- jmp $L$ctr32_loop
- ALIGN 16
- $L$ctr32_break::
- cmp rsp,rbp
- je $L$ctr32_done
- pxor xmm0,xmm0
- lea rax,QWORD PTR[rsp]
- $L$ctr32_bzero::
- movaps XMMWORD PTR[rax],xmm0
- lea rax,QWORD PTR[16+rax]
- cmp rbp,rax
- ja $L$ctr32_bzero
- $L$ctr32_done::
- lea rsp,QWORD PTR[rbp]
- jmp $L$ctr32_exit
- ALIGN 16
- $L$ctr32_aligned::
- mov eax,DWORD PTR[((-4))+rdx]
- bswap eax
- neg eax
- and eax,0ffffh
- mov rbx,1048576
- shl eax,4
- cmovz rax,rbx
- cmp rcx,rax
- cmova rbx,rax
- cmovbe rbx,rcx
- jbe $L$ctr32_aligned_skip
- $L$ctr32_aligned_loop::
- mov r10,rcx
- mov rcx,rbx
- mov r11,rbx
- lea rax,QWORD PTR[((-16))+rdx]
- lea rbx,QWORD PTR[16+rdx]
- shr rcx,4
- DB 0f3h,00fh,0a7h,216
- mov eax,DWORD PTR[((-4))+rdx]
- bswap eax
- add eax,010000h
- bswap eax
- mov DWORD PTR[((-4))+rdx],eax
- mov rcx,r10
- sub rcx,r11
- mov rbx,1048576
- jz $L$ctr32_exit
- cmp rcx,rbx
- jae $L$ctr32_aligned_loop
- $L$ctr32_aligned_skip::
- lea rbp,QWORD PTR[rcx*1+rsi]
- neg rbp
- and rbp,0fffh
- xor eax,eax
- cmp rbp,32
- mov rbp,32-1
- cmovae rbp,rax
- and rbp,rcx
- sub rcx,rbp
- jz $L$ctr32_aligned_tail
- lea rax,QWORD PTR[((-16))+rdx]
- lea rbx,QWORD PTR[16+rdx]
- shr rcx,4
- DB 0f3h,00fh,0a7h,216
- test rbp,rbp
- jz $L$ctr32_exit
- $L$ctr32_aligned_tail::
- mov r8,rdi
- mov rbx,rbp
- mov rcx,rbp
- lea rbp,QWORD PTR[rsp]
- sub rsp,rcx
- shr rcx,3
- lea rdi,QWORD PTR[rsp]
- DB 0f3h,048h,0a5h
- lea rdi,QWORD PTR[r8]
- lea rsi,QWORD PTR[rsp]
- mov rcx,rbx
- jmp $L$ctr32_loop
- $L$ctr32_exit::
- mov eax,1
- lea rsp,QWORD PTR[8+rsp]
- $L$ctr32_abort::
- pop rbx
- pop rbp
- mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
- mov rsi,QWORD PTR[16+rsp]
- DB 0F3h,0C3h ;repret
- $L$SEH_end_padlock_ctr32_encrypt::
- padlock_ctr32_encrypt ENDP
- DB 86,73,65,32,80,97,100,108,111,99,107,32,120,56,54,95
- DB 54,52,32,109,111,100,117,108,101,44,32,67,82,89,80,84
- DB 79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64
- DB 111,112,101,110,115,115,108,46,111,114,103,62,0
- ALIGN 16
- .text$ ENDS
- _DATA SEGMENT
- ALIGN 8
- $L$padlock_saved_context::
- DQ 0
- _DATA ENDS
- END
|