From 5c254ae3c073eee2717786a70391496c00128fdd Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Niels=20M=C3=B6ller?= <nisse@lysator.liu.se>
Date: Tue, 12 Feb 2002 01:48:27 +0100
Subject: [PATCH] (aes_encrypt): Added comments.

Rev: src/nettle/sparc/aes.asm:1.7
---
 sparc/aes.asm | 257 +++++++++++++++++++++++++++++++++++---------------
 1 file changed, 183 insertions(+), 74 deletions(-)

diff --git a/sparc/aes.asm b/sparc/aes.asm
index 01980965..2e68ef45 100644
--- a/sparc/aes.asm
+++ b/sparc/aes.asm
@@ -66,44 +66,28 @@ key_addition_8to32:
 	.type	key_addition32,#function
 	.proc	020
 key_addition32:
-	! Use %g2 and %g3 as temporaries, %o3 as counter
-	mov	-4, %o3
-	! Increment txt
-	add	%o0, 4, %o0
-.LL26:
-	! Get txt[i]
-	ld	[%o0+%o3], %g2
-	add	%o3, 4, %o3
-	! Get keys[i]
-	ld	[%o1+%o3], %g3
-	cmp	%o3, 12
+	! Unrolled version
+	ld	[%o0], %g2
+	ld	[%o1], %g3
+	xor	%g2, %g3, %g3
+	st	%g3, [%o2]
 
+	ld	[%o0+4], %g2
+	ld	[%o1+4], %g3
 	xor	%g2, %g3, %g3
+	st	%g3, [%o2+4]
 
-	bleu	.LL26
-	st	%g3, [%o2+%o3]
-	
-	retl
-	nop
+	ld	[%o0+8], %g2
+	ld	[%o1+8], %g3
+	xor	%g2, %g3, %g3
+	st	%g3, [%o2+8]
 
+	ld	[%o0+12], %g2
+	ld	[%o1+12], %g3
+	xor	%g2, %g3, %g3
+	retl
+	st	%g3, [%o2+12]
 
-! 	
-! 	mov	%o0, %o4
-! 	mov	0, %o3
-! .LL26:
-! 	sll	%o3, 2, %g2
-! 	ld	[%o1+%g2], %g3
-! 	add	%o3, 1, %o3
-! 	ld	[%o4+%g2], %o0
-! 	cmp	%o3, 3
-! 
-! 	xor	%g3, %o0, %g3
-! 
-! 	bleu	.LL26
-! 	st	%g3, [%o2+%g2]
-! 
-! 	retl
-! 	nop
 
 .LLfe2:
 	.size	key_addition32,.LLfe2-key_addition32
@@ -176,155 +160,280 @@ idx:
 	.global aes_encrypt
 	.type	aes_encrypt,#function
 	.proc	020
+
+! input parameters
+define(ctx,	%i0)
+define(length,	%i1)
+define(dst,	%i2)
+define(src,	%i3)
+
+! locals
+define(g_idx, %i5)
+	
+define(dtbl,	%l1)
+define(round,	%l3)
+define(txt,	%l5)
+define(wtxt,	%l6)
+
 aes_encrypt:
 	save	%sp, -136, %sp
 
-	andcc	%i1, 15, %g0
+	andcc	length, 15, %g0
 	bne	.Lencrypt_fail
-	cmp	%i1, 0
+	cmp	length, 0
 	be	.Lencrypt_end
 	sethi	%hi(idx), %i4
-	add	%fp, -24, %l6
-	add	%fp, -40, %l5
-	or	%i4, %lo(idx), %i5
+	add	%fp, -24, wtxt
+	add	%fp, -40, txt
+	or	%i4, %lo(idx), g_idx
 .Lencrypt_block:
-	mov	%i3, %o0
-	mov	%i0, %o1
+	! key_addition_8to32(src, ctx->keys, wtxt);
+	mov	src, %o0
+	mov	ctx, %o1
 	call	key_addition_8to32, 0
-	mov	%l6, %o2
-	ld	[%i0+480], %o0
-	mov	1, %l3
-	cmp	%l3, %o0
-	bgeu	.LL77
+	mov	wtxt, %o2
+
+	! get nrounds
+	ld	[ctx+480], %o0
+	mov	1, round
+	cmp	round, %o0
+	bgeu	.Lencrypt_final
 	sethi	%hi(64512), %o0
+
 	sethi	%hi(_aes_dtbl), %o0
-	or	%o0, %lo(_aes_dtbl), %l1
-	mov	%l5, %l4
-	mov	%l6, %l0
+	or	%o0, %lo(_aes_dtbl), dtbl
+
+	mov	txt, %l4
+	mov	wtxt, %l0
+	! FIXME:	%l7 = idx, seems redundant? 
 	or	%i4, %lo(idx), %l7
-	add	%i0, 16, %l2
-.LL53:
+	add	ctx, 16, %l2
+.Lencrypt_round:
+	! j:	%o7
+	! 4j:	%g2
 	mov	0, %o7
+	! %g3 = &idx[3][0]
 	add	%l7, 48, %g3
-.LL57:
+.Lencrypt_inner:
+	! %o0 = idx[3][0]
 	ld	[%g3], %o0
+	! %g2 = 4j
 	sll	%o7, 2, %g2
+	! %o1 = idx[2][0]
 	ld	[%g3-16], %o1
+	! %o2 = 4 idx[3][0]
 	sll	%o0, 2, %o0
+	! %o3 = wtxt[idx[3][0]], byte => bits 24-31
 	ldub	[%l0+%o0], %o3
 	sll	%o1, 2, %o1
+	! %o4 = wtxt[idx[2][0]], half-word???
 	lduh	[%l0+%o1], %o4
 	sll	%o3, 2, %o3
+	! %o0 = idx[1][0]
 	ld	[%g3-32], %o0
+	! %o4 = (wtxt[idx[2][0]] >> 16) & 0xff => bits 16-23
 	and	%o4, 255, %o4
-	ld	[%l1+%o3], %o2
+	! %o2 = dtbl[wtxt[idx[3][0]] >> 24]
+	ld	[dtbl+%o3], %o2
+	! %o0 = 4 idx[1][0]
 	sll	%o0, 2, %o0
+	! %o3 = dtbl[wtxt[idx[3][0]] >> 24] >> 24
 	srl	%o2, 24, %o3
+	! %o4 = 4 ((wtxt[idx[2][0]] >> 16) & 0xff)
 	sll	%o4, 2, %o4
+	! %o0 = &wtxt[idx[1][0]]
 	add	%l0, %o0, %o0
-	ld	[%l1+%o4], %o1
+	! %o1 = dtbl[(wtxt[idx[2][0]] >> 16) & 0xff]
+	ld	[dtbl+%o4], %o1
+	! %o2 = dtbl[wtxt[idx[3][0]] >> 24] << 8
 	sll	%o2, 8, %o2
+	! %o5 = (wtxt[idx[1][0]] >> 8) & 0xff
 	ldub	[%o0+2], %o5
+	! %o2 = ROL(dtbl[wtxt[idx[3][0]] >> 24])
 	or	%o2, %o3, %o2
+	! %o1 = dtbl[(wtxt[idx[2][0]] >> 16) & 0xff] 
+	!       ^ ROL(dtbl[wtxt[idx[3][0]] >> 24])  = XX1
 	xor	%o1, %o2, %o1
+	! %o3 = XX1 >> 24
 	srl	%o1, 24, %o3
+	! %o5 = 4 ((wtxt[idx[1][0]] >> 8) & 0xff)
 	sll	%o5, 2, %o5
+	! %o2 = wtxt[j]
 	ld	[%l0+%g2], %o2
+	! %o1 = XX1 << 8
 	sll	%o1, 8, %o1
-	ld	[%l1+%o5], %o0
+	! %o0 = dtbl[(wtxt[idx[1][0]] >> 8) & 0xff]
+	ld	[dtbl+%o5], %o0
+	! %o1 = ROL(XX1)
 	or	%o1, %o3, %o1
+	! %o0 = dtbl[(wtxt[idx[1][0]] >> 8) & 0xff] ^ ROL(XX1) = XX2
 	xor	%o0, %o1, %o0
+	! %o2 = wtxt[j] & 0xff
 	and	%o2, 255, %o2
+	! %03 = XX2 >> 24
 	srl	%o0, 24, %o3
+	! %o2 = 4 (wtxt[j] & 0xff)
 	sll	%o2, 2, %o2
-	ld	[%l1+%o2], %o1
+	! %o1 = dtbl[wtxt[j] & 0xff]
+	ld	[dtbl+%o2], %o1
+	! %o0 = XX2 << 8
 	sll	%o0, 8, %o0
+	! %o0 = ROL(XX2)
 	or	%o0, %o3, %o0
+	! %o1 = dtbl[wtxt[j] & 0xff] ^ ROL(XX2 = XX3
 	xor	%o1, %o0, %o1
+	! j++
 	add	%o7, 1, %o7
+	! txt[j] (old j) = XX3 
 	st	%o1, [%l4+%g2]
+	! j <= 3?
 	cmp	%o7, 3
-	bleu	.LL57
+	bleu	.Lencrypt_inner
+	! %g3 = &idx[3][j]
 	add	%g3, 4, %g3
+
+	! key_addition32(txt, ctx + 16, wtxt)
 	mov	%l2, %o1
-	mov	%l5, %o0
+	mov	txt, %o0
 	call	key_addition32, 0
-	mov	%l6, %o2
-	ld	[%i0+480], %o0
-	add	%l3, 1, %l3
-	cmp	%l3, %o0
-	blu	.LL53
+	mov	wtxt, %o2
+
+	! %o0 = nrounds
+	! FIXME:	Keep in some register?
+	ld	[ctx+480], %o0
+	add	round, 1, round
+	cmp	round, %o0
+	! round < nrounds?
+	blu	.Lencrypt_round
+	! %l2 = ctx->keys + r*4 
 	add	%l2, 16, %l2
+	
 	sethi	%hi(64512), %o0
-.LL77:
+.Lencrypt_final:
+	! %l3 = 0xff00 ???
 	or	%o0, 768, %l3
+	! %o7 = j = 0
 	mov	0, %o7
-	mov	%l6, %g3
+	! %g3 = wtxt
+	mov	wtxt, %g3
+	! %l2 = 0xff0000
 	sethi	%hi(16711680), %l2
+	! %l1 = 0xff000000
 	sethi	%hi(-16777216), %l1
-	mov	%l5, %l0
-	add	%i5, 48, %g2
+	! %l0 = txt 
+	mov	txt, %l0
+	! %g2 = &idx[3][0]
+	add	g_idx, 48, %g2
 .LL63:
+	! %o0 = idx[1][0]
 	ld	[%g2-32], %o0
+	! %o5 = 4 j
 	sll	%o7, 2, %o5
+	! %o2 = idx[2][0]
 	ld	[%g2-16], %o2
+	! %o0 = 4(idx[1][0])
 	sll	%o0, 2, %o0
+	! %o3 = wtxt[idx[1][0]]
 	ld	[%g3+%o0], %o3
+	! %o2 = 4 idx[2][0]
 	sll	%o2, 2, %o2
+	! %o4 = idx[3][0]
 	ld	[%g2], %o4
+	! %o3 = wtxt[idx[1][0]] & 0xff00 
 	and	%o3, %l3, %o3
+	! %o1 = wtxt[idx[2][0]]
 	ld	[%g3+%o2], %o1
+	! %o4 = 4 idx[3][0]
 	sll	%o4, 2, %o4
+	! %o0 = wtxt[idx[1][0]]
 	ld	[%g3+%o5], %o0
+	! %o1 = wtxt[idx[2][0]] & 0xff0000
 	and	%o1, %l2, %o1
+	! %o2 = wtxt[idx[3][0]]
 	ld	[%g3+%o4], %o2
+	! %o0 = wtxt[idx[1][0]] & 0xff
 	and	%o0, 255, %o0
+
+	! % o0 = wtxt[idx[1][0]] & 0xff
+	!        | wtxt[idx[1][0]] & 0xff00
+	!        | wtxt[idx[2][0]] & 0xff0000
 	or	%o0, %o3, %o0
 	or	%o0, %o1, %o0
+	! %o2 = wtxt[idx[3][0]] & 0xff000000
 	and	%o2, %l1, %o2
 	or	%o0, %o2, %o0
+	! j++
 	add	%o7, 1, %o7
+	! txt[j] = ... | ... | ... | ... (old j)
 	st	%o0, [%l0+%o5]
+	! j <= 3?
 	cmp	%o7, 3
 	bleu	.LL63
+	! %g2 = &idx[3][j]
 	add	%g2, 4, %g2
+	
 	sethi	%hi(_aes_sbox), %o0
 	or	%o0, %lo(_aes_sbox), %g3
+	
+	! %o7 = j = 0
 	mov	0, %o7
+	! %g2 = txt
 	mov	%l5, %g2
-.LL68:
+.Lencrypt_sbox:
+	! %o5 = 4 j
 	sll	%o7, 2, %o5
+	! %o3 = txt[j]
 	ld	[%g2+%o5], %o3
+	! j++
 	add	%o7, 1, %o7
+	! %o0 = (txt[j] >> 8) & 0xff (old j) 
 	srl	%o3, 8, %o0
 	and	%o0, 255, %o0
+	! %o4 = sbox[(txt[j] >> 8) & 0xff]
 	ldub	[%g3+%o0], %o4
+	! %o2 = (txt[j] >> 16) (old j)
 	srl	%o3, 16, %o2
+	! %o0 = txt[j] & 0xff
 	and	%o3, 255, %o0
+	! %o1 = sbox[txt[j] & 0xff]
 	ldub	[%g3+%o0], %o1
+	! %o2 = (txt[j] >> 16) & 0xff (old j)
 	and	%o2, 255, %o2
+	! %o0 = sbox[(txt[j] >> 16) & 0xff]
 	ldub	[%g3+%o2], %o0
+	! %o3 = txt[j] >> 24
 	srl	%o3, 24, %o3
+	! %o4 = sbox[txt[j] & 0xff] << 8
 	sll	%o4, 8, %o4
+	! %o2 = sbox[txt[j] >> 24]
 	ldub	[%g3+%o3], %o2
+	! %o1 = sbox[txt[j] & 0xff] 
+	!	| sbox[(txt[j] >> 8) & 0xff] << 8
 	or	%o1, %o4, %o1
+	!	| sbox[(txt[j] >> 16) & 0xff] << 16
 	sll	%o0, 16, %o0
 	or	%o1, %o0, %o1
+	!	| sbox[txt[j] >> 24] << 24
 	sll	%o2, 24, %o2
 	or	%o1, %o2, %o1
+	! j < 3 
 	cmp	%o7, 3
-	bleu	.LL68
+	bleu	.Lencrypt_sbox
+	! txt[j] = ... | ... | ... | ...
 	st	%o1, [%g2+%o5]
-	ld	[%i0+480], %o1
-	mov	%i2, %o2
+
+	! key_addition32to8(txt, ctx + nrounds * 4, dst,
+	ld	[ctx+480], %o1
+	mov	dst, %o2
 	sll	%o1, 4, %o1
-	add	%i0, %o1, %o1
+	add	ctx, %o1, %o1
 	call	key_addition32to8, 0
 	mov	%l5, %o0
-	add	%i3, 16, %i3
-	addcc	%i1, -16, %i1
+
+	add	src, 16, src
+	addcc	length, -16, length
 	bne	.Lencrypt_block
-	add	%i2, 16, %i2
+	add	dst, 16, dst
 	b,a	.Lencrypt_end
 .Lencrypt_fail:
 	sethi	%hi(.LLC0), %o0
-- 
GitLab