]> git.cryptolib.org Git - avr-crypto-lib.git/commitdiff
fixing a bug in threefish-256 decryption assembler module
authorbg <bg@b1d182e4-1ff8-0310-901f-bddb46175740>
Mon, 13 Apr 2009 17:11:25 +0000 (17:11 +0000)
committerbg <bg@b1d182e4-1ff8-0310-901f-bddb46175740>
Mon, 13 Apr 2009 17:11:25 +0000 (17:11 +0000)
test_src/main-threefish-test.c
threefish1024_enc.c
threefish1024_enc_asm.S
threefish256_dec_asm.S
threefish256_enc.c
threefish256_enc_asm.S
threefish256_enc_small.S
threefish512_enc.c
threefish512_enc_asm.S

index 668eca0e5986144f1953f8b314b418c04fc5668b..7d05eb8decb211640a9edb14af0de7c33f5fe43c 100644 (file)
@@ -41,10 +41,22 @@ char* algo_name = "Threefish";
  *  additional validation-functions                                                                                     *
  *****************************************************************************/
 
+void threefish256_dump(threefish256_ctx_t* ctx){
+       uint8_t i;
+       cli_putstr_P(PSTR("\r\n=== ctx dump (256) === \r\n k: "));
+       for(i=0; i<5; ++i){
+               cli_hexdump(&(ctx->k[i]), 8);
+               cli_putc(' ');
+       }
+       cli_putstr_P(PSTR("\r\n t: "));
+       for(i=0; i<3; ++i){
+               cli_hexdump(&(ctx->t[i]), 8);
+               cli_putc(' ');
+       }
+}
+
 void threefish256_dummy_init(const uint8_t* key, uint16_t keysize_b, void* ctx){
-       uint8_t null[16];
-       memset(null, 0, 16);
-       threefish256_init(key, null, ctx);
+       threefish256_init(key, NULL, ctx);
 }
 
 void testrun_nessie_threefish256(void){
@@ -61,9 +73,7 @@ void testrun_nessie_threefish256(void){
 }
 
 void threefish512_dummy_init(const uint8_t* key, uint16_t keysize_b, void* ctx){
-       uint8_t null[16];
-       memset(null, 0, 16);
-       threefish512_init(key, null, ctx);
+       threefish512_init(key, NULL, ctx);
 }
 
 void testrun_nessie_threefish512(void){
@@ -80,9 +90,7 @@ void testrun_nessie_threefish512(void){
 }
 
 void threefish1024_dummy_init(const uint8_t* key, uint16_t keysize_b, void* ctx){
-       uint8_t null[16];
-       memset(null, 0, 16);
-       threefish1024_init(key, null, ctx);
+       threefish1024_init(key, NULL, ctx);
 }
 
 void testrun_nessie_threefish1024(void){
index 0bb8e9b262decf6f65bc40e4cda0a237066818b1..41a35902d695752987360b67ca5c9e2a5ac91177 100644 (file)
@@ -62,13 +62,17 @@ void permute_16(void* data){
 
 void threefish1024_init(const void* key, const void* tweak, threefish1024_ctx_t* ctx){
        memcpy(ctx->k, key, 16*8);
-       memcpy(ctx->t, tweak, 2*8);
+       if(tweak){
+               memcpy(ctx->t, tweak, 2*8);
+               ctx->t[2] = T(0) ^ T(1);
+       }else{
+               memset(ctx, 0, 3*8);
+       }
        uint8_t i;
        ctx->k[16] = THREEFISH_KEY_CONST;
        for(i=0; i<16; ++i){
                ctx->k[16] ^= K(i);
        }
-       ctx->t[2] = T(0) ^ T(1);
 }
 
 static
index bb75f04b9b40228354808d306c4a3017f70e029a..38bf04c587320b8dcb03bd2a6dde00ef9a23d356 100644 (file)
@@ -103,6 +103,17 @@ threefish1024_init:
        st Z+, A7
        /* now the tweak */
        movw r26, r22
+       tst r27
+       brne 3f
+       tst r26
+       brne 3f
+       ldi r26, 3*8
+1:
+       st Z+, r1
+       dec r26
+       brne 1b
+       rjmp 9f
+3:     
        ld A0, X+
        ld A1, X+
        ld A2, X+
@@ -151,6 +162,7 @@ threefish1024_init:
        st Z+, A5
        st Z+, A6
        st Z+, A7
+9:
        pop_range 14, 17
        ret
        
index e55ca6852023d6a9071e9822ec108b0ad40a140e..d2316c6deb5b446e9c784c04d0301479b69e09ce 100644 (file)
@@ -152,7 +152,7 @@ threefish256_dec:
        sbc r0, r1
        st X+, r0
        ld r0, X
-       adc r0, r1
+       sbc r0, r1
        st X+, r0
        tst S
        brne 3f
index 2739f6a3d88cfa941f9818a25abe335914995042..8bfbf9de471bad329a6490300d49c25f4e7358b0 100644 (file)
@@ -46,13 +46,17 @@ void permute_4(void* data){
 
 void threefish256_init(const void* key, const void* tweak, threefish256_ctx_t* ctx){
        memcpy(ctx->k, key, 4*8);
-       memcpy(ctx->t, tweak, 2*8);
+       if(tweak){
+               memcpy(ctx->t, tweak, 2*8);
+               ctx->t[2] = T(0) ^ T(1);
+       }else{
+               memset(ctx->t, 0, 3*8);
+       }
        uint8_t i;
        ctx->k[4] = THREEFISH_KEY_CONST;
        for(i=0; i<4; ++i){
                ctx->k[4] ^= K(i);
        }
-       ctx->t[2] = T(0) ^ T(1);
 }
 
 static
index ccd457d2efbd466c819657c47e82e655d967d919..f18e7f4680a8dcd8ee48ba637c24ec9bf854115e 100644 (file)
@@ -103,6 +103,17 @@ threefish256_init:
        st Z+, A6
        st Z+, A7
        /* now the tweak */
+       tst r23
+       brne 3f
+       tst r22
+       brne 3f
+       ldi r26, 3*8
+2:
+       st Z+, r1
+       dec r26
+       brne 2b
+       rjmp 9f
+3:     
        movw r26, r22
        ld A0, X+
        ld A1, X+
@@ -144,6 +155,7 @@ threefish256_init:
        ld r0, X+
        eor A7, r0
        st Z+, r0
+       
        st Z+, A0
        st Z+, A1
        st Z+, A2
@@ -152,6 +164,7 @@ threefish256_init:
        st Z+, A5
        st Z+, A6
        st Z+, A7
+9:
        pop_range 14, 17
        ret
        
index c1b1152d2a08e3db108a2dfb069da0550936e62f..da0835995af1c3feee3e1eda908ef94760f1fdc4 100644 (file)
@@ -104,6 +104,17 @@ threefish256_init:
        st Z+, A7
        /* now the tweak */
        movw r26, r22
+       tst r27
+       brne 3f
+       tst r26
+       brne 3f
+       ldi r26, 3*8
+1:
+       st Z+, r1
+       dec r26
+       brne 1b
+       rjmp 9f
+3:     
        ld A0, X+
        ld A1, X+
        ld A2, X+
@@ -152,6 +163,7 @@ threefish256_init:
        st Z+, A5
        st Z+, A6
        st Z+, A7
+9:
        pop_range 14, 17
        ret
        
index fb044b59e2c57a24669a3ce29464cc804267ad08..620276fed44a24cf2174c7eae8b482e12d0707fe 100644 (file)
@@ -68,13 +68,17 @@ void permute_inv8(void* data){
 
 void threefish512_init(const void* key, const void* tweak, threefish512_ctx_t* ctx){
        memcpy(ctx->k, key, 8*8);
-       memcpy(ctx->t, tweak, 2*8);
+       if(tweak){
+               memcpy(ctx->t, tweak, 2*8);
+               ctx->t[2] = T(0) ^ T(1);
+       }else{
+               memset(ctx->t, 0, 3*8);
+       }
        uint8_t i;
        ctx->k[8] = THREEFISH_KEY_CONST;
        for(i=0; i<8; ++i){
                ctx->k[8] ^= K(i);
        }
-       ctx->t[2] = T(0) ^ T(1);
 }
 
 static
index bb6ff2d52e6ef6d63368e7915ae716f5fef9e5ba..cc2967fc4baee981dd08036e0ef9ff677e1240e5 100644 (file)
@@ -103,6 +103,17 @@ threefish512_init:
        st Z+, A7
        /* now the tweak */
        movw r26, r22
+       tst r27
+       brne 3f
+       tst r26
+       brne 3f
+       ldi r26, 3*8
+1:
+       st Z+, r1
+       dec r26
+       brne 1b
+       rjmp 9f
+3:     
        ld A0, X+
        ld A1, X+
        ld A2, X+
@@ -151,6 +162,7 @@ threefish512_init:
        st Z+, A5
        st Z+, A6
        st Z+, A7
+9:
        pop_range 14, 17
        ret