From 8355096f67c571a31913ed57922e6b3930c03f63 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20M=C3=B6ller?= <nisse@lysator.liu.se> Date: Thu, 25 Jan 2024 19:31:06 +0100 Subject: [PATCH] Update sparc64 aes decrypt. --- sparc64/aes-decrypt-internal.asm | 32 +++++++++++++++++--------------- 1 file changed, 17 insertions(+), 15 deletions(-) diff --git a/sparc64/aes-decrypt-internal.asm b/sparc64/aes-decrypt-internal.asm index a43ced36..5e795233 100644 --- a/sparc64/aes-decrypt-internal.asm +++ b/sparc64/aes-decrypt-internal.asm @@ -88,6 +88,9 @@ PROLOGUE(_nettle_aes_decrypt) add T, AES_TABLE2, T2 add T, AES_TABLE3, T3 + sll ROUNDS, 4, W0 C Can use W0 as scratch + add KEYS, W0, KEYS C Point to last subkey + C Must be even, and includes the final round srl ROUNDS, 1, ROUNDS C Last two rounds handled specially @@ -103,33 +106,32 @@ PROLOGUE(_nettle_aes_decrypt) mov ROUNDS, COUNT add SRC, 16, SRC - add KEY, 16, KEY + sub KEY, 32, KEY .Lround_loop: C The AES_ROUND macro uses T0,... T3 C Transform W -> X - AES_ROUND(0, W0, W3, W2, W1, KEY, X0) - AES_ROUND(1, W1, W0, W3, W2, KEY, X1) - AES_ROUND(2, W2, W1, W0, W3, KEY, X2) - AES_ROUND(3, W3, W2, W1, W0, KEY, X3) + AES_ROUND(4, W0, W3, W2, W1, KEY, X0) + AES_ROUND(5, W1, W0, W3, W2, KEY, X1) + AES_ROUND(6, W2, W1, W0, W3, KEY, X2) + AES_ROUND(7, W3, W2, W1, W0, KEY, X3) C Transform X -> W - AES_ROUND(4, X0, X3, X2, X1, KEY, W0) - AES_ROUND(5, X1, X0, X3, X2, KEY, W1) - AES_ROUND(6, X2, X1, X0, X3, KEY, W2) - AES_ROUND(7, X3, X2, X1, X0, KEY, W3) + AES_ROUND(0, X0, X3, X2, X1, KEY, W0) + AES_ROUND(1, X1, X0, X3, X2, KEY, W1) + AES_ROUND(2, X2, X1, X0, X3, KEY, W2) + AES_ROUND(3, X3, X2, X1, X0, KEY, W3) subcc COUNT, 1, COUNT bne .Lround_loop - add KEY, 32, KEY + sub KEY, 32, KEY C Penultimate round - AES_ROUND(0, W0, W3, W2, W1, KEY, X0) - AES_ROUND(1, W1, W0, W3, W2, KEY, X1) - AES_ROUND(2, W2, W1, W0, W3, KEY, X2) - AES_ROUND(3, W3, W2, W1, W0, KEY, X3) + AES_ROUND(4, W0, W3, W2, W1, KEY, X0) + AES_ROUND(5, W1, W0, W3, W2, KEY, X1) + AES_ROUND(6, W2, W1, W0, W3, KEY, X2) + AES_ROUND(7, W3, W2, W1, W0, KEY, X3) - add KEY, 16, KEY C Final round AES_FINAL_ROUND(0, T, X0, X3, X2, X1, KEY, DST) AES_FINAL_ROUND(1, T, X1, X0, X3, X2, KEY, DST) -- GitLab