aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorEgor Tensin <Egor.Tensin@gmail.com>2015-05-29 23:01:36 +0300
committerEgor Tensin <Egor.Tensin@gmail.com>2015-05-29 23:01:36 +0300
commit22eb69c05cd574bfa505ea45f40a18e5b05893c1 (patch)
treea390df6f49fcbf38f7ebdb17e74d1010cf3eb355
parentaes256ecb.asm: better comments (as in aes192.asm) (diff)
downloadaes-tools-22eb69c05cd574bfa505ea45f40a18e5b05893c1.tar.gz
aes-tools-22eb69c05cd574bfa505ea45f40a18e5b05893c1.zip
merge aes256{ecb,cbc}.asm
-rw-r--r--src/aes128.asm8
-rw-r--r--src/aes192.asm8
-rw-r--r--src/aes256.asm (renamed from src/aes256ecb.asm)57
-rw-r--r--src/aes256cbc.asm183
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