diff --git a/x86/aes-decrypt.asm b/x86/aes-decrypt.asm index 63dd703c4f914db8cb897cbb3670dabd70a18bac..752975fd468709d0cab2ff688aa2b9dfee3e149c 100644 --- a/x86/aes-decrypt.asm +++ b/x86/aes-decrypt.asm @@ -22,11 +22,12 @@ C MA 02111-1307, USA. C aes_decrypt(struct aes_context *ctx, C unsigned length, uint8_t *dst, C uint8_t *src) + .text .align 16 -.globl aes_decrypt + .globl aes_decrypt .type aes_decrypt,@function aes_decrypt: - C // save all registers that need to be saved + C save all registers that need to be saved pushl %ebx C 16(%esp) pushl %ebp C 12(%esp) pushl %esi C 8(%esp) @@ -38,24 +39,28 @@ aes_decrypt: C src = 32(%esp) movl 24(%esp), %ebp - C What's the right way to set the flags? - addl $0, %ebp + testl %ebp,%ebp jz .Ldecrypt_end .Ldecrypt_block_loop: - movl 32(%esp),%esi C address of ciphertext - movl (%esi),%eax C load ciphertext into registers - movl 4(%esi),%ebx - movl 8(%esi),%ecx - movl 12(%esi),%edx - + movl 20(%esp),%esi C address of context struct ctx + movl 32(%esp),%ebp C address of plaintext + AES_LOAD(%esi, %ebp) addl $16, 32(%esp) C Increment src pointer - movl 20(%esp),%esi C address of context struct ctx - xorl (%esi),%eax C add first key to ciphertext - xorl 4(%esi),%ebx - xorl 8(%esi),%ecx - xorl 12(%esi),%edx +C movl 32(%esp),%esi C address of ciphertext +C movl (%esi),%eax C load ciphertext into registers +C movl 4(%esi),%ebx +C movl 8(%esi),%ecx +C movl 12(%esi),%edx +C +C addl $16, 32(%esp) C Increment src pointer +C +C movl 20(%esp),%esi C address of context struct ctx +C xorl (%esi),%eax C add first key to ciphertext +C xorl 4(%esi),%ebx +C xorl 8(%esi),%ecx +C xorl 12(%esi),%edx movl AES_NROUNDS (%esi),%ebp C get number of rounds to do from struct C shll $4,%ebp C leal 240(%esi, %ebp),%esi