diff --git a/ChangeLog b/ChangeLog index 070f00af7b714d323f1e67446fd28842d7ca6f24..ef0b06b3916238af5f4e9750c82798ddd45fc587 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,8 +1,12 @@ -2013-05-20 Niels Möller <nisse@lysator.liu.se> +2013-05-21 Niels Möller <nisse@lysator.liu.se> - * x86_64/aes-decrypt-internal.asm: Likewise. + * x86/aes-encrypt-internal.asm: Adapted to new interface. + * x86/aes-decrypt-internal.asm: Likewise. + +2013-05-20 Niels Möller <nisse@lysator.liu.se> * x86_64/aes-encrypt-internal.asm: Adapted to new interface. + * x86_64/aes-decrypt-internal.asm: Likewise. 2013-05-17 Niels Möller <nisse@lysator.liu.se> diff --git a/x86/aes-decrypt-internal.asm b/x86/aes-decrypt-internal.asm index 6220c11d3eb5fac2a4602f3bdc9f7ab4a7453fee..61339e2f5a40fd7f28d356a14a0a563f7e6aad69 100644 --- a/x86/aes-decrypt-internal.asm +++ b/x86/aes-decrypt-internal.asm @@ -1,6 +1,7 @@ C nettle, low-level cryptographics library C C Copyright (C) 2001, 2002, 2005 Rafael R. Sevilla, Niels Möller +C Copyright (C) 2013, Niels Möller C C The nettle library is free software; you can redistribute it and/or modify C it under the terms of the GNU Lesser General Public License as published by @@ -32,11 +33,12 @@ define(<T>,<%ebp>) define(<TMP>,<%edi>) define(<KEY>,<%esi>) -define(<FRAME_CTX>, <40(%esp)>) -define(<FRAME_TABLE>, <44(%esp)>) -define(<FRAME_LENGTH>, <48(%esp)>) -define(<FRAME_DST>, <52(%esp)>) -define(<FRAME_SRC>, <56(%esp)>) +define(<PARAM_ROUNDS>, <40(%esp)>) +define(<PARAM_KEYS>, <44(%esp)>) +define(<PARAM_TABLE>, <48(%esp)>) +define(<PARAM_LENGTH>, <52(%esp)>) +define(<PARAM_DST>, <56(%esp)>) +define(<PARAM_SRC>, <60(%esp)>) define(<FRAME_KEY>, <16(%esp)>) define(<FRAME_COUNT>, <12(%esp)>) @@ -55,7 +57,7 @@ C %edi is a temporary, often used as an accumulator. .file "aes-decrypt-internal.asm" - C _aes_decrypt(struct aes_context *ctx, + C _aes_decrypt(unsigned rounds, const uint32_t *keys, C const struct aes_table *T, C size_t length, uint8_t *dst, C uint8_t *src) @@ -70,24 +72,21 @@ PROLOGUE(_nettle_aes_decrypt) subl $20, %esp C loop counter and save area for the key pointer - movl FRAME_LENGTH, %ebp + movl PARAM_LENGTH, %ebp testl %ebp,%ebp jz .Lend - shrl $4, FRAME_LENGTH - + shrl $4, PARAM_LENGTH + subl $1, PARAM_ROUNDS .Lblock_loop: - movl FRAME_CTX,KEY C address of context struct ctx + movl PARAM_KEYS, KEY C address of subkeys - movl FRAME_SRC,TMP C address of plaintext + movl PARAM_SRC, TMP C address of plaintext AES_LOAD(SA, SB, SC, SD, TMP, KEY) - addl $16, FRAME_SRC C Increment src pointer - movl FRAME_TABLE, T - - C get number of rounds to do from ctx struct - movl AES_NROUNDS (KEY),TMP - subl $1,TMP + addl $16, PARAM_SRC C Increment src pointer + movl PARAM_TABLE, T + movl PARAM_ROUNDS, TMP C Loop counter on stack movl TMP, FRAME_COUNT @@ -140,18 +139,18 @@ PROLOGUE(_nettle_aes_decrypt) C Inverse S-box substitution mov $3,TMP .Lsubst: - AES_SUBST_BYTE(SA,SB,SC,SD,T, KEY) + AES_SUBST_BYTE(SA,SB,SC,SD, T, KEY) decl TMP jnz .Lsubst C Add last subkey, and store decrypted data - movl FRAME_DST,TMP + movl PARAM_DST,TMP movl FRAME_KEY, KEY AES_STORE(SA,SB,SC,SD, KEY, TMP) - addl $16, FRAME_DST C Increment destination pointer - decl FRAME_LENGTH + addl $16, PARAM_DST C Increment destination pointer + decl PARAM_LENGTH jnz .Lblock_loop diff --git a/x86/aes-encrypt-internal.asm b/x86/aes-encrypt-internal.asm index 86985ec62c569d3701c9b6c00cda29873cbd31f1..6ddda58dcef5983555615daa6ff05a6a029dfb9c 100644 --- a/x86/aes-encrypt-internal.asm +++ b/x86/aes-encrypt-internal.asm @@ -1,6 +1,7 @@ C nettle, low-level cryptographics library C C Copyright (C) 2001, 2002, 2005 Rafael R. Sevilla, Niels Möller +C Copyright (C) 2013, Niels Möller C C The nettle library is free software; you can redistribute it and/or modify C it under the terms of the GNU Lesser General Public License as published by @@ -32,11 +33,12 @@ define(<T>,<%ebp>) define(<TMP>,<%edi>) define(<KEY>,<%esi>) -define(<FRAME_CTX>, <40(%esp)>) -define(<FRAME_TABLE>, <44(%esp)>) -define(<FRAME_LENGTH>, <48(%esp)>) -define(<FRAME_DST>, <52(%esp)>) -define(<FRAME_SRC>, <56(%esp)>) +define(<PARAM_ROUNDS>, <40(%esp)>) +define(<PARAM_KEYS>, <44(%esp)>) +define(<PARAM_TABLE>, <48(%esp)>) +define(<PARAM_LENGTH>, <52(%esp)>) +define(<PARAM_DST>, <56(%esp)>) +define(<PARAM_SRC>, <60(%esp)>) define(<FRAME_KEY>, <16(%esp)>) define(<FRAME_COUNT>, <12(%esp)>) @@ -55,7 +57,7 @@ C %edi is a temporary, often used as an accumulator. .file "aes-encrypt-internal.asm" - C _aes_encrypt(struct aes_context *ctx, + C _aes_encrypt(unsigned rounds, const uint32_t *keys, C const struct aes_table *T, C size_t length, uint8_t *dst, C uint8_t *src) @@ -70,24 +72,21 @@ PROLOGUE(_nettle_aes_encrypt) subl $20, %esp C loop counter and save area for the key pointer - movl FRAME_LENGTH, %ebp + movl PARAM_LENGTH, %ebp testl %ebp,%ebp jz .Lend - shrl $4, FRAME_LENGTH - + shrl $4, PARAM_LENGTH + subl $1, PARAM_ROUNDS .Lblock_loop: - movl FRAME_CTX,KEY C address of context struct ctx + movl PARAM_KEYS, KEY C address of subkeys - movl FRAME_SRC,TMP C address of plaintext + movl PARAM_SRC, TMP C address of plaintext AES_LOAD(SA, SB, SC, SD, TMP, KEY) - addl $16, FRAME_SRC C Increment src pointer - movl FRAME_TABLE, T - - C get number of rounds to do from ctx struct - movl AES_NROUNDS (KEY),TMP - subl $1,TMP + addl $16, PARAM_SRC C Increment src pointer + movl PARAM_TABLE, T + movl PARAM_ROUNDS, TMP C Loop counter on stack movl TMP, FRAME_COUNT @@ -146,12 +145,12 @@ PROLOGUE(_nettle_aes_encrypt) jnz .Lsubst C Add last subkey, and store encrypted data - movl FRAME_DST,TMP + movl PARAM_DST,TMP movl FRAME_KEY, KEY AES_STORE(SA,SB,SC,SD, KEY, TMP) - addl $16, FRAME_DST C Increment destination pointer - decl FRAME_LENGTH + addl $16, PARAM_DST C Increment destination pointer + decl PARAM_LENGTH jnz .Lblock_loop