diff options
Diffstat (limited to '')
-rw-r--r-- | src/aes128.asm | 8 | ||||
-rw-r--r-- | src/aes192.asm | 8 | ||||
-rw-r--r-- | src/aes256.asm (renamed from src/aes256ecb.asm) | 57 | ||||
-rw-r--r-- | src/aes256cbc.asm | 183 |
4 files changed, 42 insertions, 214 deletions
diff --git a/src/aes128.asm b/src/aes128.asm index 4f50e8f..06a0275 100644 --- a/src/aes128.asm +++ b/src/aes128.asm @@ -17,7 +17,7 @@ inverted_key_schedule oword 11 dup(0) .code @raw_aes128ecb_encrypt@32 proc - call expand_keys_128ecb + call expand_keys128 pxor xmm0, [key_schedule] aesenc xmm0, [key_schedule + 10h] aesenc xmm0, [key_schedule + 20h] @@ -33,7 +33,7 @@ inverted_key_schedule oword 11 dup(0) @raw_aes128ecb_encrypt@32 endp @raw_aes128ecb_decrypt@32 proc - call expand_keys_128ecb + call expand_keys128 pxor xmm0, [inverted_key_schedule] aesdec xmm0, [inverted_key_schedule + 10h] aesdec xmm0, [inverted_key_schedule + 20h] @@ -48,7 +48,7 @@ inverted_key_schedule oword 11 dup(0) ret @raw_aes128ecb_decrypt@32 endp -expand_keys_128ecb proc +expand_keys128 proc ; A "word" (in terms of the FIPS 187 standard) is a 32-bit block. ; Words are denoted by `w[N]`. ; @@ -208,6 +208,6 @@ invert_key_schedule: movdqa [inverted_key_schedule + 50h], xmm7 ret -expand_keys_128ecb endp +expand_keys128 endp end diff --git a/src/aes192.asm b/src/aes192.asm index d0a6f1a..9d26dca 100644 --- a/src/aes192.asm +++ b/src/aes192.asm @@ -17,7 +17,7 @@ inverted_key_schedule oword 13 dup(0) .code @raw_aes192ecb_encrypt@48 proc - call expand_keys_192ecb + call expand_keys192 pxor xmm0, [key_schedule] aesenc xmm0, [key_schedule + 10h] aesenc xmm0, [key_schedule + 20h] @@ -35,7 +35,7 @@ inverted_key_schedule oword 13 dup(0) @raw_aes192ecb_encrypt@48 endp @raw_aes192ecb_decrypt@48 proc - call expand_keys_192ecb + call expand_keys192 pxor xmm0, [inverted_key_schedule] aesdec xmm0, [inverted_key_schedule + 10h] aesdec xmm0, [inverted_key_schedule + 20h] @@ -52,7 +52,7 @@ inverted_key_schedule oword 13 dup(0) ret @raw_aes192ecb_decrypt@48 endp -expand_keys_192ecb proc +expand_keys192 proc ; A "word" (in terms of the FIPS 187 standard) is a 32-bit block. ; Words are denoted by `w[N]`. ; @@ -254,6 +254,6 @@ invert_key_schedule: movdqa [inverted_key_schedule + 60h], xmm7 ret -expand_keys_192ecb endp +expand_keys192 endp end diff --git a/src/aes256ecb.asm b/src/aes256.asm index 68430a1..56dbd05 100644 --- a/src/aes256ecb.asm +++ b/src/aes256.asm @@ -17,7 +17,7 @@ inverse_key_schedule oword 15 dup(0) .code @raw_aes256ecb_encrypt@48 proc - call expand_keys_256ecb + call expand_keys256 pxor xmm0, [key_schedule] aesenc xmm0, [key_schedule + 10h] aesenc xmm0, [key_schedule + 20h] @@ -36,7 +36,38 @@ inverse_key_schedule oword 15 dup(0) ret @raw_aes256ecb_encrypt@48 endp -expand_keys_256ecb proc +@raw_aes256cbc_encrypt@52 proc + pxor xmm0, [ecx] + jmp @raw_aes256ecb_encrypt@48 +@raw_aes256cbc_encrypt@52 endp + +@raw_aes256ecb_decrypt@48 proc + call expand_keys256 + pxor xmm0, [inverse_key_schedule] + aesdec xmm0, [inverse_key_schedule + 10h] + aesdec xmm0, [inverse_key_schedule + 20h] + aesdec xmm0, [inverse_key_schedule + 30h] + aesdec xmm0, [inverse_key_schedule + 40h] + aesdec xmm0, [inverse_key_schedule + 50h] + aesdec xmm0, [inverse_key_schedule + 60h] + aesdec xmm0, [inverse_key_schedule + 70h] + aesdec xmm0, [inverse_key_schedule + 80h] + aesdec xmm0, [inverse_key_schedule + 90h] + aesdec xmm0, [inverse_key_schedule + 0A0h] + aesdec xmm0, [inverse_key_schedule + 0B0h] + aesdec xmm0, [inverse_key_schedule + 0C0h] + aesdec xmm0, [inverse_key_schedule + 0D0h] + aesdeclast xmm0, [inverse_key_schedule + 0E0h] + ret +@raw_aes256ecb_decrypt@48 endp + +@raw_aes256cbc_decrypt@52 proc + call @raw_aes256ecb_decrypt@48 + pxor xmm0, [ecx] + ret +@raw_aes256cbc_decrypt@52 endp + +expand_keys256 proc ; A "word" (in terms of the FIPS 187 standard) is a 32-bit block. ; Words are denoted by `w[N]`. ; @@ -273,26 +304,6 @@ invert_key_schedule: movdqa [inverse_key_schedule + 70h], xmm7 ret -expand_keys_256ecb endp - -@raw_aes256ecb_decrypt@48 proc - call expand_keys_256ecb - pxor xmm0, [inverse_key_schedule] - aesdec xmm0, [inverse_key_schedule + 10h] - aesdec xmm0, [inverse_key_schedule + 20h] - aesdec xmm0, [inverse_key_schedule + 30h] - aesdec xmm0, [inverse_key_schedule + 40h] - aesdec xmm0, [inverse_key_schedule + 50h] - aesdec xmm0, [inverse_key_schedule + 60h] - aesdec xmm0, [inverse_key_schedule + 70h] - aesdec xmm0, [inverse_key_schedule + 80h] - aesdec xmm0, [inverse_key_schedule + 90h] - aesdec xmm0, [inverse_key_schedule + 0A0h] - aesdec xmm0, [inverse_key_schedule + 0B0h] - aesdec xmm0, [inverse_key_schedule + 0C0h] - aesdec xmm0, [inverse_key_schedule + 0D0h] - aesdeclast xmm0, [inverse_key_schedule + 0E0h] - ret -@raw_aes256ecb_decrypt@48 endp +expand_keys256 endp end diff --git a/src/aes256cbc.asm b/src/aes256cbc.asm deleted file mode 100644 index 1a5c8f0..0000000 --- a/src/aes256cbc.asm +++ /dev/null @@ -1,183 +0,0 @@ -; Copyright 2015 Egor Tensin <Egor.Tensin@gmail.com> -; This file is licensed under the terms of the MIT License. -; See LICENSE.txt for details. - -.586 -.xmm -.model flat - -.data - -align 10h -key_schedule oword 15 dup(0) - -align 10h -inverse_key_schedule oword 15 dup(0) - -.code - -@raw_aes256cbc_encrypt@52 proc - call expand_keys_256cbc - pxor xmm0, [ecx] - pxor xmm0, [key_schedule] - aesenc xmm0, [key_schedule + 10h] - aesenc xmm0, [key_schedule + 20h] - aesenc xmm0, [key_schedule + 30h] - aesenc xmm0, [key_schedule + 40h] - aesenc xmm0, [key_schedule + 50h] - aesenc xmm0, [key_schedule + 60h] - aesenc xmm0, [key_schedule + 70h] - aesenc xmm0, [key_schedule + 80h] - aesenc xmm0, [key_schedule + 90h] - aesenc xmm0, [key_schedule + 0A0h] - aesenc xmm0, [key_schedule + 0B0h] - aesenc xmm0, [key_schedule + 0C0h] - aesenc xmm0, [key_schedule + 0D0h] - aesenclast xmm0, [key_schedule + 0E0h] - ret -@raw_aes256cbc_encrypt@52 endp - -expand_keys_256cbc proc - lea edx, [key_schedule + 20h] - movdqa [key_schedule], xmm1 - movdqa [key_schedule + 10h], xmm2 - - aeskeygenassist xmm7, xmm2, 1h - pshufd xmm7, xmm7, 0FFh - call gen_round_key - - aeskeygenassist xmm7, xmm2, 0 - pshufd xmm7, xmm7, 0AAh - call gen_round_key - - aeskeygenassist xmm7, xmm2, 2h - pshufd xmm7, xmm7, 0FFh - call gen_round_key - - aeskeygenassist xmm7, xmm2, 0 - pshufd xmm7, xmm7, 0AAh - call gen_round_key - - aeskeygenassist xmm7, xmm2, 4h - pshufd xmm7, xmm7, 0FFh - call gen_round_key - - aeskeygenassist xmm7, xmm2, 0 - pshufd xmm7, xmm7, 0AAh - call gen_round_key - - aeskeygenassist xmm7, xmm2, 8h - pshufd xmm7, xmm7, 0FFh - call gen_round_key - - aeskeygenassist xmm7, xmm2, 0 - pshufd xmm7, xmm7, 0AAh - call gen_round_key - - aeskeygenassist xmm7, xmm2, 10h - pshufd xmm7, xmm7, 0FFh - call gen_round_key - - aeskeygenassist xmm7, xmm2, 0 - pshufd xmm7, xmm7, 0AAh - call gen_round_key - - aeskeygenassist xmm7, xmm2, 20h - pshufd xmm7, xmm7, 0FFh - call gen_round_key - - aeskeygenassist xmm7, xmm2, 0 - pshufd xmm7, xmm7, 0AAh - call gen_round_key - - aeskeygenassist xmm7, xmm2, 40h - pshufd xmm7, xmm7, 0FFh - call gen_round_key - - call invert_key_schedule - ret - -gen_round_key: - movdqa xmm6, xmm1 - - pslldq xmm6, 4 - pxor xmm1, xmm6 - pslldq xmm6, 4 - pxor xmm1, xmm6 - pslldq xmm6, 4 - pxor xmm1, xmm6 - - pxor xmm1, xmm7 - - movdqa [edx], xmm1 - add edx, 10h - - movdqa xmm7, xmm1 - movdqa xmm1, xmm2 - movdqa xmm2, xmm7 - ret - -invert_key_schedule: - movdqa xmm7, [key_schedule] - movdqa xmm6, [key_schedule + 0E0h] - movdqa [inverse_key_schedule], xmm6 - movdqa [inverse_key_schedule + 0E0h], xmm7 - - aesimc xmm7, [key_schedule + 10h] - aesimc xmm6, [key_schedule + 0D0h] - movdqa [inverse_key_schedule + 10h], xmm6 - movdqa [inverse_key_schedule + 0D0h], xmm7 - - aesimc xmm7, [key_schedule + 20h] - aesimc xmm6, [key_schedule + 0C0h] - movdqa [inverse_key_schedule + 20h], xmm6 - movdqa [inverse_key_schedule + 0C0h], xmm7 - - aesimc xmm7, [key_schedule + 30h] - aesimc xmm6, [key_schedule + 0B0h] - movdqa [inverse_key_schedule + 30h], xmm6 - movdqa [inverse_key_schedule + 0B0h], xmm7 - - aesimc xmm7, [key_schedule + 40h] - aesimc xmm6, [key_schedule + 0A0h] - movdqa [inverse_key_schedule + 40h], xmm6 - movdqa [inverse_key_schedule + 0A0h], xmm7 - - aesimc xmm7, [key_schedule + 50h] - aesimc xmm6, [key_schedule + 90h] - movdqa [inverse_key_schedule + 50h], xmm6 - movdqa [inverse_key_schedule + 90h], xmm7 - - aesimc xmm7, [key_schedule + 60h] - aesimc xmm6, [key_schedule + 80h] - movdqa [inverse_key_schedule + 60h], xmm6 - movdqa [inverse_key_schedule + 80h], xmm7 - - aesimc xmm7, [key_schedule + 70h] - movdqa [inverse_key_schedule + 70h], xmm7 - - ret -expand_keys_256cbc endp - -@raw_aes256cbc_decrypt@52 proc - call expand_keys_256cbc - pxor xmm0, [inverse_key_schedule] - aesdec xmm0, [inverse_key_schedule + 10h] - aesdec xmm0, [inverse_key_schedule + 20h] - aesdec xmm0, [inverse_key_schedule + 30h] - aesdec xmm0, [inverse_key_schedule + 40h] - aesdec xmm0, [inverse_key_schedule + 50h] - aesdec xmm0, [inverse_key_schedule + 60h] - aesdec xmm0, [inverse_key_schedule + 70h] - aesdec xmm0, [inverse_key_schedule + 80h] - aesdec xmm0, [inverse_key_schedule + 90h] - aesdec xmm0, [inverse_key_schedule + 0A0h] - aesdec xmm0, [inverse_key_schedule + 0B0h] - aesdec xmm0, [inverse_key_schedule + 0C0h] - aesdec xmm0, [inverse_key_schedule + 0D0h] - aesdeclast xmm0, [inverse_key_schedule + 0E0h] - pxor xmm0, [ecx] - ret -@raw_aes256cbc_decrypt@52 endp - -end |