diff --git a/x86/aes-decrypt.asm b/x86/aes-decrypt.asm index 752975fd468709d0cab2ff688aa2b9dfee3e149c..3fe53ed5dbb46a979d318b48380d49d7254e004a 100644 --- a/x86/aes-decrypt.asm +++ b/x86/aes-decrypt.asm @@ -47,28 +47,9 @@ aes_decrypt: movl 32(%esp),%ebp C address of plaintext AES_LOAD(%esi, %ebp) addl $16, 32(%esp) C Increment src pointer - -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 - C shrl $4,%ebp - C xorl (%esi),%eax C add last key to ciphertext - C xorl 4(%esi),%ebx - C xorl 8(%esi),%ecx - C xorl 12(%esi),%edx + + C get number of rounds to do from struct + movl AES_NROUNDS (%esi),%ebp subl $1,%ebp C one round is complete addl $16,%esi C point to next key @@ -78,24 +59,25 @@ C xorl 12(%esi),%edx C Why??? xchgl %ebx,%edx - C // First column - C a b c d - movl %eax,%esi C copy first in - andl $0x000000ff,%esi C clear all but offset - shll $2,%esi C index in itbl1 - movl AES_TABLE0 + _aes_decrypt_table (%esi),%edi - movl %ebx,%esi C second one - shrl $6,%esi - andl $0x000003fc,%esi C clear all but offset bytes - xorl AES_TABLE1 + _aes_decrypt_table (%esi),%edi - movl %ecx,%esi C third one - shrl $14,%esi - andl $0x000003fc,%esi - xorl AES_TABLE2 + _aes_decrypt_table (%esi),%edi - movl %edx,%esi C fourth one - shrl $22,%esi - andl $0x000003fc,%esi - xorl AES_TABLE3 + _aes_decrypt_table (%esi),%edi + C First column + AES_ROUND(_aes_decrypt_table,a,b,c,d) +C C a b c d +C movl %eax,%esi C copy first in +C andl $0x000000ff,%esi C clear all but offset +C shll $2,%esi C index in itbl1 +C movl AES_TABLE0 + _aes_decrypt_table (%esi),%edi +C movl %ebx,%esi C second one +C shrl $6,%esi +C andl $0x000003fc,%esi C clear all but offset bytes +C xorl AES_TABLE1 + _aes_decrypt_table (%esi),%edi +C movl %ecx,%esi C third one +C shrl $14,%esi +C andl $0x000003fc,%esi +C xorl AES_TABLE2 + _aes_decrypt_table (%esi),%edi +C movl %edx,%esi C fourth one +C shrl $22,%esi +C andl $0x000003fc,%esi +C xorl AES_TABLE3 + _aes_decrypt_table (%esi),%edi pushl %edi C save first on stack C // Second column