diff --git a/ChangeLog b/ChangeLog index 38c26f6db3608d39bfe066b11092156f8cd9bf78..12629d5b26c807665de5bde731b2af513837d5fd 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,8 @@ 2013-05-16 Niels Möller <nisse@lysator.liu.se> + * arm/aes.m4 (AES_ENCRYPT_ROUND, AES_DECRYPT): Moved macros to the + files using them. + * arm/v6/aes-encrypt-internal.asm: Use ALIGN macro. Use 16-byte alignment for loops. * arm/v6/aes-decrypt-internal.asm: Likewise. Also added a nop diff --git a/arm/aes.m4 b/arm/aes.m4 index 00d3c9a3258e8ff598452b12a2bad46718dd6d19..408e35e4fa50636dbecf3831d0b21ef598ec6578 100644 --- a/arm/aes.m4 +++ b/arm/aes.m4 @@ -23,129 +23,6 @@ define(<AES_STORE>, < strb $2, [$1], #+1 >) -C 53 instr. -C It's tempting to use eor with rotation, but that's slower. -C AES_ENCRYPT_ROUND(x0,x1,x2,x3,w0,w1,w2,w3,key) -define(<AES_ENCRYPT_ROUND>, < - uxtb T0, $1 - ldr $5, [TABLE, T0, lsl #2] - uxtb T0, $2 - ldr $6, [TABLE, T0, lsl #2] - uxtb T0, $3 - ldr $7, [TABLE, T0, lsl #2] - uxtb T0, $4 - ldr $8, [TABLE, T0, lsl #2] - - uxtb T0, $2, ror #8 - add TABLE, TABLE, #1024 - ldr T0, [TABLE, T0, lsl #2] - eor $5, $5, T0 - uxtb T0, $3, ror #8 - ldr T0, [TABLE, T0, lsl #2] - eor $6, $6, T0 - uxtb T0, $4, ror #8 - ldr T0, [TABLE, T0, lsl #2] - eor $7, $7, T0 - uxtb T0, $1, ror #8 - ldr T0, [TABLE, T0, lsl #2] - eor $8, $8, T0 - - uxtb T0, $3, ror #16 - add TABLE, TABLE, #1024 - ldr T0, [TABLE, T0, lsl #2] - eor $5, $5, T0 - uxtb T0, $4, ror #16 - ldr T0, [TABLE, T0, lsl #2] - eor $6, $6, T0 - uxtb T0, $1, ror #16 - ldr T0, [TABLE, T0, lsl #2] - eor $7, $7, T0 - uxtb T0, $2, ror #16 - ldr T0, [TABLE, T0, lsl #2] - eor $8, $8, T0 - - uxtb T0, $4, ror #24 - add TABLE, TABLE, #1024 - ldr T0, [TABLE, T0, lsl #2] - eor $5, $5, T0 - uxtb T0, $1, ror #24 - ldr T0, [TABLE, T0, lsl #2] - eor $6, $6, T0 - uxtb T0, $2, ror #24 - ldr T0, [TABLE, T0, lsl #2] - eor $7, $7, T0 - uxtb T0, $3, ror #24 - ldr T0, [TABLE, T0, lsl #2] - - ldm $9!, {$1,$2,$3,$4} - eor $8, $8, T0 - sub TABLE, TABLE, #3072 - eor $5, $5, $1 - eor $6, $6, $2 - eor $7, $7, $3 - eor $8, $8, $4 ->) - -define(<AES_DECRYPT_ROUND>, < - uxtb T0, $1 - ldr $5, [TABLE, T0, lsl #2] - uxtb T0, $2 - ldr $6, [TABLE, T0, lsl #2] - uxtb T0, $3 - ldr $7, [TABLE, T0, lsl #2] - uxtb T0, $4 - ldr $8, [TABLE, T0, lsl #2] - - uxtb T0, $4, ror #8 - add TABLE, TABLE, #1024 - ldr T0, [TABLE, T0, lsl #2] - eor $5, $5, T0 - uxtb T0, $1, ror #8 - ldr T0, [TABLE, T0, lsl #2] - eor $6, $6, T0 - uxtb T0, $2, ror #8 - ldr T0, [TABLE, T0, lsl #2] - eor $7, $7, T0 - uxtb T0, $3, ror #8 - ldr T0, [TABLE, T0, lsl #2] - eor $8, $8, T0 - - uxtb T0, $3, ror #16 - add TABLE, TABLE, #1024 - ldr T0, [TABLE, T0, lsl #2] - eor $5, $5, T0 - uxtb T0, $4, ror #16 - ldr T0, [TABLE, T0, lsl #2] - eor $6, $6, T0 - uxtb T0, $1, ror #16 - ldr T0, [TABLE, T0, lsl #2] - eor $7, $7, T0 - uxtb T0, $2, ror #16 - ldr T0, [TABLE, T0, lsl #2] - eor $8, $8, T0 - - uxtb T0, $2, ror #24 - add TABLE, TABLE, #1024 - ldr T0, [TABLE, T0, lsl #2] - eor $5, $5, T0 - uxtb T0, $3, ror #24 - ldr T0, [TABLE, T0, lsl #2] - eor $6, $6, T0 - uxtb T0, $4, ror #24 - ldr T0, [TABLE, T0, lsl #2] - eor $7, $7, T0 - uxtb T0, $1, ror #24 - ldr T0, [TABLE, T0, lsl #2] - - ldm $9!, {$1,$2,$3,$4} - eor $8, $8, T0 - sub TABLE, TABLE, #3072 - eor $5, $5, $1 - eor $6, $6, $2 - eor $7, $7, $3 - eor $8, $8, $4 ->) - C AES_FINAL_ROUND(a,b,c,d,key,res) define(<AES_FINAL_ROUND>, < uxtb T0, $1 diff --git a/arm/v6/aes-decrypt-internal.asm b/arm/v6/aes-decrypt-internal.asm index 651636cc66d5b01d8300d2fe29f2b057e104f1f4..0c8cfc5ed7dc65756075ed8b8d61a42666d67f25 100644 --- a/arm/v6/aes-decrypt-internal.asm +++ b/arm/v6/aes-decrypt-internal.asm @@ -43,6 +43,67 @@ define(<X2>, <r12>) define(<X3>, <r14>) C lr +C AES_DECRYPT_ROUND(x0,x1,x2,x3,w0,w1,w2,w3,key) +define(<AES_DECRYPT_ROUND>, < + uxtb T0, $1 + ldr $5, [TABLE, T0, lsl #2] + uxtb T0, $2 + ldr $6, [TABLE, T0, lsl #2] + uxtb T0, $3 + ldr $7, [TABLE, T0, lsl #2] + uxtb T0, $4 + ldr $8, [TABLE, T0, lsl #2] + + uxtb T0, $4, ror #8 + add TABLE, TABLE, #1024 + ldr T0, [TABLE, T0, lsl #2] + eor $5, $5, T0 + uxtb T0, $1, ror #8 + ldr T0, [TABLE, T0, lsl #2] + eor $6, $6, T0 + uxtb T0, $2, ror #8 + ldr T0, [TABLE, T0, lsl #2] + eor $7, $7, T0 + uxtb T0, $3, ror #8 + ldr T0, [TABLE, T0, lsl #2] + eor $8, $8, T0 + + uxtb T0, $3, ror #16 + add TABLE, TABLE, #1024 + ldr T0, [TABLE, T0, lsl #2] + eor $5, $5, T0 + uxtb T0, $4, ror #16 + ldr T0, [TABLE, T0, lsl #2] + eor $6, $6, T0 + uxtb T0, $1, ror #16 + ldr T0, [TABLE, T0, lsl #2] + eor $7, $7, T0 + uxtb T0, $2, ror #16 + ldr T0, [TABLE, T0, lsl #2] + eor $8, $8, T0 + + uxtb T0, $2, ror #24 + add TABLE, TABLE, #1024 + ldr T0, [TABLE, T0, lsl #2] + eor $5, $5, T0 + uxtb T0, $3, ror #24 + ldr T0, [TABLE, T0, lsl #2] + eor $6, $6, T0 + uxtb T0, $4, ror #24 + ldr T0, [TABLE, T0, lsl #2] + eor $7, $7, T0 + uxtb T0, $1, ror #24 + ldr T0, [TABLE, T0, lsl #2] + + ldm $9!, {$1,$2,$3,$4} + eor $8, $8, T0 + sub TABLE, TABLE, #3072 + eor $5, $5, $1 + eor $6, $6, $2 + eor $7, $7, $3 + eor $8, $8, $4 +>) + .file "aes-decrypt-internal.asm" C _aes_decrypt(struct aes_context *ctx, diff --git a/arm/v6/aes-encrypt-internal.asm b/arm/v6/aes-encrypt-internal.asm index 15cf1bb07e2644d150c366de3c061d5a7613e481..69556a35aea63570fc328c49791cf94ea80ed4aa 100644 --- a/arm/v6/aes-encrypt-internal.asm +++ b/arm/v6/aes-encrypt-internal.asm @@ -45,6 +45,69 @@ define(<X2>, <r12>) define(<X3>, <r14>) C lr +C 53 instr. +C It's tempting to use eor with rotation, but that's slower. +C AES_ENCRYPT_ROUND(x0,x1,x2,x3,w0,w1,w2,w3,key) +define(<AES_ENCRYPT_ROUND>, < + uxtb T0, $1 + ldr $5, [TABLE, T0, lsl #2] + uxtb T0, $2 + ldr $6, [TABLE, T0, lsl #2] + uxtb T0, $3 + ldr $7, [TABLE, T0, lsl #2] + uxtb T0, $4 + ldr $8, [TABLE, T0, lsl #2] + + uxtb T0, $2, ror #8 + add TABLE, TABLE, #1024 + ldr T0, [TABLE, T0, lsl #2] + eor $5, $5, T0 + uxtb T0, $3, ror #8 + ldr T0, [TABLE, T0, lsl #2] + eor $6, $6, T0 + uxtb T0, $4, ror #8 + ldr T0, [TABLE, T0, lsl #2] + eor $7, $7, T0 + uxtb T0, $1, ror #8 + ldr T0, [TABLE, T0, lsl #2] + eor $8, $8, T0 + + uxtb T0, $3, ror #16 + add TABLE, TABLE, #1024 + ldr T0, [TABLE, T0, lsl #2] + eor $5, $5, T0 + uxtb T0, $4, ror #16 + ldr T0, [TABLE, T0, lsl #2] + eor $6, $6, T0 + uxtb T0, $1, ror #16 + ldr T0, [TABLE, T0, lsl #2] + eor $7, $7, T0 + uxtb T0, $2, ror #16 + ldr T0, [TABLE, T0, lsl #2] + eor $8, $8, T0 + + uxtb T0, $4, ror #24 + add TABLE, TABLE, #1024 + ldr T0, [TABLE, T0, lsl #2] + eor $5, $5, T0 + uxtb T0, $1, ror #24 + ldr T0, [TABLE, T0, lsl #2] + eor $6, $6, T0 + uxtb T0, $2, ror #24 + ldr T0, [TABLE, T0, lsl #2] + eor $7, $7, T0 + uxtb T0, $3, ror #24 + ldr T0, [TABLE, T0, lsl #2] + + ldm $9!, {$1,$2,$3,$4} + eor $8, $8, T0 + sub TABLE, TABLE, #3072 + eor $5, $5, $1 + eor $6, $6, $2 + eor $7, $7, $3 + eor $8, $8, $4 +>) + .file "aes-encrypt-internal.asm" C _aes_encrypt(struct aes_context *ctx,