1025 lines
17 KiB
NASM
1025 lines
17 KiB
NASM
|
%ifidn __OUTPUT_FORMAT__,obj
|
||
|
section code use32 class=code align=64
|
||
|
%elifidn __OUTPUT_FORMAT__,win32
|
||
|
$@feat.00 equ 1
|
||
|
section .text code align=64
|
||
|
%else
|
||
|
section .text code
|
||
|
%endif
|
||
|
global _padlock_capability
|
||
|
align 16
|
||
|
_padlock_capability:
|
||
|
L$_padlock_capability_begin:
|
||
|
push ebx
|
||
|
pushfd
|
||
|
pop eax
|
||
|
mov ecx,eax
|
||
|
xor eax,2097152
|
||
|
push eax
|
||
|
popfd
|
||
|
pushfd
|
||
|
pop eax
|
||
|
xor ecx,eax
|
||
|
xor eax,eax
|
||
|
bt ecx,21
|
||
|
jnc NEAR L$000noluck
|
||
|
cpuid
|
||
|
xor eax,eax
|
||
|
cmp ebx,0x746e6543
|
||
|
jne NEAR L$001zhaoxin
|
||
|
cmp edx,0x48727561
|
||
|
jne NEAR L$000noluck
|
||
|
cmp ecx,0x736c7561
|
||
|
jne NEAR L$000noluck
|
||
|
jmp NEAR L$002zhaoxinEnd
|
||
|
L$001zhaoxin:
|
||
|
cmp ebx,0x68532020
|
||
|
jne NEAR L$000noluck
|
||
|
cmp edx,0x68676e61
|
||
|
jne NEAR L$000noluck
|
||
|
cmp ecx,0x20206961
|
||
|
jne NEAR L$000noluck
|
||
|
L$002zhaoxinEnd:
|
||
|
mov eax,3221225472
|
||
|
cpuid
|
||
|
mov edx,eax
|
||
|
xor eax,eax
|
||
|
cmp edx,3221225473
|
||
|
jb NEAR L$000noluck
|
||
|
mov eax,1
|
||
|
cpuid
|
||
|
or eax,15
|
||
|
xor ebx,ebx
|
||
|
and eax,4095
|
||
|
cmp eax,1791
|
||
|
sete bl
|
||
|
mov eax,3221225473
|
||
|
push ebx
|
||
|
cpuid
|
||
|
pop ebx
|
||
|
mov eax,edx
|
||
|
shl ebx,4
|
||
|
and eax,4294967279
|
||
|
or eax,ebx
|
||
|
L$000noluck:
|
||
|
pop ebx
|
||
|
ret
|
||
|
global _padlock_key_bswap
|
||
|
align 16
|
||
|
_padlock_key_bswap:
|
||
|
L$_padlock_key_bswap_begin:
|
||
|
mov edx,DWORD [4+esp]
|
||
|
mov ecx,DWORD [240+edx]
|
||
|
inc ecx
|
||
|
shl ecx,2
|
||
|
L$003bswap_loop:
|
||
|
mov eax,DWORD [edx]
|
||
|
bswap eax
|
||
|
mov DWORD [edx],eax
|
||
|
lea edx,[4+edx]
|
||
|
sub ecx,1
|
||
|
jnz NEAR L$003bswap_loop
|
||
|
ret
|
||
|
global _padlock_verify_context
|
||
|
align 16
|
||
|
_padlock_verify_context:
|
||
|
L$_padlock_verify_context_begin:
|
||
|
mov edx,DWORD [4+esp]
|
||
|
lea eax,[L$padlock_saved_context]
|
||
|
pushfd
|
||
|
call __padlock_verify_ctx
|
||
|
L$004verify_pic_point:
|
||
|
lea esp,[4+esp]
|
||
|
ret
|
||
|
align 16
|
||
|
__padlock_verify_ctx:
|
||
|
bt DWORD [4+esp],30
|
||
|
jnc NEAR L$005verified
|
||
|
cmp edx,DWORD [eax]
|
||
|
je NEAR L$005verified
|
||
|
pushfd
|
||
|
popfd
|
||
|
L$005verified:
|
||
|
mov DWORD [eax],edx
|
||
|
ret
|
||
|
global _padlock_reload_key
|
||
|
align 16
|
||
|
_padlock_reload_key:
|
||
|
L$_padlock_reload_key_begin:
|
||
|
pushfd
|
||
|
popfd
|
||
|
ret
|
||
|
global _padlock_aes_block
|
||
|
align 16
|
||
|
_padlock_aes_block:
|
||
|
L$_padlock_aes_block_begin:
|
||
|
push edi
|
||
|
push esi
|
||
|
push ebx
|
||
|
mov edi,DWORD [16+esp]
|
||
|
mov esi,DWORD [20+esp]
|
||
|
mov edx,DWORD [24+esp]
|
||
|
mov ecx,1
|
||
|
lea ebx,[32+edx]
|
||
|
lea edx,[16+edx]
|
||
|
db 243,15,167,200
|
||
|
pop ebx
|
||
|
pop esi
|
||
|
pop edi
|
||
|
ret
|
||
|
global _padlock_ecb_encrypt
|
||
|
align 16
|
||
|
_padlock_ecb_encrypt:
|
||
|
L$_padlock_ecb_encrypt_begin:
|
||
|
push ebp
|
||
|
push ebx
|
||
|
push esi
|
||
|
push edi
|
||
|
mov edi,DWORD [20+esp]
|
||
|
mov esi,DWORD [24+esp]
|
||
|
mov edx,DWORD [28+esp]
|
||
|
mov ecx,DWORD [32+esp]
|
||
|
test edx,15
|
||
|
jnz NEAR L$006ecb_abort
|
||
|
test ecx,15
|
||
|
jnz NEAR L$006ecb_abort
|
||
|
lea eax,[L$padlock_saved_context]
|
||
|
pushfd
|
||
|
cld
|
||
|
call __padlock_verify_ctx
|
||
|
L$007ecb_pic_point:
|
||
|
lea edx,[16+edx]
|
||
|
xor eax,eax
|
||
|
xor ebx,ebx
|
||
|
test DWORD [edx],32
|
||
|
jnz NEAR L$008ecb_aligned
|
||
|
test edi,15
|
||
|
setz al
|
||
|
test esi,15
|
||
|
setz bl
|
||
|
test eax,ebx
|
||
|
jnz NEAR L$008ecb_aligned
|
||
|
neg eax
|
||
|
mov ebx,512
|
||
|
not eax
|
||
|
lea ebp,[esp-24]
|
||
|
cmp ecx,ebx
|
||
|
cmovc ebx,ecx
|
||
|
and eax,ebx
|
||
|
mov ebx,ecx
|
||
|
neg eax
|
||
|
and ebx,511
|
||
|
lea esp,[ebp*1+eax]
|
||
|
mov eax,512
|
||
|
cmovz ebx,eax
|
||
|
mov eax,ebp
|
||
|
and ebp,-16
|
||
|
and esp,-16
|
||
|
mov DWORD [16+ebp],eax
|
||
|
cmp ecx,ebx
|
||
|
ja NEAR L$009ecb_loop
|
||
|
mov eax,esi
|
||
|
cmp ebp,esp
|
||
|
cmove eax,edi
|
||
|
add eax,ecx
|
||
|
neg eax
|
||
|
and eax,4095
|
||
|
cmp eax,128
|
||
|
mov eax,-128
|
||
|
cmovae eax,ebx
|
||
|
and ebx,eax
|
||
|
jz NEAR L$010ecb_unaligned_tail
|
||
|
jmp NEAR L$009ecb_loop
|
||
|
align 16
|
||
|
L$009ecb_loop:
|
||
|
mov DWORD [ebp],edi
|
||
|
mov DWORD [4+ebp],esi
|
||
|
mov DWORD [8+ebp],ecx
|
||
|
mov ecx,ebx
|
||
|
mov DWORD [12+ebp],ebx
|
||
|
test edi,15
|
||
|
cmovnz edi,esp
|
||
|
test esi,15
|
||
|
jz NEAR L$011ecb_inp_aligned
|
||
|
shr ecx,2
|
||
|
db 243,165
|
||
|
sub edi,ebx
|
||
|
mov ecx,ebx
|
||
|
mov esi,edi
|
||
|
L$011ecb_inp_aligned:
|
||
|
lea eax,[edx-16]
|
||
|
lea ebx,[16+edx]
|
||
|
shr ecx,4
|
||
|
db 243,15,167,200
|
||
|
mov edi,DWORD [ebp]
|
||
|
mov ebx,DWORD [12+ebp]
|
||
|
test edi,15
|
||
|
jz NEAR L$012ecb_out_aligned
|
||
|
mov ecx,ebx
|
||
|
lea esi,[esp]
|
||
|
shr ecx,2
|
||
|
db 243,165
|
||
|
sub edi,ebx
|
||
|
L$012ecb_out_aligned:
|
||
|
mov esi,DWORD [4+ebp]
|
||
|
mov ecx,DWORD [8+ebp]
|
||
|
add edi,ebx
|
||
|
add esi,ebx
|
||
|
sub ecx,ebx
|
||
|
mov ebx,512
|
||
|
jz NEAR L$013ecb_break
|
||
|
cmp ecx,ebx
|
||
|
jae NEAR L$009ecb_loop
|
||
|
L$010ecb_unaligned_tail:
|
||
|
xor eax,eax
|
||
|
cmp esp,ebp
|
||
|
cmove eax,ecx
|
||
|
sub esp,eax
|
||
|
mov eax,edi
|
||
|
mov ebx,ecx
|
||
|
shr ecx,2
|
||
|
lea edi,[esp]
|
||
|
db 243,165
|
||
|
mov esi,esp
|
||
|
mov edi,eax
|
||
|
mov ecx,ebx
|
||
|
jmp NEAR L$009ecb_loop
|
||
|
align 16
|
||
|
L$013ecb_break:
|
||
|
cmp esp,ebp
|
||
|
je NEAR L$014ecb_done
|
||
|
pxor xmm0,xmm0
|
||
|
lea eax,[esp]
|
||
|
L$015ecb_bzero:
|
||
|
movaps [eax],xmm0
|
||
|
lea eax,[16+eax]
|
||
|
cmp ebp,eax
|
||
|
ja NEAR L$015ecb_bzero
|
||
|
L$014ecb_done:
|
||
|
mov ebp,DWORD [16+ebp]
|
||
|
lea esp,[24+ebp]
|
||
|
jmp NEAR L$016ecb_exit
|
||
|
align 16
|
||
|
L$008ecb_aligned:
|
||
|
lea ebp,[ecx*1+esi]
|
||
|
neg ebp
|
||
|
and ebp,4095
|
||
|
xor eax,eax
|
||
|
cmp ebp,128
|
||
|
mov ebp,127
|
||
|
cmovae ebp,eax
|
||
|
and ebp,ecx
|
||
|
sub ecx,ebp
|
||
|
jz NEAR L$017ecb_aligned_tail
|
||
|
lea eax,[edx-16]
|
||
|
lea ebx,[16+edx]
|
||
|
shr ecx,4
|
||
|
db 243,15,167,200
|
||
|
test ebp,ebp
|
||
|
jz NEAR L$016ecb_exit
|
||
|
L$017ecb_aligned_tail:
|
||
|
mov ecx,ebp
|
||
|
lea ebp,[esp-24]
|
||
|
mov esp,ebp
|
||
|
mov eax,ebp
|
||
|
sub esp,ecx
|
||
|
and ebp,-16
|
||
|
and esp,-16
|
||
|
mov DWORD [16+ebp],eax
|
||
|
mov eax,edi
|
||
|
mov ebx,ecx
|
||
|
shr ecx,2
|
||
|
lea edi,[esp]
|
||
|
db 243,165
|
||
|
mov esi,esp
|
||
|
mov edi,eax
|
||
|
mov ecx,ebx
|
||
|
jmp NEAR L$009ecb_loop
|
||
|
L$016ecb_exit:
|
||
|
mov eax,1
|
||
|
lea esp,[4+esp]
|
||
|
L$006ecb_abort:
|
||
|
pop edi
|
||
|
pop esi
|
||
|
pop ebx
|
||
|
pop ebp
|
||
|
ret
|
||
|
global _padlock_cbc_encrypt
|
||
|
align 16
|
||
|
_padlock_cbc_encrypt:
|
||
|
L$_padlock_cbc_encrypt_begin:
|
||
|
push ebp
|
||
|
push ebx
|
||
|
push esi
|
||
|
push edi
|
||
|
mov edi,DWORD [20+esp]
|
||
|
mov esi,DWORD [24+esp]
|
||
|
mov edx,DWORD [28+esp]
|
||
|
mov ecx,DWORD [32+esp]
|
||
|
test edx,15
|
||
|
jnz NEAR L$018cbc_abort
|
||
|
test ecx,15
|
||
|
jnz NEAR L$018cbc_abort
|
||
|
lea eax,[L$padlock_saved_context]
|
||
|
pushfd
|
||
|
cld
|
||
|
call __padlock_verify_ctx
|
||
|
L$019cbc_pic_point:
|
||
|
lea edx,[16+edx]
|
||
|
xor eax,eax
|
||
|
xor ebx,ebx
|
||
|
test DWORD [edx],32
|
||
|
jnz NEAR L$020cbc_aligned
|
||
|
test edi,15
|
||
|
setz al
|
||
|
test esi,15
|
||
|
setz bl
|
||
|
test eax,ebx
|
||
|
jnz NEAR L$020cbc_aligned
|
||
|
neg eax
|
||
|
mov ebx,512
|
||
|
not eax
|
||
|
lea ebp,[esp-24]
|
||
|
cmp ecx,ebx
|
||
|
cmovc ebx,ecx
|
||
|
and eax,ebx
|
||
|
mov ebx,ecx
|
||
|
neg eax
|
||
|
and ebx,511
|
||
|
lea esp,[ebp*1+eax]
|
||
|
mov eax,512
|
||
|
cmovz ebx,eax
|
||
|
mov eax,ebp
|
||
|
and ebp,-16
|
||
|
and esp,-16
|
||
|
mov DWORD [16+ebp],eax
|
||
|
cmp ecx,ebx
|
||
|
ja NEAR L$021cbc_loop
|
||
|
mov eax,esi
|
||
|
cmp ebp,esp
|
||
|
cmove eax,edi
|
||
|
add eax,ecx
|
||
|
neg eax
|
||
|
and eax,4095
|
||
|
cmp eax,64
|
||
|
mov eax,-64
|
||
|
cmovae eax,ebx
|
||
|
and ebx,eax
|
||
|
jz NEAR L$022cbc_unaligned_tail
|
||
|
jmp NEAR L$021cbc_loop
|
||
|
align 16
|
||
|
L$021cbc_loop:
|
||
|
mov DWORD [ebp],edi
|
||
|
mov DWORD [4+ebp],esi
|
||
|
mov DWORD [8+ebp],ecx
|
||
|
mov ecx,ebx
|
||
|
mov DWORD [12+ebp],ebx
|
||
|
test edi,15
|
||
|
cmovnz edi,esp
|
||
|
test esi,15
|
||
|
jz NEAR L$023cbc_inp_aligned
|
||
|
shr ecx,2
|
||
|
db 243,165
|
||
|
sub edi,ebx
|
||
|
mov ecx,ebx
|
||
|
mov esi,edi
|
||
|
L$023cbc_inp_aligned:
|
||
|
lea eax,[edx-16]
|
||
|
lea ebx,[16+edx]
|
||
|
shr ecx,4
|
||
|
db 243,15,167,208
|
||
|
movaps xmm0,[eax]
|
||
|
movaps [edx-16],xmm0
|
||
|
mov edi,DWORD [ebp]
|
||
|
mov ebx,DWORD [12+ebp]
|
||
|
test edi,15
|
||
|
jz NEAR L$024cbc_out_aligned
|
||
|
mov ecx,ebx
|
||
|
lea esi,[esp]
|
||
|
shr ecx,2
|
||
|
db 243,165
|
||
|
sub edi,ebx
|
||
|
L$024cbc_out_aligned:
|
||
|
mov esi,DWORD [4+ebp]
|
||
|
mov ecx,DWORD [8+ebp]
|
||
|
add edi,ebx
|
||
|
add esi,ebx
|
||
|
sub ecx,ebx
|
||
|
mov ebx,512
|
||
|
jz NEAR L$025cbc_break
|
||
|
cmp ecx,ebx
|
||
|
jae NEAR L$021cbc_loop
|
||
|
L$022cbc_unaligned_tail:
|
||
|
xor eax,eax
|
||
|
cmp esp,ebp
|
||
|
cmove eax,ecx
|
||
|
sub esp,eax
|
||
|
mov eax,edi
|
||
|
mov ebx,ecx
|
||
|
shr ecx,2
|
||
|
lea edi,[esp]
|
||
|
db 243,165
|
||
|
mov esi,esp
|
||
|
mov edi,eax
|
||
|
mov ecx,ebx
|
||
|
jmp NEAR L$021cbc_loop
|
||
|
align 16
|
||
|
L$025cbc_break:
|
||
|
cmp esp,ebp
|
||
|
je NEAR L$026cbc_done
|
||
|
pxor xmm0,xmm0
|
||
|
lea eax,[esp]
|
||
|
L$027cbc_bzero:
|
||
|
movaps [eax],xmm0
|
||
|
lea eax,[16+eax]
|
||
|
cmp ebp,eax
|
||
|
ja NEAR L$027cbc_bzero
|
||
|
L$026cbc_done:
|
||
|
mov ebp,DWORD [16+ebp]
|
||
|
lea esp,[24+ebp]
|
||
|
jmp NEAR L$028cbc_exit
|
||
|
align 16
|
||
|
L$020cbc_aligned:
|
||
|
lea ebp,[ecx*1+esi]
|
||
|
neg ebp
|
||
|
and ebp,4095
|
||
|
xor eax,eax
|
||
|
cmp ebp,64
|
||
|
mov ebp,63
|
||
|
cmovae ebp,eax
|
||
|
and ebp,ecx
|
||
|
sub ecx,ebp
|
||
|
jz NEAR L$029cbc_aligned_tail
|
||
|
lea eax,[edx-16]
|
||
|
lea ebx,[16+edx]
|
||
|
shr ecx,4
|
||
|
db 243,15,167,208
|
||
|
movaps xmm0,[eax]
|
||
|
movaps [edx-16],xmm0
|
||
|
test ebp,ebp
|
||
|
jz NEAR L$028cbc_exit
|
||
|
L$029cbc_aligned_tail:
|
||
|
mov ecx,ebp
|
||
|
lea ebp,[esp-24]
|
||
|
mov esp,ebp
|
||
|
mov eax,ebp
|
||
|
sub esp,ecx
|
||
|
and ebp,-16
|
||
|
and esp,-16
|
||
|
mov DWORD [16+ebp],eax
|
||
|
mov eax,edi
|
||
|
mov ebx,ecx
|
||
|
shr ecx,2
|
||
|
lea edi,[esp]
|
||
|
db 243,165
|
||
|
mov esi,esp
|
||
|
mov edi,eax
|
||
|
mov ecx,ebx
|
||
|
jmp NEAR L$021cbc_loop
|
||
|
L$028cbc_exit:
|
||
|
mov eax,1
|
||
|
lea esp,[4+esp]
|
||
|
L$018cbc_abort:
|
||
|
pop edi
|
||
|
pop esi
|
||
|
pop ebx
|
||
|
pop ebp
|
||
|
ret
|
||
|
global _padlock_cfb_encrypt
|
||
|
align 16
|
||
|
_padlock_cfb_encrypt:
|
||
|
L$_padlock_cfb_encrypt_begin:
|
||
|
push ebp
|
||
|
push ebx
|
||
|
push esi
|
||
|
push edi
|
||
|
mov edi,DWORD [20+esp]
|
||
|
mov esi,DWORD [24+esp]
|
||
|
mov edx,DWORD [28+esp]
|
||
|
mov ecx,DWORD [32+esp]
|
||
|
test edx,15
|
||
|
jnz NEAR L$030cfb_abort
|
||
|
test ecx,15
|
||
|
jnz NEAR L$030cfb_abort
|
||
|
lea eax,[L$padlock_saved_context]
|
||
|
pushfd
|
||
|
cld
|
||
|
call __padlock_verify_ctx
|
||
|
L$031cfb_pic_point:
|
||
|
lea edx,[16+edx]
|
||
|
xor eax,eax
|
||
|
xor ebx,ebx
|
||
|
test DWORD [edx],32
|
||
|
jnz NEAR L$032cfb_aligned
|
||
|
test edi,15
|
||
|
setz al
|
||
|
test esi,15
|
||
|
setz bl
|
||
|
test eax,ebx
|
||
|
jnz NEAR L$032cfb_aligned
|
||
|
neg eax
|
||
|
mov ebx,512
|
||
|
not eax
|
||
|
lea ebp,[esp-24]
|
||
|
cmp ecx,ebx
|
||
|
cmovc ebx,ecx
|
||
|
and eax,ebx
|
||
|
mov ebx,ecx
|
||
|
neg eax
|
||
|
and ebx,511
|
||
|
lea esp,[ebp*1+eax]
|
||
|
mov eax,512
|
||
|
cmovz ebx,eax
|
||
|
mov eax,ebp
|
||
|
and ebp,-16
|
||
|
and esp,-16
|
||
|
mov DWORD [16+ebp],eax
|
||
|
jmp NEAR L$033cfb_loop
|
||
|
align 16
|
||
|
L$033cfb_loop:
|
||
|
mov DWORD [ebp],edi
|
||
|
mov DWORD [4+ebp],esi
|
||
|
mov DWORD [8+ebp],ecx
|
||
|
mov ecx,ebx
|
||
|
mov DWORD [12+ebp],ebx
|
||
|
test edi,15
|
||
|
cmovnz edi,esp
|
||
|
test esi,15
|
||
|
jz NEAR L$034cfb_inp_aligned
|
||
|
shr ecx,2
|
||
|
db 243,165
|
||
|
sub edi,ebx
|
||
|
mov ecx,ebx
|
||
|
mov esi,edi
|
||
|
L$034cfb_inp_aligned:
|
||
|
lea eax,[edx-16]
|
||
|
lea ebx,[16+edx]
|
||
|
shr ecx,4
|
||
|
db 243,15,167,224
|
||
|
movaps xmm0,[eax]
|
||
|
movaps [edx-16],xmm0
|
||
|
mov edi,DWORD [ebp]
|
||
|
mov ebx,DWORD [12+ebp]
|
||
|
test edi,15
|
||
|
jz NEAR L$035cfb_out_aligned
|
||
|
mov ecx,ebx
|
||
|
lea esi,[esp]
|
||
|
shr ecx,2
|
||
|
db 243,165
|
||
|
sub edi,ebx
|
||
|
L$035cfb_out_aligned:
|
||
|
mov esi,DWORD [4+ebp]
|
||
|
mov ecx,DWORD [8+ebp]
|
||
|
add edi,ebx
|
||
|
add esi,ebx
|
||
|
sub ecx,ebx
|
||
|
mov ebx,512
|
||
|
jnz NEAR L$033cfb_loop
|
||
|
cmp esp,ebp
|
||
|
je NEAR L$036cfb_done
|
||
|
pxor xmm0,xmm0
|
||
|
lea eax,[esp]
|
||
|
L$037cfb_bzero:
|
||
|
movaps [eax],xmm0
|
||
|
lea eax,[16+eax]
|
||
|
cmp ebp,eax
|
||
|
ja NEAR L$037cfb_bzero
|
||
|
L$036cfb_done:
|
||
|
mov ebp,DWORD [16+ebp]
|
||
|
lea esp,[24+ebp]
|
||
|
jmp NEAR L$038cfb_exit
|
||
|
align 16
|
||
|
L$032cfb_aligned:
|
||
|
lea eax,[edx-16]
|
||
|
lea ebx,[16+edx]
|
||
|
shr ecx,4
|
||
|
db 243,15,167,224
|
||
|
movaps xmm0,[eax]
|
||
|
movaps [edx-16],xmm0
|
||
|
L$038cfb_exit:
|
||
|
mov eax,1
|
||
|
lea esp,[4+esp]
|
||
|
L$030cfb_abort:
|
||
|
pop edi
|
||
|
pop esi
|
||
|
pop ebx
|
||
|
pop ebp
|
||
|
ret
|
||
|
global _padlock_ofb_encrypt
|
||
|
align 16
|
||
|
_padlock_ofb_encrypt:
|
||
|
L$_padlock_ofb_encrypt_begin:
|
||
|
push ebp
|
||
|
push ebx
|
||
|
push esi
|
||
|
push edi
|
||
|
mov edi,DWORD [20+esp]
|
||
|
mov esi,DWORD [24+esp]
|
||
|
mov edx,DWORD [28+esp]
|
||
|
mov ecx,DWORD [32+esp]
|
||
|
test edx,15
|
||
|
jnz NEAR L$039ofb_abort
|
||
|
test ecx,15
|
||
|
jnz NEAR L$039ofb_abort
|
||
|
lea eax,[L$padlock_saved_context]
|
||
|
pushfd
|
||
|
cld
|
||
|
call __padlock_verify_ctx
|
||
|
L$040ofb_pic_point:
|
||
|
lea edx,[16+edx]
|
||
|
xor eax,eax
|
||
|
xor ebx,ebx
|
||
|
test DWORD [edx],32
|
||
|
jnz NEAR L$041ofb_aligned
|
||
|
test edi,15
|
||
|
setz al
|
||
|
test esi,15
|
||
|
setz bl
|
||
|
test eax,ebx
|
||
|
jnz NEAR L$041ofb_aligned
|
||
|
neg eax
|
||
|
mov ebx,512
|
||
|
not eax
|
||
|
lea ebp,[esp-24]
|
||
|
cmp ecx,ebx
|
||
|
cmovc ebx,ecx
|
||
|
and eax,ebx
|
||
|
mov ebx,ecx
|
||
|
neg eax
|
||
|
and ebx,511
|
||
|
lea esp,[ebp*1+eax]
|
||
|
mov eax,512
|
||
|
cmovz ebx,eax
|
||
|
mov eax,ebp
|
||
|
and ebp,-16
|
||
|
and esp,-16
|
||
|
mov DWORD [16+ebp],eax
|
||
|
jmp NEAR L$042ofb_loop
|
||
|
align 16
|
||
|
L$042ofb_loop:
|
||
|
mov DWORD [ebp],edi
|
||
|
mov DWORD [4+ebp],esi
|
||
|
mov DWORD [8+ebp],ecx
|
||
|
mov ecx,ebx
|
||
|
mov DWORD [12+ebp],ebx
|
||
|
test edi,15
|
||
|
cmovnz edi,esp
|
||
|
test esi,15
|
||
|
jz NEAR L$043ofb_inp_aligned
|
||
|
shr ecx,2
|
||
|
db 243,165
|
||
|
sub edi,ebx
|
||
|
mov ecx,ebx
|
||
|
mov esi,edi
|
||
|
L$043ofb_inp_aligned:
|
||
|
lea eax,[edx-16]
|
||
|
lea ebx,[16+edx]
|
||
|
shr ecx,4
|
||
|
db 243,15,167,232
|
||
|
movaps xmm0,[eax]
|
||
|
movaps [edx-16],xmm0
|
||
|
mov edi,DWORD [ebp]
|
||
|
mov ebx,DWORD [12+ebp]
|
||
|
test edi,15
|
||
|
jz NEAR L$044ofb_out_aligned
|
||
|
mov ecx,ebx
|
||
|
lea esi,[esp]
|
||
|
shr ecx,2
|
||
|
db 243,165
|
||
|
sub edi,ebx
|
||
|
L$044ofb_out_aligned:
|
||
|
mov esi,DWORD [4+ebp]
|
||
|
mov ecx,DWORD [8+ebp]
|
||
|
add edi,ebx
|
||
|
add esi,ebx
|
||
|
sub ecx,ebx
|
||
|
mov ebx,512
|
||
|
jnz NEAR L$042ofb_loop
|
||
|
cmp esp,ebp
|
||
|
je NEAR L$045ofb_done
|
||
|
pxor xmm0,xmm0
|
||
|
lea eax,[esp]
|
||
|
L$046ofb_bzero:
|
||
|
movaps [eax],xmm0
|
||
|
lea eax,[16+eax]
|
||
|
cmp ebp,eax
|
||
|
ja NEAR L$046ofb_bzero
|
||
|
L$045ofb_done:
|
||
|
mov ebp,DWORD [16+ebp]
|
||
|
lea esp,[24+ebp]
|
||
|
jmp NEAR L$047ofb_exit
|
||
|
align 16
|
||
|
L$041ofb_aligned:
|
||
|
lea eax,[edx-16]
|
||
|
lea ebx,[16+edx]
|
||
|
shr ecx,4
|
||
|
db 243,15,167,232
|
||
|
movaps xmm0,[eax]
|
||
|
movaps [edx-16],xmm0
|
||
|
L$047ofb_exit:
|
||
|
mov eax,1
|
||
|
lea esp,[4+esp]
|
||
|
L$039ofb_abort:
|
||
|
pop edi
|
||
|
pop esi
|
||
|
pop ebx
|
||
|
pop ebp
|
||
|
ret
|
||
|
global _padlock_ctr32_encrypt
|
||
|
align 16
|
||
|
_padlock_ctr32_encrypt:
|
||
|
L$_padlock_ctr32_encrypt_begin:
|
||
|
push ebp
|
||
|
push ebx
|
||
|
push esi
|
||
|
push edi
|
||
|
mov edi,DWORD [20+esp]
|
||
|
mov esi,DWORD [24+esp]
|
||
|
mov edx,DWORD [28+esp]
|
||
|
mov ecx,DWORD [32+esp]
|
||
|
test edx,15
|
||
|
jnz NEAR L$048ctr32_abort
|
||
|
test ecx,15
|
||
|
jnz NEAR L$048ctr32_abort
|
||
|
lea eax,[L$padlock_saved_context]
|
||
|
pushfd
|
||
|
cld
|
||
|
call __padlock_verify_ctx
|
||
|
L$049ctr32_pic_point:
|
||
|
lea edx,[16+edx]
|
||
|
xor eax,eax
|
||
|
movq mm0,[edx-16]
|
||
|
mov ebx,512
|
||
|
not eax
|
||
|
lea ebp,[esp-24]
|
||
|
cmp ecx,ebx
|
||
|
cmovc ebx,ecx
|
||
|
and eax,ebx
|
||
|
mov ebx,ecx
|
||
|
neg eax
|
||
|
and ebx,511
|
||
|
lea esp,[ebp*1+eax]
|
||
|
mov eax,512
|
||
|
cmovz ebx,eax
|
||
|
mov eax,ebp
|
||
|
and ebp,-16
|
||
|
and esp,-16
|
||
|
mov DWORD [16+ebp],eax
|
||
|
jmp NEAR L$050ctr32_loop
|
||
|
align 16
|
||
|
L$050ctr32_loop:
|
||
|
mov DWORD [ebp],edi
|
||
|
mov DWORD [4+ebp],esi
|
||
|
mov DWORD [8+ebp],ecx
|
||
|
mov ecx,ebx
|
||
|
mov DWORD [12+ebp],ebx
|
||
|
mov ecx,DWORD [edx-4]
|
||
|
xor edi,edi
|
||
|
mov eax,DWORD [edx-8]
|
||
|
L$051ctr32_prepare:
|
||
|
mov DWORD [12+edi*1+esp],ecx
|
||
|
bswap ecx
|
||
|
movq [edi*1+esp],mm0
|
||
|
inc ecx
|
||
|
mov DWORD [8+edi*1+esp],eax
|
||
|
bswap ecx
|
||
|
lea edi,[16+edi]
|
||
|
cmp edi,ebx
|
||
|
jb NEAR L$051ctr32_prepare
|
||
|
mov DWORD [edx-4],ecx
|
||
|
lea esi,[esp]
|
||
|
lea edi,[esp]
|
||
|
mov ecx,ebx
|
||
|
lea eax,[edx-16]
|
||
|
lea ebx,[16+edx]
|
||
|
shr ecx,4
|
||
|
db 243,15,167,200
|
||
|
mov edi,DWORD [ebp]
|
||
|
mov ebx,DWORD [12+ebp]
|
||
|
mov esi,DWORD [4+ebp]
|
||
|
xor ecx,ecx
|
||
|
L$052ctr32_xor:
|
||
|
movups xmm1,[ecx*1+esi]
|
||
|
lea ecx,[16+ecx]
|
||
|
pxor xmm1,[ecx*1+esp-16]
|
||
|
movups [ecx*1+edi-16],xmm1
|
||
|
cmp ecx,ebx
|
||
|
jb NEAR L$052ctr32_xor
|
||
|
mov ecx,DWORD [8+ebp]
|
||
|
add edi,ebx
|
||
|
add esi,ebx
|
||
|
sub ecx,ebx
|
||
|
mov ebx,512
|
||
|
jnz NEAR L$050ctr32_loop
|
||
|
pxor xmm0,xmm0
|
||
|
lea eax,[esp]
|
||
|
L$053ctr32_bzero:
|
||
|
movaps [eax],xmm0
|
||
|
lea eax,[16+eax]
|
||
|
cmp ebp,eax
|
||
|
ja NEAR L$053ctr32_bzero
|
||
|
L$054ctr32_done:
|
||
|
mov ebp,DWORD [16+ebp]
|
||
|
lea esp,[24+ebp]
|
||
|
mov eax,1
|
||
|
lea esp,[4+esp]
|
||
|
emms
|
||
|
L$048ctr32_abort:
|
||
|
pop edi
|
||
|
pop esi
|
||
|
pop ebx
|
||
|
pop ebp
|
||
|
ret
|
||
|
global _padlock_xstore
|
||
|
align 16
|
||
|
_padlock_xstore:
|
||
|
L$_padlock_xstore_begin:
|
||
|
push edi
|
||
|
mov edi,DWORD [8+esp]
|
||
|
mov edx,DWORD [12+esp]
|
||
|
db 15,167,192
|
||
|
pop edi
|
||
|
ret
|
||
|
align 16
|
||
|
__win32_segv_handler:
|
||
|
mov eax,1
|
||
|
mov edx,DWORD [4+esp]
|
||
|
mov ecx,DWORD [12+esp]
|
||
|
cmp DWORD [edx],3221225477
|
||
|
jne NEAR L$055ret
|
||
|
add DWORD [184+ecx],4
|
||
|
mov eax,0
|
||
|
L$055ret:
|
||
|
ret
|
||
|
%if __NASM_VERSION_ID__ >= 0x02030000
|
||
|
safeseh __win32_segv_handler
|
||
|
%endif
|
||
|
global _padlock_sha1_oneshot
|
||
|
align 16
|
||
|
_padlock_sha1_oneshot:
|
||
|
L$_padlock_sha1_oneshot_begin:
|
||
|
push edi
|
||
|
push esi
|
||
|
xor eax,eax
|
||
|
mov edi,DWORD [12+esp]
|
||
|
mov esi,DWORD [16+esp]
|
||
|
mov ecx,DWORD [20+esp]
|
||
|
push __win32_segv_handler
|
||
|
db 100,255,48
|
||
|
db 100,137,32
|
||
|
mov edx,esp
|
||
|
add esp,-128
|
||
|
movups xmm0,[edi]
|
||
|
and esp,-16
|
||
|
mov eax,DWORD [16+edi]
|
||
|
movaps [esp],xmm0
|
||
|
mov edi,esp
|
||
|
mov DWORD [16+esp],eax
|
||
|
xor eax,eax
|
||
|
db 243,15,166,200
|
||
|
movaps xmm0,[esp]
|
||
|
mov eax,DWORD [16+esp]
|
||
|
mov esp,edx
|
||
|
db 100,143,5,0,0,0,0
|
||
|
lea esp,[4+esp]
|
||
|
mov edi,DWORD [16+esp]
|
||
|
movups [edi],xmm0
|
||
|
mov DWORD [16+edi],eax
|
||
|
pop esi
|
||
|
pop edi
|
||
|
ret
|
||
|
global _padlock_sha1_blocks
|
||
|
align 16
|
||
|
_padlock_sha1_blocks:
|
||
|
L$_padlock_sha1_blocks_begin:
|
||
|
push edi
|
||
|
push esi
|
||
|
mov edi,DWORD [12+esp]
|
||
|
mov esi,DWORD [16+esp]
|
||
|
mov edx,esp
|
||
|
mov ecx,DWORD [20+esp]
|
||
|
add esp,-128
|
||
|
movups xmm0,[edi]
|
||
|
and esp,-16
|
||
|
mov eax,DWORD [16+edi]
|
||
|
movaps [esp],xmm0
|
||
|
mov edi,esp
|
||
|
mov DWORD [16+esp],eax
|
||
|
mov eax,-1
|
||
|
db 243,15,166,200
|
||
|
movaps xmm0,[esp]
|
||
|
mov eax,DWORD [16+esp]
|
||
|
mov esp,edx
|
||
|
mov edi,DWORD [12+esp]
|
||
|
movups [edi],xmm0
|
||
|
mov DWORD [16+edi],eax
|
||
|
pop esi
|
||
|
pop edi
|
||
|
ret
|
||
|
global _padlock_sha256_oneshot
|
||
|
align 16
|
||
|
_padlock_sha256_oneshot:
|
||
|
L$_padlock_sha256_oneshot_begin:
|
||
|
push edi
|
||
|
push esi
|
||
|
xor eax,eax
|
||
|
mov edi,DWORD [12+esp]
|
||
|
mov esi,DWORD [16+esp]
|
||
|
mov ecx,DWORD [20+esp]
|
||
|
push __win32_segv_handler
|
||
|
db 100,255,48
|
||
|
db 100,137,32
|
||
|
mov edx,esp
|
||
|
add esp,-128
|
||
|
movups xmm0,[edi]
|
||
|
and esp,-16
|
||
|
movups xmm1,[16+edi]
|
||
|
movaps [esp],xmm0
|
||
|
mov edi,esp
|
||
|
movaps [16+esp],xmm1
|
||
|
xor eax,eax
|
||
|
db 243,15,166,208
|
||
|
movaps xmm0,[esp]
|
||
|
movaps xmm1,[16+esp]
|
||
|
mov esp,edx
|
||
|
db 100,143,5,0,0,0,0
|
||
|
lea esp,[4+esp]
|
||
|
mov edi,DWORD [16+esp]
|
||
|
movups [edi],xmm0
|
||
|
movups [16+edi],xmm1
|
||
|
pop esi
|
||
|
pop edi
|
||
|
ret
|
||
|
global _padlock_sha256_blocks
|
||
|
align 16
|
||
|
_padlock_sha256_blocks:
|
||
|
L$_padlock_sha256_blocks_begin:
|
||
|
push edi
|
||
|
push esi
|
||
|
mov edi,DWORD [12+esp]
|
||
|
mov esi,DWORD [16+esp]
|
||
|
mov ecx,DWORD [20+esp]
|
||
|
mov edx,esp
|
||
|
add esp,-128
|
||
|
movups xmm0,[edi]
|
||
|
and esp,-16
|
||
|
movups xmm1,[16+edi]
|
||
|
movaps [esp],xmm0
|
||
|
mov edi,esp
|
||
|
movaps [16+esp],xmm1
|
||
|
mov eax,-1
|
||
|
db 243,15,166,208
|
||
|
movaps xmm0,[esp]
|
||
|
movaps xmm1,[16+esp]
|
||
|
mov esp,edx
|
||
|
mov edi,DWORD [12+esp]
|
||
|
movups [edi],xmm0
|
||
|
movups [16+edi],xmm1
|
||
|
pop esi
|
||
|
pop edi
|
||
|
ret
|
||
|
global _padlock_sha512_blocks
|
||
|
align 16
|
||
|
_padlock_sha512_blocks:
|
||
|
L$_padlock_sha512_blocks_begin:
|
||
|
push edi
|
||
|
push esi
|
||
|
mov edi,DWORD [12+esp]
|
||
|
mov esi,DWORD [16+esp]
|
||
|
mov ecx,DWORD [20+esp]
|
||
|
mov edx,esp
|
||
|
add esp,-128
|
||
|
movups xmm0,[edi]
|
||
|
and esp,-16
|
||
|
movups xmm1,[16+edi]
|
||
|
movups xmm2,[32+edi]
|
||
|
movups xmm3,[48+edi]
|
||
|
movaps [esp],xmm0
|
||
|
mov edi,esp
|
||
|
movaps [16+esp],xmm1
|
||
|
movaps [32+esp],xmm2
|
||
|
movaps [48+esp],xmm3
|
||
|
db 243,15,166,224
|
||
|
movaps xmm0,[esp]
|
||
|
movaps xmm1,[16+esp]
|
||
|
movaps xmm2,[32+esp]
|
||
|
movaps xmm3,[48+esp]
|
||
|
mov esp,edx
|
||
|
mov edi,DWORD [12+esp]
|
||
|
movups [edi],xmm0
|
||
|
movups [16+edi],xmm1
|
||
|
movups [32+edi],xmm2
|
||
|
movups [48+edi],xmm3
|
||
|
pop esi
|
||
|
pop edi
|
||
|
ret
|
||
|
db 86,73,65,32,80,97,100,108,111,99,107,32,120,56,54,32
|
||
|
db 109,111,100,117,108,101,44,32,67,82,89,80,84,79,71,65
|
||
|
db 77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101
|
||
|
db 110,115,115,108,46,111,114,103,62,0
|
||
|
align 16
|
||
|
section .data align=4
|
||
|
align 4
|
||
|
L$padlock_saved_context:
|
||
|
dd 0
|