Merge branch 'linus' of git://git.kernel.org/pub/scm/linux/kernel/git/herbert/crypto-2.6
[linux-2.6-microblaze.git] / arch / arm64 / crypto / aes-ce.S
index 3ebfaec..00bd288 100644 (file)
@@ -15,6 +15,8 @@
        .arch           armv8-a+crypto
 
        xtsmask         .req    v16
+       cbciv           .req    v16
+       vctr            .req    v16
 
        .macro          xts_reload_mask, tmp
        .endm
@@ -49,7 +51,7 @@
        load_round_keys \rounds, \temp
        .endm
 
-       .macro          do_enc_Nx, de, mc, k, i0, i1, i2, i3
+       .macro          do_enc_Nx, de, mc, k, i0, i1, i2, i3, i4
        aes\de          \i0\().16b, \k\().16b
        aes\mc          \i0\().16b, \i0\().16b
        .ifnb           \i1
        aes\mc          \i2\().16b, \i2\().16b
        aes\de          \i3\().16b, \k\().16b
        aes\mc          \i3\().16b, \i3\().16b
+       .ifnb           \i4
+       aes\de          \i4\().16b, \k\().16b
+       aes\mc          \i4\().16b, \i4\().16b
+       .endif
        .endif
        .endif
        .endm
 
-       /* up to 4 interleaved encryption rounds with the same round key */
-       .macro          round_Nx, enc, k, i0, i1, i2, i3
+       /* up to 5 interleaved encryption rounds with the same round key */
+       .macro          round_Nx, enc, k, i0, i1, i2, i3, i4
        .ifc            \enc, e
-       do_enc_Nx       e, mc, \k, \i0, \i1, \i2, \i3
+       do_enc_Nx       e, mc, \k, \i0, \i1, \i2, \i3, \i4
        .else
-       do_enc_Nx       d, imc, \k, \i0, \i1, \i2, \i3
+       do_enc_Nx       d, imc, \k, \i0, \i1, \i2, \i3, \i4
        .endif
        .endm
 
-       /* up to 4 interleaved final rounds */
-       .macro          fin_round_Nx, de, k, k2, i0, i1, i2, i3
+       /* up to 5 interleaved final rounds */
+       .macro          fin_round_Nx, de, k, k2, i0, i1, i2, i3, i4
        aes\de          \i0\().16b, \k\().16b
        .ifnb           \i1
        aes\de          \i1\().16b, \k\().16b
        .ifnb           \i3
        aes\de          \i2\().16b, \k\().16b
        aes\de          \i3\().16b, \k\().16b
+       .ifnb           \i4
+       aes\de          \i4\().16b, \k\().16b
+       .endif
        .endif
        .endif
        eor             \i0\().16b, \i0\().16b, \k2\().16b
        .ifnb           \i3
        eor             \i2\().16b, \i2\().16b, \k2\().16b
        eor             \i3\().16b, \i3\().16b, \k2\().16b
+       .ifnb           \i4
+       eor             \i4\().16b, \i4\().16b, \k2\().16b
+       .endif
        .endif
        .endif
        .endm
 
-       /* up to 4 interleaved blocks */
-       .macro          do_block_Nx, enc, rounds, i0, i1, i2, i3
+       /* up to 5 interleaved blocks */
+       .macro          do_block_Nx, enc, rounds, i0, i1, i2, i3, i4
        cmp             \rounds, #12
        blo             2222f           /* 128 bits */
        beq             1111f           /* 192 bits */
-       round_Nx        \enc, v17, \i0, \i1, \i2, \i3
-       round_Nx        \enc, v18, \i0, \i1, \i2, \i3
-1111:  round_Nx        \enc, v19, \i0, \i1, \i2, \i3
-       round_Nx        \enc, v20, \i0, \i1, \i2, \i3
+       round_Nx        \enc, v17, \i0, \i1, \i2, \i3, \i4
+       round_Nx        \enc, v18, \i0, \i1, \i2, \i3, \i4
+1111:  round_Nx        \enc, v19, \i0, \i1, \i2, \i3, \i4
+       round_Nx        \enc, v20, \i0, \i1, \i2, \i3, \i4
 2222:  .irp            key, v21, v22, v23, v24, v25, v26, v27, v28, v29
-       round_Nx        \enc, \key, \i0, \i1, \i2, \i3
+       round_Nx        \enc, \key, \i0, \i1, \i2, \i3, \i4
        .endr
-       fin_round_Nx    \enc, v30, v31, \i0, \i1, \i2, \i3
+       fin_round_Nx    \enc, v30, v31, \i0, \i1, \i2, \i3, \i4
        .endm
 
        .macro          encrypt_block, in, rounds, t0, t1, t2
        do_block_Nx     e, \rounds, \in
        .endm
 
-       .macro          encrypt_block2x, i0, i1, rounds, t0, t1, t2
-       do_block_Nx     e, \rounds, \i0, \i1
-       .endm
-
        .macro          encrypt_block4x, i0, i1, i2, i3, rounds, t0, t1, t2
        do_block_Nx     e, \rounds, \i0, \i1, \i2, \i3
        .endm
 
-       .macro          decrypt_block, in, rounds, t0, t1, t2
-       do_block_Nx     d, \rounds, \in
+       .macro          encrypt_block5x, i0, i1, i2, i3, i4, rounds, t0, t1, t2
+       do_block_Nx     e, \rounds, \i0, \i1, \i2, \i3, \i4
        .endm
 
-       .macro          decrypt_block2x, i0, i1, rounds, t0, t1, t2
-       do_block_Nx     d, \rounds, \i0, \i1
+       .macro          decrypt_block, in, rounds, t0, t1, t2
+       do_block_Nx     d, \rounds, \in
        .endm
 
        .macro          decrypt_block4x, i0, i1, i2, i3, rounds, t0, t1, t2
        do_block_Nx     d, \rounds, \i0, \i1, \i2, \i3
        .endm
 
+       .macro          decrypt_block5x, i0, i1, i2, i3, i4, rounds, t0, t1, t2
+       do_block_Nx     d, \rounds, \i0, \i1, \i2, \i3, \i4
+       .endm
+
+#define MAX_STRIDE     5
+
 #include "aes-modes.S"