]> git.ipfire.org Git - thirdparty/nettle.git/commitdiff
Update sparc64 aes decrypt.
authorNiels Möller <nisse@lysator.liu.se>
Thu, 25 Jan 2024 18:31:06 +0000 (19:31 +0100)
committerNiels Möller <nisse@lysator.liu.se>
Sat, 27 Jan 2024 13:04:50 +0000 (14:04 +0100)
sparc64/aes-decrypt-internal.asm

index a43ced3646dbc54f34660672ffa8f0de64ece29f..5e7952337e2c1831b91b5ddabe0a3d195650f6eb 100644 (file)
@@ -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)