]> git.cryptolib.org Git - avr-crypto-lib.git/blobdiff - skein/threefish1024_enc_asm.S
introducing the tweak on skein
[avr-crypto-lib.git] / skein / threefish1024_enc_asm.S
index 38bf04c587320b8dcb03bd2a6dde00ef9a23d356..f88b3ff70c93d7a57750f529d00904bf23ef36ea 100644 (file)
@@ -21,7 +21,7 @@
  * \email   daniel.otte@rub.de
  * \date    2009-03-24
  * \license GPLv3 or later
  * \email   daniel.otte@rub.de
  * \date    2009-03-24
  * \license GPLv3 or later
- */ 
+ */
 
 #include "avr-asm-macros.S"
 
 
 #include "avr-asm-macros.S"
 
@@ -113,7 +113,7 @@ threefish1024_init:
        dec r26
        brne 1b
        rjmp 9f
        dec r26
        brne 1b
        rjmp 9f
-3:     
+3:
        ld A0, X+
        ld A1, X+
        ld A2, X+
        ld A0, X+
        ld A1, X+
        ld A2, X+
@@ -165,7 +165,7 @@ threefish1024_init:
 9:
        pop_range 14, 17
        ret
 9:
        pop_range 14, 17
        ret
-       
+
 /******************************************************************************/
 /*
 #define X(a) (((uint64_t*)data)[(a)])
 /******************************************************************************/
 /*
 #define X(a) (((uint64_t*)data)[(a)])
@@ -208,7 +208,7 @@ void threefish1024_enc(void* data, const threefish1024_ctx_t* ctx){
        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 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);
        do{
                if(i%4==0){
                        add_key_16(data, ctx, s);
@@ -256,7 +256,7 @@ threefish1024_enc:
        movw CTX0, r22
        clr I
        clr S
        movw CTX0, r22
        clr I
        clr S
-1:     
+1:
        mov r30,  I
        andi r30, 0x03
        breq 2f
        mov r30,  I
        andi r30, 0x03
        breq 2f
@@ -405,8 +405,8 @@ exit:
        pop_range 2, 17
        pop r29
        pop r28
        pop_range 2, 17
        pop r29
        pop r28
-       ret     
-4:     
+       ret
+4:
        /* call mix */
        ldi r30, lo8(threefish1024_rc0)
        ldi r31, hi8(threefish1024_rc0)
        /* call mix */
        ldi r30, lo8(threefish1024_rc0)
        ldi r31, hi8(threefish1024_rc0)
@@ -434,7 +434,7 @@ exit:
        push IDX4
        push IDX3
        push IDX2
        push IDX4
        push IDX3
        push IDX2
-       
+
        movw r24, DATA0
        call threefish_mix_asm /* no rcall? */
        movw r24, DATA0
        movw r24, DATA0
        call threefish_mix_asm /* no rcall? */
        movw r24, DATA0
@@ -488,7 +488,7 @@ exit:
        movw r30, DATA0
        adiw r30, 7*8
        rcall xchg_zx8
        movw r30, DATA0
        adiw r30, 7*8
        rcall xchg_zx8
-       /* --- */       
+       /* --- */
        movw r26, DATA0  /* X3 <-> X11 */
        adiw r26, 3*8
        movw r30, DATA0
        movw r26, DATA0  /* X3 <-> X11 */
        adiw r26, 3*8
        movw r30, DATA0
@@ -535,7 +535,7 @@ exit:
        movw r30, DATA0
        adiw r30, 6*8
        rcall xchg_zx8
        movw r30, DATA0
        adiw r30, 6*8
        rcall xchg_zx8
-               
+
        inc I
 ;      mov r26, I
 ;      cpi r26, 5
        inc I
 ;      mov r26, I
 ;      cpi r26, 5
@@ -543,8 +543,8 @@ exit:
 ;      rjmp exit
 9:
        rjmp 1b
 ;      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 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
@@ -555,14 +555,24 @@ threefish1024_slut3:
        .byte 0x10, 0x00, 0x08, 0x10, 0x00, 0x08, 0x10, 0x00
        .byte 0x08, 0x10, 0x00, 0x08, 0x10, 0x00, 0x08, 0x10
        .byte 0x00
        .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+
 
 add_z_to_x8:
        ld r0, Z+
@@ -599,16 +609,16 @@ add_z_to_x8:
        st X+, r1
        clr r1
        ret
        st X+, r1
        clr r1
        ret
-       
+
 T0 = IDX0
 T1 = 0
 T0 = IDX0
 T1 = 0
-CNT = 24       
+CNT = 24
 xchg_zx8:
        ldi CNT, 8
 1:     ld T0, X
        ld T1, Z
        st X+, T1
 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
        dec CNT
        brne 1b
        ret