diff --git a/sparc/aes.asm b/sparc/aes.asm index 79bd2cd0170c009dd1715d253466a12aff1295f9..e2c34ecfe15b9118a11552de0cce8cfe0a5476f9 100644 --- a/sparc/aes.asm +++ b/sparc/aes.asm @@ -33,12 +33,13 @@ _aes_crypt: mov %l1, wtxt .Lblock_loop: ! Read src, and add initial subkey - mov 0, %i3 + mov -4, %i2 .Lsource_loop: - sll %i3, 2, %i2 + add %i2, 4, %i2 + add %i2, src, %i0 ldub [%i0+3], %g2 - add %i3, 1, %i3 + ldub [%i0+2], %g3 sll %g2, 24, %g2 ldub [%i0+1], %i1 @@ -50,10 +51,37 @@ _aes_crypt: or %g2, %i1, %g2 or %g2, %i0, %g2 xor %g2, %g3, %g2 - cmp %i3, 3 + + cmp %i2, 12 bleu .Lsource_loop st %g2, [wtxt+%i2] + ! ! Read a little-endian word + ! ldub [src+3], %g2 + ! sll %g2, 8, %g2 + ! + ! ldub [src+2], %g3 + ! or %g3, %g2, %g2 + ! sll %g2, 8, %g2 + ! + ! ldub [src+1], %g3 + ! or %g3, %g2, %g2 + ! sll %g2, 8, %g2 + ! + ! ldub [src+0], %g3 + ! or %g3, %g2, %g2 + ! sll %g2, 8, %g2 + ! + ! ld [ctx+%i3], %g3 + ! xor %g3, %g2, %g2 + ! + ! add src, 4, src + ! st %g2, [wtxt+%i2] + ! + ! cmp %i3, 8 + ! bleu .Lsource_loop + ! add %i3, 4, %i3 + ld [ctx + AES_NROUNDS], %g2 mov 1, %g1 @@ -69,23 +97,30 @@ _aes_crypt: .Lround_loop: add T, AES_SIDX3, %i4 .Linner_loop: - ! AES_IDX1 + ! AES_SIDX1 ld [%i4-32], %g3 - ! AES_IDX2 + ! AES_SIDX2 ld [%i4-16], %i2 ! wtxt[IDX1...] add %g4, %g3, %g3 ldub [%g3+2], %i1 - ! AES_IDX3 + ! AES_SIDX3 ld [%i4], %g2 sll %i1, 2, %i1 + + ! wtxt[j] ld [%g4+%i3], %i0 - + + ! wtxt[IDX2...] lduh [%g4+%i2], %g3 + and %i0, 255, %i0 + + ! wtxt[IDX3...] ldub [%g4+%g2], %i2 + sll %i0, 2, %i0 add %i0, AES_TABLE0, %i0 ld [T+%i0], %g2 @@ -180,10 +215,10 @@ _aes_crypt: bleu .Lfinal_loop add %g4, 4, %g4 - add dst, 16, dst + add src, 16, src addcc length, -16, length bne .Lblock_loop - add src, 16, src + add dst, 16, dst .Lend: ret restore