]> git.cryptolib.org Git - avr-crypto-lib.git/commitdiff
moved twister naming from big to large
authorbg <bg@b1d182e4-1ff8-0310-901f-bddb46175740>
Thu, 14 May 2009 14:28:59 +0000 (14:28 +0000)
committerbg <bg@b1d182e4-1ff8-0310-901f-bddb46175740>
Thu, 14 May 2009 14:28:59 +0000 (14:28 +0000)
14 files changed:
hfal_twister384.c
hfal_twister512.c
mkfiles/twister.mk
mkfiles/twister_c.mk
test_src/main-twister-test.c
twister-asm.S
twister-big-asm.S [deleted file]
twister-big.c [deleted file]
twister-big.h [deleted file]
twister-large-asm.S [new file with mode: 0644]
twister-large.c [new file with mode: 0644]
twister-large.h [new file with mode: 0644]
twister384.S
twister512.S

index de97177fc408ff89325e0ceeae33e2ad59b10428..888078e422f3d5cc790bafd934ffcf933e5eb459 100644 (file)
@@ -28,7 +28,7 @@
 #include <avr/pgmspace.h>
 #include <stdlib.h>
 #include "hashfunction_descriptor.h"
-#include "twister-big.h"
+#include "twister-large.h"
 
 static const char twister384_str[]   PROGMEM = "Twister-384";
 
index f67234444e657832b470f70f40532a2674687584..4f6e7b0c270f2bc1291cfc0516724f940fb523e9 100644 (file)
@@ -28,7 +28,7 @@
 #include <avr/pgmspace.h>
 #include <stdlib.h>
 #include "hashfunction_descriptor.h"
-#include "twister-big.h"
+#include "twister-large.h"
 
 static const char twister512_str[]   PROGMEM = "Twister-512";
 
index 24fc9bc84f5f2bb75632b1f66e7ccd9bcbaa5acd..f6196ef4a41feca960005bc3cc429b530582b2fc 100644 (file)
@@ -4,7 +4,7 @@ ALGO_NAME := TWISTER
 # comment out the following line for removement of TWISTER from the build process
 HASHES += $(ALGO_NAME)
 
-$(ALGO_NAME)_OBJ      := twister-small-asm.o twister-big-asm.o twister-asm.o \
+$(ALGO_NAME)_OBJ      := twister-small-asm.o twister-large-asm.o twister-asm.o \
                          twister224.o twister256.o twister384.o twister512.o
 $(ALGO_NAME)_TEST_BIN := main-twister-test.o hfal_twister224.o hfal_twister256.o \
                          hfal_twister384.o hfal_twister512.o $(CLI_STD) $(HFAL_STD)
index 11eeca1f905297a8c4a1dcd687d5d3e1a25eb4d8..7d6ec36ff5a86d62f73c5d681200201ef19842c1 100644 (file)
@@ -4,7 +4,7 @@ ALGO_NAME := TWISTER_C
 # comment out the following line for removement of TWISTER from the build process
 HASHES += $(ALGO_NAME)
 
-$(ALGO_NAME)_OBJ      := twister.o twister-small.o twister-big.o memxor.o gf256mul.o
+$(ALGO_NAME)_OBJ      := twister.o twister-small.o twister-large.o memxor.o gf256mul.o
 $(ALGO_NAME)_TEST_BIN := main-twister-test.o hfal_twister224.o hfal_twister256.o \
                          hfal_twister384.o hfal_twister512.o $(CLI_STD) $(HFAL_STD)
 $(ALGO_NAME)_NESSIE_TEST      := "nessie"
index 794c05467055541cc63895238a8fc046a77a42b5..505bbaf6569c0d93c21877d8bca156fed105ef45 100644 (file)
@@ -27,6 +27,7 @@
 #include "debug.h"
 
 #include "twister-small.h"
+#include "twister-large.h"
 #include "nessie_hash_test.h"
 #include "performance_test.h"
 #include "hfal_twister224.h"
index 7ae38422a16fe5599bfdf06f93e55ac8c5dc5110..746ea097fb7545c858c15a788276bb0da76a7dae 100644 (file)
@@ -301,7 +301,7 @@ TMP_SAVE1  = 17
 
 .global twister_ctx2hash
 .global twister_small_ctx2hash
-.global twister_big_ctx2hash
+.global twister_large_ctx2hash
 .global twister224_ctx2hash
 .global twister256_ctx2hash
 .global twister384_ctx2hash
@@ -327,7 +327,7 @@ twister512_ctx2hash:
        ldi r21, hi8(512)
 ;      rjmp twister_ctx2hash
 
-twister_big_ctx2hash:
+twister_large_ctx2hash:
 twister_small_ctx2hash:
 twister_ctx2hash:
        push_range 10, 17
diff --git a/twister-big-asm.S b/twister-big-asm.S
deleted file mode 100644 (file)
index a274cf4..0000000
+++ /dev/null
@@ -1,516 +0,0 @@
-/* twister-big-asm.S */
-/*
-    This file is part of the AVR-Crypto-Lib.
-    Copyright (C) 2008  Daniel Otte (daniel.otte@rub.de)
-
-    This program is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-*/
-/**
- * \file     twister-big-asm.S
- * \email    daniel.otte@rub.de
- * \author   Daniel Otte 
- * \date     2008-12-27
- * \license  GPLv3 or later
- * 
- */
- #include "avr-asm-macros.S"
-
-/* void checksum_update(twister_big_ctx_t* ctx, uint8_t col) */
-/*
- * param ctx: r24:r25
- * param col: r22
- */
-checksum_update:
-       push r16
-       push r28
-       push r29
-       lsl r22
-       lsl r22
-       lsl r22
-       mov r16, r22
-       movw r30, r24 /* X points to ctx->state.s */
-       
-       ldd r18, Z+7*8
-       ldd r19, Z+6*8
-       ldd r20, Z+5*8
-       ldd r21, Z+4*8
-       ldd r22, Z+3*8
-       ldd r23, Z+2*8
-       ldd r24, Z+1*8
-       ldd r25, Z+0*8
-       
-       adiw r30, 63
-       adiw r30, 1+3*8 /* Z points at ctx->checksum[0][8] */
-       movw r28, r30   /* Y points at ctx->checksum[0][8] */
-       andi r16, 63
-       add r30, r16   /* Z points at ctx->checksum[col][8]*/
-       adc r31, r1
-       ldi r26, 8
-       add r16, r26
-       andi r16, 63
-       add r28, r16
-       adc r29, r1    /* Y points at ctx->checksum[(col+1)%8][8]*/
-       
-       ld r0, -Y
-       add r18, r0
-       ld r0, -Z
-       eor r0, r18
-       st Z, r0
-       
-       ld r0, -Y
-       adc r19, r0
-       ld r0, -Z
-       eor r0, r19
-       st Z, r0
-       
-       ld r0, -Y
-       adc r20, r0
-       ld r0, -Z
-       eor r0, r20
-       st Z, r0
-       
-       ld r0, -Y
-       adc r21, r0
-       ld r0, -Z
-       eor r0, r21
-       st Z, r0
-       
-       ld r0, -Y
-       adc r22, r0
-       ld r0, -Z
-       eor r0, r22
-       st Z, r0
-       
-       ld r0, -Y
-       adc r23, r0
-       ld r0, -Z
-       eor r0, r23
-       st Z, r0
-       
-       ld r0, -Y
-       adc r24, r0
-       ld r0, -Z
-       eor r0, r24
-       st Z, r0
-       
-       ld r0, -Y
-       adc r25, r0
-       ld r0, -Z
-       eor r0, r25
-       st Z, r0
-       
-       pop r29
-       pop r28
-       pop r16
-       ret
-
-/*********************************************************************/
-/* void twister_big_init(twister_big_ctx_t* ctx, uint16_t hashsize_b)*/
-/* 
- * param ctx:        r24:r25
- * param hashsize_b: r22:r23
- */
-.global twister384_init
-twister384_init:
-       ldi r22, lo8(384)
-       ldi r23, hi8(384)
-       rjmp twister_big_init
-       
-.global twister512_init
-twister512_init:
-       ldi r22, lo8(512)
-       ldi r23, hi8(512)
-       
-.global twister_big_init
-twister_big_init:
-       movw r30, r24
-       ldi r24, 64
-1:
-       st Z+, r1
-       dec r24
-       brne 1b
-
-       dec r1          
-       ldi r24, 8
-1:
-       st Z+, r1
-       dec r24
-       brne 1b
-
-       inc r1          
-       ldi r24, 8+64
-1:
-       st Z+, r1
-       dec r24
-       brne 1b
-
-       subi r30, lo8(1+8+8+8*7+64)
-       sbci r31, hi8(1+8+8+8*7+64)
-       st Z, r23
-       std Z+8, r22
-       ret
-
-/*********************************************************************/
-/* void twister_big_nextBlock(twister_state_t* ctx, void* msg) */   
-/*
- * param ctx: r24:r25
- * param msg: r22:r23
- */
-CTX_SAVE0 = 14
-CTX_SAVE1 = 15
-TMP_SAVE0 = 12
-TMP_SAVE1 = 13
-MSG_SAVE0 = 28
-MSG_SAVE1 = 29
-.global twister_big_nextBlock
-.global twister384_nextBlock
-.global twister512_nextBlock
-
-twister384_nextBlock:
-twister512_nextBlock:
-twister_big_nextBlock:
-       push_range 12, 15
-       push r28
-       push r29
-       stack_alloc_large 64
-       adiw r30, 1
-       movw TMP_SAVE0, r30
-       movw CTX_SAVE0, r24
-       movw MSG_SAVE0, r22
-       movw r26, CTX_SAVE0
-       ldi r18, 64/8
-1:
-       ld r0, X+
-       st Z+, r0
-       ld r0, X+
-       st Z+, r0
-       ld r0, X+
-       st Z+, r0
-       ld r0, X+
-       st Z+, r0
-       ld r0, X+
-       st Z+, r0
-       ld r0, X+
-       st Z+, r0
-       ld r0, X+
-       st Z+, r0
-       ld r0, X+
-       st Z+, r0
-       dec r18
-       brne 1b
-       /* maxi round 1 */
-       movw r24, CTX_SAVE0 
-       ldi r22, 0
-       rcall checksum_update
-       movw r22, MSG_SAVE0
-       movw r24, CTX_SAVE0 
-       rcall twister_mini_round
-       
-       movw r24, CTX_SAVE0 
-       ldi r22, 1
-       rcall checksum_update
-       adiw MSG_SAVE0, 8
-       movw r22, MSG_SAVE0
-       movw r24, CTX_SAVE0 
-       rcall twister_mini_round
-       
-       movw r24, CTX_SAVE0 
-       ldi r22, 2
-       rcall checksum_update
-       adiw MSG_SAVE0, 8
-       movw r22, MSG_SAVE0
-       movw r24, CTX_SAVE0 
-       rcall twister_mini_round
-       
-       movw r30, TMP_SAVE0
-       movw r26, CTX_SAVE0
-       ldi r18, 64
-1:
-       ld r0, X
-       ld r23, Z
-       eor r0, r23
-       st X+, r0
-       st Z+, r0
-       dec r18
-       brne 1b
-       /* maxi round 2 */
-       movw r24, CTX_SAVE0 
-       ldi r22, 3
-       rcall checksum_update
-       adiw MSG_SAVE0, 8
-       movw r22, MSG_SAVE0
-       movw r24, CTX_SAVE0 
-       rcall twister_mini_round
-       
-       movw r24, CTX_SAVE0 
-       rcall twister_blank_round
-       
-       movw r24, CTX_SAVE0 
-       ldi r22, 4
-       rcall checksum_update
-       adiw MSG_SAVE0, 8
-       movw r22, MSG_SAVE0
-       movw r24, CTX_SAVE0 
-       rcall twister_mini_round
-
-       movw r30, TMP_SAVE0
-       movw r26, CTX_SAVE0
-       ldi r18, 64
-1:
-       ld r0, X
-       ld r23, Z
-       eor r0, r23
-       st X+, r0
-       st Z+, r0
-       dec r18
-       brne 1b
-       /* maxi round 3 */
-       movw r24, CTX_SAVE0 
-       ldi r22, 5
-       rcall checksum_update
-       adiw MSG_SAVE0, 8
-       movw r22, MSG_SAVE0
-       movw r24, CTX_SAVE0 
-       rcall twister_mini_round
-       
-       movw r24, CTX_SAVE0 
-       ldi r22, 6
-       rcall checksum_update
-       adiw MSG_SAVE0, 8
-       movw r22, MSG_SAVE0
-       movw r24, CTX_SAVE0 
-       rcall twister_mini_round
-       
-       movw r24, CTX_SAVE0 
-       ldi r22, 7
-       rcall checksum_update
-       adiw MSG_SAVE0, 8
-       movw r22, MSG_SAVE0
-       movw r24, CTX_SAVE0 
-       rcall twister_mini_round
-       
-       movw r24, CTX_SAVE0 
-       rcall twister_blank_round
-
-       movw r30, TMP_SAVE0
-       movw r26, CTX_SAVE0
-       ldi r18, 64
-1:
-       ld r0, X
-       ld r23, Z+
-       eor r0, r23
-       st X+, r0
-       dec r18
-       brne 1b
-       
-       adiw r26, 9
-       ldi r19, 2
-       ld r0, X
-       add r0, r19
-       st X+, r0
-               
-       ld r0, X
-       adc r0, r1
-       st X+, r0
-       ld r0, X
-       adc r0, r1
-       st X+, r0
-       ld r0, X
-       adc r0, r1
-       st X+, r0
-       ld r0, X
-       adc r0, r1
-       st X+, r0
-       ld r0, X
-       adc r0, r1
-       st X+, r0
-       ld r0, X
-       adc r0, r1
-       st X+, r0
-       ld r0, X
-       adc r0, r1
-       st X+, r0
-       
-       stack_free_large 64
-       pop r29
-       pop r28
-       pop_range 12, 15
-       ret
-       
-/*********************************************************************/
-/* void twister_big_lastBlock(twister_state_t* ctx, void* msg, uint16_t length_b) */   
-/*
- * param ctx:      r24:r25
- * param msg:      r22:r23
- * param length_b: r20:r21
- */
-TMP_SAVE0 = 12
-TMP_SAVE1 = 13
-CTX_SAVE0 = 14
-CTX_SAVE1 = 15
-LEN_SAVE0 = 16
-LEN_SAVE1 = 17
-MSG_SAVE0 = 28
-MSG_SAVE1 = 29
-.global twister_big_lastBlock
-.global twister384_lastBlock
-.global twister512_lastBlock
-
-twister384_lastBlock:
-twister512_lastBlock:
-twister_big_lastBlock:
-       push_range 12, 17
-       push r28
-       push r29
-       stack_alloc_large 64
-       adiw r30, 1
-       movw TMP_SAVE0, r30
-       movw CTX_SAVE0, r24
-       movw MSG_SAVE0, r22
-       movw LEN_SAVE0, r20
-1:     
-       cpi LEN_SAVE1, 2
-       brmi 2f
-       movw r24, CTX_SAVE0
-       movw r22, MSG_SAVE0
-       rcall twister_big_nextBlock
-       adiw MSG_SAVE0, 8
-       subi LEN_SAVE1, 2
-       rjmp 1b
-2:
-       movw r18, LEN_SAVE0
-       lsr r19
-       ror r18
-       lsr r18
-       lsr r18
-       ldi r19, 63
-       movw r26, MSG_SAVE0
-       movw r30, TMP_SAVE0     
-       ldi r20, 0x80
-       sub r19, r18 /* r18: bytes to copy, r19: bytes to clear */
-       
-       ld r0, X+       
-3:
-       tst r18
-       breq 4f
-31:
-       st Z+, r0
-       ld r0, X+
-       dec r18
-       brne 31b
-4:     
-       mov r18, LEN_SAVE0
-       andi r18, 0x07
-       ldi r20, 0x80
-       breq 5f
-4:
-       lsr r20
-       dec r18
-       brne 4b
-       or r20, r0
-       rjmp 5f
-
-5:
-       st Z+, r20      
-       tst r19
-       breq 7f
-6:     
-       st Z+, r1
-       dec r19
-       brne 6b
-7:     
-       movw r24, CTX_SAVE0
-       movw r22, TMP_SAVE0
-       rcall twister_big_nextBlock
-       
-       ldi r19, 2
-       clr r18
-       
-       sub r18, LEN_SAVE0
-       sbc r19, LEN_SAVE1
-       movw r26, CTX_SAVE0
-       adiw r26, 63
-       adiw r26, 1+8
-       
-       ld r0, X
-       sub r0, r18
-       st X+, r0
-       ld r0, X
-       sbc r0, r19
-       st X+, r0
-       ld r0, X
-       sbc r0, r1
-       st X+, r0
-       ld r0, X
-       sbc r0, r1
-       st X+, r0
-       ld r0, X
-       sbc r0, r1
-       st X+, r0
-       ld r0, X
-       sbc r0, r1
-       st X+, r0
-       ld r0, X
-       sbc r0, r1
-       st X+, r0
-       ld r0, X
-       sbc r0, r1
-       st X+, r0
-       
-       sbiw r26, 8
-       movw r24, CTX_SAVE0
-       movw r22, r26
-       rcall twister_mini_round        
-
-       movw r24, CTX_SAVE0
-       movw r22, CTX_SAVE0
-       ldi r16, 64+8+8
-       add r22, r16
-       adc r23, r1
-       movw r30, r22
-       ldi r26, 8
-1:     
-       ld r12, Z+
-       ld r13, Z+
-       ld r16, Z+
-       ld r17, Z+
-       ld r18, Z+
-       ld r19, Z+
-       ld r20, Z+
-       ld r21, Z+
-       st -Z, r12
-       st -Z, r13
-       st -Z, r16
-       st -Z, r17
-       st -Z, r18
-       st -Z, r19
-       st -Z, r20
-       st -Z, r21
-       adiw r30, 8
-       dec r26
-       brne 1b
-       
-       movw r24, CTX_SAVE0
-       movw r22, CTX_SAVE0
-       ldi r26, 64+2*8
-       add r22, r26
-       adc r23, r1
-       rcall twister_small_nextBlock
-       
-       stack_free_large 64
-       pop r29
-       pop r28
-       pop_range 12, 17
-       ret
diff --git a/twister-big.c b/twister-big.c
deleted file mode 100644 (file)
index 1c0c56f..0000000
+++ /dev/null
@@ -1,238 +0,0 @@
-/* twister-big.c */
-/*
-    This file is part of the AVR-Crypto-Lib.
-    Copyright (C) 2008  Daniel Otte (daniel.otte@rub.de)
-
-    This program is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#include <stdint.h>
-#include <string.h>
-#include "memxor.h"
-#include "twister.h"
-#include "twister-big.h"
-
-/*********************************************************************/
-
-static
-void checksum_update(twister_big_ctx_t* ctx, uint8_t col){
-       uint8_t i, col2;
-       uint8_t carry = 0;
-       int sum = 0;
-       
-       col2 = (col+1)%8; 
-       
-       for( i=0; i<8; i++ ) 
-       {
-               sum =  (int) ctx->checksum[col2][7-i] 
-                    + (int) ctx->state.s[7-i][0] /* col or 0 ???*/ 
-                    + carry;
-               ctx->checksum[col][7-i] ^= (uint8_t)sum;
-               carry = sum>>8;
-
-       }
-}
-
-/*********************************************************************/
-
-void twister_big_init(twister_big_ctx_t* ctx, uint16_t hashsize_b){
-       memset(ctx->state.s,  0, 64);
-       memset(ctx->checksum, 0, 64);
-       ctx->state.counter=0xffffffffffffffffLL;
-       ctx->state.s[0][7] = hashsize_b>>8;
-       ctx->state.s[1][7] = hashsize_b&0xff;
-       ctx->state.length_counter_b = 0;
-}
-
-/*********************************************************************/
-
-void twister_big_nextBlock(twister_big_ctx_t* ctx, const void* msg){
-       uint8_t tmp[8][8];
-
-       /* 1st maxi round */
-       memcpy(tmp, ctx->state.s, 64);  
-       checksum_update(ctx, 0);
-       twister_mini_round(&(ctx->state), msg);
-       msg = (uint8_t*)msg + 8;
-
-       checksum_update(ctx, 1);
-       twister_mini_round(&(ctx->state), msg);
-       msg = (uint8_t*)msg + 8;
-       
-       checksum_update(ctx, 2);
-       twister_mini_round(&(ctx->state), msg);
-       msg = (uint8_t*)msg + 8;
-       memxor(ctx->state.s, tmp, 64);
-
-       /* 2nd maxi round */
-       memcpy(tmp, ctx->state.s, 64);  
-       checksum_update(ctx, 3);
-       twister_mini_round(&(ctx->state), msg);
-       msg = (uint8_t*)msg + 8;
-
-       twister_blank_round(&(ctx->state));
-       
-       checksum_update(ctx, 4);
-       twister_mini_round(&(ctx->state), msg);
-       msg = (uint8_t*)msg + 8;
-       memxor(ctx->state.s, tmp, 64);
-
-       /* 3rd maxi round */
-       memcpy(tmp, ctx->state.s, 64);  
-       checksum_update(ctx, 5);
-       twister_mini_round(&(ctx->state), msg);
-       msg = (uint8_t*)msg + 8;
-
-       checksum_update(ctx, 6);
-       twister_mini_round(&(ctx->state), msg);
-       msg = (uint8_t*)msg + 8;
-
-       checksum_update(ctx, 7);
-       twister_mini_round(&(ctx->state), msg);
-
-       twister_blank_round(&(ctx->state));     
-       memxor(ctx->state.s, tmp, 64);
-       ctx->state.length_counter_b += 512;
-}
-
-/*********************************************************************/
-
-void twister_inject_chksum(twister_big_ctx_t* ctx, uint8_t col){
-       *((uint64_t*)(&ctx->state.s[7][0])) ^= *((uint64_t*)(&ctx->checksum[col][0]));
-       twister_blank_round(&ctx->state);
-}
-
-/*********************************************************************/
-
-void twister_big_lastBlock(twister_big_ctx_t* ctx, const void* msg, uint16_t length_b){
-       uint8_t tmp[64];        
-       while(length_b>=512){
-               twister_big_nextBlock(ctx, msg);
-               msg = ((uint8_t*)msg)+64;
-               length_b -= 512;
-       }
-       memset(tmp, 0, 64);
-       memcpy(tmp, msg, (length_b+7)/8);
-       tmp[length_b/8] |= 0x80 >> (length_b&0x07);
-       twister_big_nextBlock(ctx, tmp);
-       ctx->state.length_counter_b -= 512 - length_b;
-       twister_mini_round(&(ctx->state), &(ctx->state.length_counter_b));
-
-       memcpy(tmp, ctx->state.s, 64);
-       twister_inject_chksum(ctx, 0);
-       twister_inject_chksum(ctx, 1);
-       twister_inject_chksum(ctx, 2);
-       memxor(ctx->state.s, tmp, 64);
-
-       memcpy(tmp, ctx->state.s, 64);
-       twister_inject_chksum(ctx, 3);
-       twister_inject_chksum(ctx, 4);
-       twister_inject_chksum(ctx, 5);
-       memxor(ctx->state.s, tmp, 64);
-
-       memcpy(tmp, ctx->state.s, 64);
-       twister_inject_chksum(ctx, 6);
-       twister_inject_chksum(ctx, 7);
-       twister_blank_round(&(ctx->state));
-       memxor(ctx->state.s, tmp, 64);
-
-}
-
-/*********************************************************************/
-
-void twister_big_ctx2hash(void* dest, twister_big_ctx_t* ctx, uint16_t hashsize_b){
-       twister_ctx2hash(dest, &(ctx->state), hashsize_b);
-}
-
-/*********************************************************************/
-/*********************************************************************/
-
-void twister384_init(twister384_ctx_t* ctx){
-       twister_big_init(ctx, 384);
-}
-
-/*********************************************************************/
-
-void twister384_nextBlock(twister384_ctx_t* ctx, const void* msg){
-       twister_big_nextBlock(ctx, msg);
-}
-
-/*********************************************************************/
-
-void twister384_lastBlock(twister384_ctx_t* ctx, const void* msg, uint16_t length_b){
-       twister_big_lastBlock(ctx, msg, length_b);
-}
-
-/*********************************************************************/
-
-void twister384_ctx2hash(void* dest, twister384_ctx_t* ctx){
-       twister_big_ctx2hash(dest, ctx, 384);
-}
-
-/*********************************************************************/
-
-void twister384(void* dest, const void* msg, uint32_t msg_length_b){
-       twister_big_ctx_t ctx;
-       twister_big_init(&ctx, 384);
-       while(msg_length_b >=512){
-               twister_big_nextBlock(&ctx, msg);
-               msg = (uint8_t*)msg + 512/8;
-               msg_length_b -= 512;
-       }
-       twister_big_lastBlock(&ctx, msg, msg_length_b);
-       twister_big_ctx2hash(dest, &ctx, 384);
-}
-
-/*********************************************************************/
-/*********************************************************************/
-
-
-void twister512_init(twister512_ctx_t* ctx){
-       twister_big_init(ctx, 512);
-}
-
-/*********************************************************************/
-
-void twister512_nextBlock(twister512_ctx_t* ctx, const void* msg){
-       twister_big_nextBlock(ctx, msg);
-}
-
-/*********************************************************************/
-
-void twister512_lastBlock(twister512_ctx_t* ctx, const void* msg, uint16_t length_b){
-       twister_big_lastBlock(ctx, msg, length_b);
-}
-
-/*********************************************************************/
-
-void twister512_ctx2hash(void* dest, twister512_ctx_t* ctx){
-       twister_big_ctx2hash(dest, ctx, 512);
-}
-
-/*********************************************************************/
-
-void twister512(void* dest, const void* msg, uint32_t msg_length_b){
-       twister_big_ctx_t ctx;
-       twister_big_init(&ctx, 512);
-       while(msg_length_b >=512){
-               twister_big_nextBlock(&ctx, msg);
-               msg = (uint8_t*)msg + 512/8;
-               msg_length_b -= 512;
-       }
-       twister_big_lastBlock(&ctx, msg, msg_length_b);
-       twister_big_ctx2hash(dest, &ctx, 512);
-}
-
-
-
diff --git a/twister-big.h b/twister-big.h
deleted file mode 100644 (file)
index b10c0f0..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-/* twister-big.h */
-
-#ifndef TWISTER_BIG_H_
-#define TWISTER_BIG_H_
-
-#include <stdint.h>
-#include "twister.h"
-
-typedef uint8_t twister384_hash_t[384/8];
-typedef uint8_t twister512_hash_t[512/8];
-
-typedef struct {
-       twister_state_t    state;
-       twister_checksum_t checksum;
-} twister_big_ctx_t;
-
-typedef twister_big_ctx_t twister384_ctx_t;
-typedef twister_big_ctx_t twister512_ctx_t;
-
-/*********************************************************************/
-
-void twister_big_nextBlock(twister_big_ctx_t* ctx, const void* msg);
-void twister_big_init(twister_big_ctx_t* ctx, uint16_t hashsize_b);
-void twister_big_lastBlock(twister_big_ctx_t* ctx, const void* msg, uint16_t length_b);
-void twister_big_ctx2hash(void* dest, twister_big_ctx_t* ctx, uint16_t hashsize_b);
-
-/*********************************************************************/
-
-void twister384_init(twister384_ctx_t* ctx);
-void twister384_nextBlock(twister384_ctx_t* ctx, const void* msg);
-void twister384_lastBlock(twister384_ctx_t* ctx, const void* msg, uint16_t length_b);
-void twister384_ctx2hash(void* dest, twister384_ctx_t* ctx);
-void twister384(void* dest, const void* msg, uint32_t msg_length_b);
-
-/*********************************************************************/
-
-void twister512_init(twister512_ctx_t* ctx);
-void twister512_nextBlock(twister512_ctx_t* ctx, const void* msg);
-void twister512_lastBlock(twister512_ctx_t* ctx, const void* msg, uint16_t length_b);
-void twister512_ctx2hash(void* dest, twister512_ctx_t* ctx);
-void twister512(void* dest, const void* msg, uint32_t msg_length_b);
-
-
-#endif /* TWISTER_BIG_H_ */
-
diff --git a/twister-large-asm.S b/twister-large-asm.S
new file mode 100644 (file)
index 0000000..be10546
--- /dev/null
@@ -0,0 +1,516 @@
+/* twister-large-asm.S */
+/*
+    This file is part of the AVR-Crypto-Lib.
+    Copyright (C) 2008  Daniel Otte (daniel.otte@rub.de)
+
+    This program is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+*/
+/**
+ * \file     twister-large-asm.S
+ * \email    daniel.otte@rub.de
+ * \author   Daniel Otte 
+ * \date     2008-12-27
+ * \license  GPLv3 or later
+ * 
+ */
+ #include "avr-asm-macros.S"
+
+/* void checksum_update(twister_large_ctx_t* ctx, uint8_t col) */
+/*
+ * param ctx: r24:r25
+ * param col: r22
+ */
+checksum_update:
+       push r16
+       push r28
+       push r29
+       lsl r22
+       lsl r22
+       lsl r22
+       mov r16, r22
+       movw r30, r24 /* X points to ctx->state.s */
+       
+       ldd r18, Z+7*8
+       ldd r19, Z+6*8
+       ldd r20, Z+5*8
+       ldd r21, Z+4*8
+       ldd r22, Z+3*8
+       ldd r23, Z+2*8
+       ldd r24, Z+1*8
+       ldd r25, Z+0*8
+       
+       adiw r30, 63
+       adiw r30, 1+3*8 /* Z points at ctx->checksum[0][8] */
+       movw r28, r30   /* Y points at ctx->checksum[0][8] */
+       andi r16, 63
+       add r30, r16   /* Z points at ctx->checksum[col][8]*/
+       adc r31, r1
+       ldi r26, 8
+       add r16, r26
+       andi r16, 63
+       add r28, r16
+       adc r29, r1    /* Y points at ctx->checksum[(col+1)%8][8]*/
+       
+       ld r0, -Y
+       add r18, r0
+       ld r0, -Z
+       eor r0, r18
+       st Z, r0
+       
+       ld r0, -Y
+       adc r19, r0
+       ld r0, -Z
+       eor r0, r19
+       st Z, r0
+       
+       ld r0, -Y
+       adc r20, r0
+       ld r0, -Z
+       eor r0, r20
+       st Z, r0
+       
+       ld r0, -Y
+       adc r21, r0
+       ld r0, -Z
+       eor r0, r21
+       st Z, r0
+       
+       ld r0, -Y
+       adc r22, r0
+       ld r0, -Z
+       eor r0, r22
+       st Z, r0
+       
+       ld r0, -Y
+       adc r23, r0
+       ld r0, -Z
+       eor r0, r23
+       st Z, r0
+       
+       ld r0, -Y
+       adc r24, r0
+       ld r0, -Z
+       eor r0, r24
+       st Z, r0
+       
+       ld r0, -Y
+       adc r25, r0
+       ld r0, -Z
+       eor r0, r25
+       st Z, r0
+       
+       pop r29
+       pop r28
+       pop r16
+       ret
+
+/*********************************************************************/
+/* void twister_large_init(twister_large_ctx_t* ctx, uint16_t hashsize_b)*/
+/* 
+ * param ctx:        r24:r25
+ * param hashsize_b: r22:r23
+ */
+.global twister384_init
+twister384_init:
+       ldi r22, lo8(384)
+       ldi r23, hi8(384)
+       rjmp twister_large_init
+       
+.global twister512_init
+twister512_init:
+       ldi r22, lo8(512)
+       ldi r23, hi8(512)
+       
+.global twister_large_init
+twister_large_init:
+       movw r30, r24
+       ldi r24, 64
+1:
+       st Z+, r1
+       dec r24
+       brne 1b
+
+       dec r1          
+       ldi r24, 8
+1:
+       st Z+, r1
+       dec r24
+       brne 1b
+
+       inc r1          
+       ldi r24, 8+64
+1:
+       st Z+, r1
+       dec r24
+       brne 1b
+
+       subi r30, lo8(1+8+8+8*7+64)
+       sbci r31, hi8(1+8+8+8*7+64)
+       st Z, r23
+       std Z+8, r22
+       ret
+
+/*********************************************************************/
+/* void twister_large_nextBlock(twister_state_t* ctx, void* msg) */   
+/*
+ * param ctx: r24:r25
+ * param msg: r22:r23
+ */
+CTX_SAVE0 = 14
+CTX_SAVE1 = 15
+TMP_SAVE0 = 12
+TMP_SAVE1 = 13
+MSG_SAVE0 = 28
+MSG_SAVE1 = 29
+.global twister_large_nextBlock
+.global twister384_nextBlock
+.global twister512_nextBlock
+
+twister384_nextBlock:
+twister512_nextBlock:
+twister_large_nextBlock:
+       push_range 12, 15
+       push r28
+       push r29
+       stack_alloc_large 64
+       adiw r30, 1
+       movw TMP_SAVE0, r30
+       movw CTX_SAVE0, r24
+       movw MSG_SAVE0, r22
+       movw r26, CTX_SAVE0
+       ldi r18, 64/8
+1:
+       ld r0, X+
+       st Z+, r0
+       ld r0, X+
+       st Z+, r0
+       ld r0, X+
+       st Z+, r0
+       ld r0, X+
+       st Z+, r0
+       ld r0, X+
+       st Z+, r0
+       ld r0, X+
+       st Z+, r0
+       ld r0, X+
+       st Z+, r0
+       ld r0, X+
+       st Z+, r0
+       dec r18
+       brne 1b
+       /* maxi round 1 */
+       movw r24, CTX_SAVE0 
+       ldi r22, 0
+       rcall checksum_update
+       movw r22, MSG_SAVE0
+       movw r24, CTX_SAVE0 
+       rcall twister_mini_round
+       
+       movw r24, CTX_SAVE0 
+       ldi r22, 1
+       rcall checksum_update
+       adiw MSG_SAVE0, 8
+       movw r22, MSG_SAVE0
+       movw r24, CTX_SAVE0 
+       rcall twister_mini_round
+       
+       movw r24, CTX_SAVE0 
+       ldi r22, 2
+       rcall checksum_update
+       adiw MSG_SAVE0, 8
+       movw r22, MSG_SAVE0
+       movw r24, CTX_SAVE0 
+       rcall twister_mini_round
+       
+       movw r30, TMP_SAVE0
+       movw r26, CTX_SAVE0
+       ldi r18, 64
+1:
+       ld r0, X
+       ld r23, Z
+       eor r0, r23
+       st X+, r0
+       st Z+, r0
+       dec r18
+       brne 1b
+       /* maxi round 2 */
+       movw r24, CTX_SAVE0 
+       ldi r22, 3
+       rcall checksum_update
+       adiw MSG_SAVE0, 8
+       movw r22, MSG_SAVE0
+       movw r24, CTX_SAVE0 
+       rcall twister_mini_round
+       
+       movw r24, CTX_SAVE0 
+       rcall twister_blank_round
+       
+       movw r24, CTX_SAVE0 
+       ldi r22, 4
+       rcall checksum_update
+       adiw MSG_SAVE0, 8
+       movw r22, MSG_SAVE0
+       movw r24, CTX_SAVE0 
+       rcall twister_mini_round
+
+       movw r30, TMP_SAVE0
+       movw r26, CTX_SAVE0
+       ldi r18, 64
+1:
+       ld r0, X
+       ld r23, Z
+       eor r0, r23
+       st X+, r0
+       st Z+, r0
+       dec r18
+       brne 1b
+       /* maxi round 3 */
+       movw r24, CTX_SAVE0 
+       ldi r22, 5
+       rcall checksum_update
+       adiw MSG_SAVE0, 8
+       movw r22, MSG_SAVE0
+       movw r24, CTX_SAVE0 
+       rcall twister_mini_round
+       
+       movw r24, CTX_SAVE0 
+       ldi r22, 6
+       rcall checksum_update
+       adiw MSG_SAVE0, 8
+       movw r22, MSG_SAVE0
+       movw r24, CTX_SAVE0 
+       rcall twister_mini_round
+       
+       movw r24, CTX_SAVE0 
+       ldi r22, 7
+       rcall checksum_update
+       adiw MSG_SAVE0, 8
+       movw r22, MSG_SAVE0
+       movw r24, CTX_SAVE0 
+       rcall twister_mini_round
+       
+       movw r24, CTX_SAVE0 
+       rcall twister_blank_round
+
+       movw r30, TMP_SAVE0
+       movw r26, CTX_SAVE0
+       ldi r18, 64
+1:
+       ld r0, X
+       ld r23, Z+
+       eor r0, r23
+       st X+, r0
+       dec r18
+       brne 1b
+       
+       adiw r26, 9
+       ldi r19, 2
+       ld r0, X
+       add r0, r19
+       st X+, r0
+               
+       ld r0, X
+       adc r0, r1
+       st X+, r0
+       ld r0, X
+       adc r0, r1
+       st X+, r0
+       ld r0, X
+       adc r0, r1
+       st X+, r0
+       ld r0, X
+       adc r0, r1
+       st X+, r0
+       ld r0, X
+       adc r0, r1
+       st X+, r0
+       ld r0, X
+       adc r0, r1
+       st X+, r0
+       ld r0, X
+       adc r0, r1
+       st X+, r0
+       
+       stack_free_large 64
+       pop r29
+       pop r28
+       pop_range 12, 15
+       ret
+       
+/*********************************************************************/
+/* void twister_large_lastBlock(twister_state_t* ctx, void* msg, uint16_t length_b) */   
+/*
+ * param ctx:      r24:r25
+ * param msg:      r22:r23
+ * param length_b: r20:r21
+ */
+TMP_SAVE0 = 12
+TMP_SAVE1 = 13
+CTX_SAVE0 = 14
+CTX_SAVE1 = 15
+LEN_SAVE0 = 16
+LEN_SAVE1 = 17
+MSG_SAVE0 = 28
+MSG_SAVE1 = 29
+.global twister_large_lastBlock
+.global twister384_lastBlock
+.global twister512_lastBlock
+
+twister384_lastBlock:
+twister512_lastBlock:
+twister_large_lastBlock:
+       push_range 12, 17
+       push r28
+       push r29
+       stack_alloc_large 64
+       adiw r30, 1
+       movw TMP_SAVE0, r30
+       movw CTX_SAVE0, r24
+       movw MSG_SAVE0, r22
+       movw LEN_SAVE0, r20
+1:     
+       cpi LEN_SAVE1, 2
+       brmi 2f
+       movw r24, CTX_SAVE0
+       movw r22, MSG_SAVE0
+       rcall twister_large_nextBlock
+       adiw MSG_SAVE0, 8
+       subi LEN_SAVE1, 2
+       rjmp 1b
+2:
+       movw r18, LEN_SAVE0
+       lsr r19
+       ror r18
+       lsr r18
+       lsr r18
+       ldi r19, 63
+       movw r26, MSG_SAVE0
+       movw r30, TMP_SAVE0     
+       ldi r20, 0x80
+       sub r19, r18 /* r18: bytes to copy, r19: bytes to clear */
+       
+       ld r0, X+       
+3:
+       tst r18
+       breq 4f
+31:
+       st Z+, r0
+       ld r0, X+
+       dec r18
+       brne 31b
+4:     
+       mov r18, LEN_SAVE0
+       andi r18, 0x07
+       ldi r20, 0x80
+       breq 5f
+4:
+       lsr r20
+       dec r18
+       brne 4b
+       or r20, r0
+       rjmp 5f
+
+5:
+       st Z+, r20      
+       tst r19
+       breq 7f
+6:     
+       st Z+, r1
+       dec r19
+       brne 6b
+7:     
+       movw r24, CTX_SAVE0
+       movw r22, TMP_SAVE0
+       rcall twister_large_nextBlock
+       
+       ldi r19, 2
+       clr r18
+       
+       sub r18, LEN_SAVE0
+       sbc r19, LEN_SAVE1
+       movw r26, CTX_SAVE0
+       adiw r26, 63
+       adiw r26, 1+8
+       
+       ld r0, X
+       sub r0, r18
+       st X+, r0
+       ld r0, X
+       sbc r0, r19
+       st X+, r0
+       ld r0, X
+       sbc r0, r1
+       st X+, r0
+       ld r0, X
+       sbc r0, r1
+       st X+, r0
+       ld r0, X
+       sbc r0, r1
+       st X+, r0
+       ld r0, X
+       sbc r0, r1
+       st X+, r0
+       ld r0, X
+       sbc r0, r1
+       st X+, r0
+       ld r0, X
+       sbc r0, r1
+       st X+, r0
+       
+       sbiw r26, 8
+       movw r24, CTX_SAVE0
+       movw r22, r26
+       rcall twister_mini_round        
+
+       movw r24, CTX_SAVE0
+       movw r22, CTX_SAVE0
+       ldi r16, 64+8+8
+       add r22, r16
+       adc r23, r1
+       movw r30, r22
+       ldi r26, 8
+1:     
+       ld r12, Z+
+       ld r13, Z+
+       ld r16, Z+
+       ld r17, Z+
+       ld r18, Z+
+       ld r19, Z+
+       ld r20, Z+
+       ld r21, Z+
+       st -Z, r12
+       st -Z, r13
+       st -Z, r16
+       st -Z, r17
+       st -Z, r18
+       st -Z, r19
+       st -Z, r20
+       st -Z, r21
+       adiw r30, 8
+       dec r26
+       brne 1b
+       
+       movw r24, CTX_SAVE0
+       movw r22, CTX_SAVE0
+       ldi r26, 64+2*8
+       add r22, r26
+       adc r23, r1
+       rcall twister_small_nextBlock
+       
+       stack_free_large 64
+       pop r29
+       pop r28
+       pop_range 12, 17
+       ret
diff --git a/twister-large.c b/twister-large.c
new file mode 100644 (file)
index 0000000..1775488
--- /dev/null
@@ -0,0 +1,238 @@
+/* twister-large.c */
+/*
+    This file is part of the AVR-Crypto-Lib.
+    Copyright (C) 2008  Daniel Otte (daniel.otte@rub.de)
+
+    This program is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include <stdint.h>
+#include <string.h>
+#include "memxor.h"
+#include "twister.h"
+#include "twister-large.h"
+
+/*********************************************************************/
+
+static
+void checksum_update(twister_large_ctx_t* ctx, uint8_t col){
+       uint8_t i, col2;
+       uint8_t carry = 0;
+       int sum = 0;
+       
+       col2 = (col+1)%8; 
+       
+       for( i=0; i<8; i++ ) 
+       {
+               sum =  (int) ctx->checksum[col2][7-i] 
+                    + (int) ctx->state.s[7-i][0] /* col or 0 ???*/ 
+                    + carry;
+               ctx->checksum[col][7-i] ^= (uint8_t)sum;
+               carry = sum>>8;
+
+       }
+}
+
+/*********************************************************************/
+
+void twister_large_init(twister_large_ctx_t* ctx, uint16_t hashsize_b){
+       memset(ctx->state.s,  0, 64);
+       memset(ctx->checksum, 0, 64);
+       ctx->state.counter=0xffffffffffffffffLL;
+       ctx->state.s[0][7] = hashsize_b>>8;
+       ctx->state.s[1][7] = hashsize_b&0xff;
+       ctx->state.length_counter_b = 0;
+}
+
+/*********************************************************************/
+
+void twister_large_nextBlock(twister_large_ctx_t* ctx, const void* msg){
+       uint8_t tmp[8][8];
+
+       /* 1st maxi round */
+       memcpy(tmp, ctx->state.s, 64);  
+       checksum_update(ctx, 0);
+       twister_mini_round(&(ctx->state), msg);
+       msg = (uint8_t*)msg + 8;
+
+       checksum_update(ctx, 1);
+       twister_mini_round(&(ctx->state), msg);
+       msg = (uint8_t*)msg + 8;
+       
+       checksum_update(ctx, 2);
+       twister_mini_round(&(ctx->state), msg);
+       msg = (uint8_t*)msg + 8;
+       memxor(ctx->state.s, tmp, 64);
+
+       /* 2nd maxi round */
+       memcpy(tmp, ctx->state.s, 64);  
+       checksum_update(ctx, 3);
+       twister_mini_round(&(ctx->state), msg);
+       msg = (uint8_t*)msg + 8;
+
+       twister_blank_round(&(ctx->state));
+       
+       checksum_update(ctx, 4);
+       twister_mini_round(&(ctx->state), msg);
+       msg = (uint8_t*)msg + 8;
+       memxor(ctx->state.s, tmp, 64);
+
+       /* 3rd maxi round */
+       memcpy(tmp, ctx->state.s, 64);  
+       checksum_update(ctx, 5);
+       twister_mini_round(&(ctx->state), msg);
+       msg = (uint8_t*)msg + 8;
+
+       checksum_update(ctx, 6);
+       twister_mini_round(&(ctx->state), msg);
+       msg = (uint8_t*)msg + 8;
+
+       checksum_update(ctx, 7);
+       twister_mini_round(&(ctx->state), msg);
+
+       twister_blank_round(&(ctx->state));     
+       memxor(ctx->state.s, tmp, 64);
+       ctx->state.length_counter_b += 512;
+}
+
+/*********************************************************************/
+
+void twister_inject_chksum(twister_large_ctx_t* ctx, uint8_t col){
+       *((uint64_t*)(&ctx->state.s[7][0])) ^= *((uint64_t*)(&ctx->checksum[col][0]));
+       twister_blank_round(&ctx->state);
+}
+
+/*********************************************************************/
+
+void twister_large_lastBlock(twister_large_ctx_t* ctx, const void* msg, uint16_t length_b){
+       uint8_t tmp[64];        
+       while(length_b>=512){
+               twister_large_nextBlock(ctx, msg);
+               msg = ((uint8_t*)msg)+64;
+               length_b -= 512;
+       }
+       memset(tmp, 0, 64);
+       memcpy(tmp, msg, (length_b+7)/8);
+       tmp[length_b/8] |= 0x80 >> (length_b&0x07);
+       twister_large_nextBlock(ctx, tmp);
+       ctx->state.length_counter_b -= 512 - length_b;
+       twister_mini_round(&(ctx->state), &(ctx->state.length_counter_b));
+
+       memcpy(tmp, ctx->state.s, 64);
+       twister_inject_chksum(ctx, 0);
+       twister_inject_chksum(ctx, 1);
+       twister_inject_chksum(ctx, 2);
+       memxor(ctx->state.s, tmp, 64);
+
+       memcpy(tmp, ctx->state.s, 64);
+       twister_inject_chksum(ctx, 3);
+       twister_inject_chksum(ctx, 4);
+       twister_inject_chksum(ctx, 5);
+       memxor(ctx->state.s, tmp, 64);
+
+       memcpy(tmp, ctx->state.s, 64);
+       twister_inject_chksum(ctx, 6);
+       twister_inject_chksum(ctx, 7);
+       twister_blank_round(&(ctx->state));
+       memxor(ctx->state.s, tmp, 64);
+
+}
+
+/*********************************************************************/
+
+void twister_large_ctx2hash(void* dest, twister_large_ctx_t* ctx, uint16_t hashsize_b){
+       twister_ctx2hash(dest, &(ctx->state), hashsize_b);
+}
+
+/*********************************************************************/
+/*********************************************************************/
+
+void twister384_init(twister384_ctx_t* ctx){
+       twister_large_init(ctx, 384);
+}
+
+/*********************************************************************/
+
+void twister384_nextBlock(twister384_ctx_t* ctx, const void* msg){
+       twister_large_nextBlock(ctx, msg);
+}
+
+/*********************************************************************/
+
+void twister384_lastBlock(twister384_ctx_t* ctx, const void* msg, uint16_t length_b){
+       twister_large_lastBlock(ctx, msg, length_b);
+}
+
+/*********************************************************************/
+
+void twister384_ctx2hash(void* dest, twister384_ctx_t* ctx){
+       twister_large_ctx2hash(dest, ctx, 384);
+}
+
+/*********************************************************************/
+
+void twister384(void* dest, const void* msg, uint32_t msg_length_b){
+       twister_large_ctx_t ctx;
+       twister_large_init(&ctx, 384);
+       while(msg_length_b >=512){
+               twister_large_nextBlock(&ctx, msg);
+               msg = (uint8_t*)msg + 512/8;
+               msg_length_b -= 512;
+       }
+       twister_large_lastBlock(&ctx, msg, msg_length_b);
+       twister_large_ctx2hash(dest, &ctx, 384);
+}
+
+/*********************************************************************/
+/*********************************************************************/
+
+
+void twister512_init(twister512_ctx_t* ctx){
+       twister_large_init(ctx, 512);
+}
+
+/*********************************************************************/
+
+void twister512_nextBlock(twister512_ctx_t* ctx, const void* msg){
+       twister_large_nextBlock(ctx, msg);
+}
+
+/*********************************************************************/
+
+void twister512_lastBlock(twister512_ctx_t* ctx, const void* msg, uint16_t length_b){
+       twister_large_lastBlock(ctx, msg, length_b);
+}
+
+/*********************************************************************/
+
+void twister512_ctx2hash(void* dest, twister512_ctx_t* ctx){
+       twister_large_ctx2hash(dest, ctx, 512);
+}
+
+/*********************************************************************/
+
+void twister512(void* dest, const void* msg, uint32_t msg_length_b){
+       twister_large_ctx_t ctx;
+       twister_large_init(&ctx, 512);
+       while(msg_length_b >=512){
+               twister_large_nextBlock(&ctx, msg);
+               msg = (uint8_t*)msg + 512/8;
+               msg_length_b -= 512;
+       }
+       twister_large_lastBlock(&ctx, msg, msg_length_b);
+       twister_large_ctx2hash(dest, &ctx, 512);
+}
+
+
+
diff --git a/twister-large.h b/twister-large.h
new file mode 100644 (file)
index 0000000..45de18b
--- /dev/null
@@ -0,0 +1,45 @@
+/* twister-large.h */
+
+#ifndef TWISTER_large_H_
+#define TWISTER_large_H_
+
+#include <stdint.h>
+#include "twister.h"
+
+typedef uint8_t twister384_hash_t[384/8];
+typedef uint8_t twister512_hash_t[512/8];
+
+typedef struct {
+       twister_state_t    state;
+       twister_checksum_t checksum;
+} twister_large_ctx_t;
+
+typedef twister_large_ctx_t twister384_ctx_t;
+typedef twister_large_ctx_t twister512_ctx_t;
+
+/*********************************************************************/
+
+void twister_large_nextBlock(twister_large_ctx_t* ctx, const void* msg);
+void twister_large_init(twister_large_ctx_t* ctx, uint16_t hashsize_b);
+void twister_large_lastBlock(twister_large_ctx_t* ctx, const void* msg, uint16_t length_b);
+void twister_large_ctx2hash(void* dest, twister_large_ctx_t* ctx, uint16_t hashsize_b);
+
+/*********************************************************************/
+
+void twister384_init(twister384_ctx_t* ctx);
+void twister384_nextBlock(twister384_ctx_t* ctx, const void* msg);
+void twister384_lastBlock(twister384_ctx_t* ctx, const void* msg, uint16_t length_b);
+void twister384_ctx2hash(void* dest, twister384_ctx_t* ctx);
+void twister384(void* dest, const void* msg, uint32_t msg_length_b);
+
+/*********************************************************************/
+
+void twister512_init(twister512_ctx_t* ctx);
+void twister512_nextBlock(twister512_ctx_t* ctx, const void* msg);
+void twister512_lastBlock(twister512_ctx_t* ctx, const void* msg, uint16_t length_b);
+void twister512_ctx2hash(void* dest, twister512_ctx_t* ctx);
+void twister512(void* dest, const void* msg, uint32_t msg_length_b);
+
+
+#endif /* TWISTER_large_H_ */
+
index e58624327dc586750e3b6cec1d1f0d31b73f1375..6a15fc567e3359020d2e44485896127e9f7e6b44 100644 (file)
@@ -60,7 +60,7 @@ twister384:
        movw r24, CTX_SAVE0
        ldi r22, lo8(384)
        ldi r23, hi8(384)
-       rcall twister_big_init
+       rcall twister_large_init
 1:
        tst MSG_LEN3
        brne 2f
@@ -71,7 +71,7 @@ twister384:
 2:
        movw r24, CTX_SAVE0
        movw r22, MSG_SAVE0
-       rcall twister_big_nextBlock
+       rcall twister_large_nextBlock
        adiw MSG_SAVE0, 63
        adiw MSG_SAVE0,  1      
        subi MSG_LEN1, 2
@@ -82,13 +82,13 @@ twister384:
        movw r24, CTX_SAVE0
        movw r22, MSG_SAVE0
        movw r20, MSG_LEN0
-       rcall twister_big_lastBlock
+       rcall twister_large_lastBlock
        
        movw r24, DST_SAVE0
        movw r22, CTX_SAVE0
        ldi r20, lo8(384)
        ldi r21, hi8(384)
-       rcall twister_big_ctx2hash
+       rcall twister_large_ctx2hash
 
        stack_free_large2 64+2*8+64
        pop r29
index f2f701f7db08550d4742cd4067a33354dad81b23..0aece4d7d7e2787042311e36e138d4c926b77c07 100644 (file)
@@ -60,7 +60,7 @@ twister512:
        movw r24, CTX_SAVE0
        ldi r22, lo8(512)
        ldi r23, hi8(512)
-       rcall twister_big_init
+       rcall twister_large_init
 1:
        tst MSG_LEN3
        brne 2f
@@ -71,7 +71,7 @@ twister512:
 2:
        movw r24, CTX_SAVE0
        movw r22, MSG_SAVE0
-       rcall twister_big_nextBlock
+       rcall twister_large_nextBlock
        adiw MSG_SAVE0, 63
        adiw MSG_SAVE0,  1      
        subi MSG_LEN1, 2
@@ -82,13 +82,13 @@ twister512:
        movw r24, CTX_SAVE0
        movw r22, MSG_SAVE0
        movw r20, MSG_LEN0
-       rcall twister_big_lastBlock
+       rcall twister_large_lastBlock
        
        movw r24, DST_SAVE0
        movw r22, CTX_SAVE0
        ldi r20, lo8(512)
        ldi r21, hi8(512)
-       rcall twister_big_ctx2hash
+       rcall twister_large_ctx2hash
 
        stack_free_large2 64+2*8+64
        pop r29