* \email daniel.otte@rub.de
* \date 2009-03-24
* \license GPLv3 or later
- */
+ */
#include "avr-asm-macros.S"
dec r26
brne 1b
rjmp 9f
-3:
+3:
ld A0, X+
ld A1, X+
ld A2, X+
9:
pop_range 14, 17
ret
-
+
/******************************************************************************/
/*
#define X(a) (((uint64_t*)data)[(a)])
uint8_t r4[8] = {16, 14, 21, 44, 51, 43, 19, 37};
uint8_t r5[8] = {22, 13, 12, 9, 9, 42, 18, 48};
uint8_t r6[8] = {38, 52, 32, 59, 35, 40, 2, 53};
- uint8_t r7[8] = {12, 57, 54, 34, 41, 15, 56, 56};
+ uint8_t r7[8] = {12, 57, 54, 34, 41, 15, 56, 56};
do{
if(i%4==0){
add_key_16(data, ctx, s);
movw CTX0, r22
clr I
clr S
-1:
+1:
mov r30, I
andi r30, 0x03
breq 2f
pop_range 2, 17
pop r29
pop r28
- ret
-4:
+ ret
+4:
/* call mix */
ldi r30, lo8(threefish1024_rc0)
ldi r31, hi8(threefish1024_rc0)
push IDX4
push IDX3
push IDX2
-
+
movw r24, DATA0
call threefish_mix_asm /* no rcall? */
movw r24, DATA0
movw r30, DATA0
adiw r30, 7*8
rcall xchg_zx8
- /* --- */
+ /* --- */
movw r26, DATA0 /* X3 <-> X11 */
adiw r26, 3*8
movw r30, DATA0
movw r30, DATA0
adiw r30, 6*8
rcall xchg_zx8
-
+
inc I
; mov r26, I
; cpi r26, 5
; rjmp exit
9:
rjmp 1b
-
-threefish1024_slut17:
+
+threefish1024_slut17:
.byte 0x00, 0x08, 0x10, 0x18, 0x20, 0x28, 0x30, 0x38
.byte 0x40, 0x48, 0x50, 0x58, 0x60, 0x68, 0x70, 0x78
.byte 0x80, 0x00, 0x08, 0x10, 0x18, 0x20, 0x28, 0x30
.byte 0x10, 0x00, 0x08, 0x10, 0x00, 0x08, 0x10, 0x00
.byte 0x08, 0x10, 0x00, 0x08, 0x10, 0x00, 0x08, 0x10
.byte 0x00
-threefish1024_rc0: .byte 0x79, 0x31, 0x41, 0x42, 0x34, 0x21, 0x72, 0x69
-threefish1024_rc1: .byte 0x53, 0x31, 0x10, 0x53, 0x19, 0x1a, 0x19, 0x61
-threefish1024_rc2: .byte 0x5b, 0x6a, 0x22, 0x31, 0x69, 0x22, 0x40, 0x33
-threefish1024_rc3: .byte 0x50, 0x2b, 0x71, 0x74, 0x60, 0x31, 0x6b, 0x72
-threefish1024_rc4: .byte 0x20, 0x2a, 0x3b, 0x54, 0x63, 0x53, 0x23, 0x5b
-threefish1024_rc5: .byte 0x3a, 0x2b, 0x14, 0x11, 0x11, 0x52, 0x22, 0x60
-threefish1024_rc6: .byte 0x5a, 0x64, 0x40, 0x73, 0x43, 0x50, 0x02, 0x7b
-threefish1024_rc7: .byte 0x14, 0x71, 0x7a, 0x42, 0x51, 0x29, 0x70, 0x70
+/* old round constants
+threefish1024_rc0: .byte 0x79, 0x31, 0x41, 0x42, 0x34, 0x21, 0x72, 0x69
+threefish1024_rc1: .byte 0x53, 0x31, 0x10, 0x53, 0x19, 0x1a, 0x19, 0x61
+threefish1024_rc2: .byte 0x5b, 0x6a, 0x22, 0x31, 0x69, 0x22, 0x40, 0x33
+threefish1024_rc3: .byte 0x50, 0x2b, 0x71, 0x74, 0x60, 0x31, 0x6b, 0x72
+threefish1024_rc4: .byte 0x20, 0x2a, 0x3b, 0x54, 0x63, 0x53, 0x23, 0x5b
+threefish1024_rc5: .byte 0x3a, 0x2b, 0x14, 0x11, 0x11, 0x52, 0x22, 0x60
+threefish1024_rc6: .byte 0x5a, 0x64, 0x40, 0x73, 0x43, 0x50, 0x02, 0x7b
+threefish1024_rc7: .byte 0x14, 0x71, 0x7a, 0x42, 0x51, 0x29, 0x70, 0x70
+*/
+threefish1024_rc0: .byte 0x30, 0x5a, 0x41, 0x1b, 0x51, 0x20, 0x49, 0x11
+threefish1024_rc1: .byte 0x2b, 0x23, 0x04, 0x24, 0x11, 0x42, 0x54, 0x60
+threefish1024_rc2: .byte 0x10, 0x12, 0x63, 0x60, 0x5b, 0x70, 0x69, 0x43
+threefish1024_rc3: .byte 0x69, 0x79, 0x2b, 0x51, 0x49, 0x63, 0x6a, 0x64
+threefish1024_rc4: .byte 0x10, 0x61, 0x42, 0x69, 0x14, 0x04, 0x23, 0x39
+threefish1024_rc5: .byte 0x21, 0x22, 0x51, 0x34, 0x69, 0x7b, 0x52, 0x49
+threefish1024_rc6: .byte 0x3a, 0x39, 0x73, 0x20, 0x54, 0x52, 0x54, 0x5b
+threefish1024_rc7: .byte 0x5b, 0x64, 0x21, 0x31, 0x4a, 0x51, 0x31, 0x24
add_z_to_x8:
ld r0, Z+
st X+, r1
clr r1
ret
-
+
T0 = IDX0
T1 = 0
-CNT = 24
+CNT = 24
xchg_zx8:
ldi CNT, 8
1: ld T0, X
ld T1, Z
st X+, T1
- st Z+, T0
+ st Z+, T0
dec CNT
brne 1b
ret