noekeon extended

This commit is contained in:
bg 2008-04-12 16:31:20 +00:00
parent 06a565f432
commit e1624aa020
2 changed files with 51 additions and 53 deletions

View File

@ -5,11 +5,10 @@ ALGO_NAME := NOEKEON
BLOCK_CIPHERS += $(ALGO_NAME) BLOCK_CIPHERS += $(ALGO_NAME)
$(ALGO_NAME)_OBJ := noekeon_asmC.o noekeon_asm.o $(ALGO_NAME)_OBJ := noekeon_asm.o
#$(ALGO_NAME)_OBJ := noekeon.o
$(ALGO_NAME)_TEST_BIN := main-noekeon-test.o debug.o uart.o serial-tools.o \ $(ALGO_NAME)_TEST_BIN := main-noekeon-test.o debug.o uart.o serial-tools.o \
noekeon_asmC.o noekeon_asm.o nessie_bc_test.o \ noekeon_asm.o nessie_bc_test.o \
nessie_common.o cli.o performance_test.o nessie_common.o cli.o performance_test.o
$(ALGO_NAME)_NESSIE_TEST := "nessie" $(ALGO_NAME)_NESSIE_TEST := test nessie
$(ALGO_NAME)_PEROFRMANCE_TEST := "performance" $(ALGO_NAME)_PEROFRMANCE_TEST := performance

View File

@ -574,61 +574,60 @@ pi:
mov state3_2, r24 mov state3_2, r24
mov state3_3, r25 mov state3_3, r25
ret ret
/******************************************************************************/
;------- trash follows -------- /*
void noekeon_init(void* key, noekeon_ctx_t* ctx){
uint8_t nullv[16];
memset(nullv, 0, 16);
memcpy(ctx, key, 16);
noekeon_enc(ctx, nullv);
}
*/
.global noekeon_init
noekeon_init:
; === noekeon_init ===
;
; param1: pointer to key (r24,r25)
; param2: pointer to context (r22,r23)
;
in r30, _SFR_IO_ADDR(SPL)
in r31, _SFR_IO_ADDR(SPH)
sbiw r30, 16
out _SFR_IO_ADDR(SPH), r31
out _SFR_IO_ADDR(SPL), r30
/* load state */
movw r26, r22 movw r26, r22
ldi r28, 2 adiw r30, 1
clr r29 /* Y points at r2 aka state0_0 */ movw r22, r30
ldi r22, 16 /* set nullv(stack) to zero */
1: /* copy key to state */ ldi r20, 16
ld r0, X+ 1: st Z+, r1
st Y+, r0 dec r20
dec r22
brne 1b brne 1b
movw r26, r30 /* copy key data to ctx */
movw r30, r24
ldi r20, 16
1: ld r1, Z+
st X+, r1
dec r20
brne 1b
clr r1 clr r1
ldi r22, 16
1: /* set key to zero */
st Z+, r1
dec r22
brne 1b
call theta
ldi r22, 16
1: /* write key back */
ld r0, -Y
st -Z, r0
dec r22
brne 1b
; movw r26, r30 /* move keypointer to X */
; adiw r26, 1
movw r30, r24 /* Z points at state */
push r30 /* push state pointer */
push r31
;-- sbiw r26, 16
clr r29 movw r24, r26
ldi r28, 2 call noekeon_enc
;--
ldi r22, 16 in r30, _SFR_IO_ADDR(SPL)
push r22 /* 16 is also the number of rounds and gets pushed here */ in r31, _SFR_IO_ADDR(SPH)
ldi r22, 16 adiw r30, 16
1: /* load state */ out _SFR_IO_ADDR(SPH), r31
ld r0, Z+ out _SFR_IO_ADDR(SPL), r30
st Y+, r0 ret
dec r22
brne 1b
/* state loaded */
;------- ------------- --------