]> git.cryptolib.org Git - avr-crypto-lib.git/blobdiff - ubi256_asm.S
new makefile and modified build process
[avr-crypto-lib.git] / ubi256_asm.S
diff --git a/ubi256_asm.S b/ubi256_asm.S
deleted file mode 100644 (file)
index e5e6f9c..0000000
+++ /dev/null
@@ -1,327 +0,0 @@
-/* ubi256_asm.S */
-/*
-    This file is part of the AVR-Crypto-Lib.
-    Copyright (C) 2009  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/>.
-*/
-/*
- * \author  Daniel Otte
- * \email   daniel.otte@rub.de
- * \date    2009-03-16
- * \license GPLv3 or later
- */ 
-
-#include "avr-asm-macros.S"
-
-/******************************************************************************/
-/*
-void ubi256_init(ubi256_ctx_t* ctx, const void* g, uint8_t type){
-       memset(ctx->tweak, 0, 15);
-       ctx->tweak[15] = 0x40+type;
-       memcpy(ctx->g, g, 32);
-}
-*/
-/*
- * param ctx:  r24:r25
- * param g:    r22:r23
- * param type: r20
- */
-.global ubi256_init
-ubi256_init:
-       movw r26, r24
-       ldi r21, 15
-1:     st X+, r1
-       dec r21
-       brne 1b
-       ori r20, 0x40
-       st X+, r20
-       ldi r21, 32
-       movw r30, r22
-2:  ld r20, Z+
-       st X+, r20
-       dec r21
-       brne 2b
-       ret     
-
-/******************************************************************************/
-/*
-void ubi256_ctx2hash(void* dest, const ubi256_ctx_t* ctx){
-       memcpy(dest, ctx->g, UBI256_BLOCKSIZE_B);
-}
-*/
-/*
- * param dest: r24:r24
- * param ctx:  r22:r23
- */
-.global ubi256_ctx2hash
-ubi256_ctx2hash:
-       movw r26, r24
-       movw r30, r22
-       adiw r30, 16
-       ldi r22, 32
-1:     ld r23, Z+
-       st X+, r23
-       dec r22
-       brne 1b
-       ret
-
-/******************************************************************************/
-/*
-void ubi256_nextBlock(ubi256_ctx_t* ctx, const void* block){
-       threefish256_ctx_t tfctx;
-       ((uint64_t*)(ctx->tweak))[0] += UBI256_BLOCKSIZE_B;
-       threefish256_init(ctx->g, ctx->tweak, &tfctx);
-       memcpy(ctx->g, block, UBI256_BLOCKSIZE_B);
-       threefish256_enc(ctx->g, &tfctx);
-       memxor(ctx->g, block, UBI256_BLOCKSIZE_B);
-       ctx->tweak[15] &= (uint8_t)~0x40;
-} 
-*/
-/*
- * param ctx:   r24:r25
- * param block: r22:r23
- */
-CTX0   = 2
-CTX1   = 3
-BLOCK0 = 4
-BLOCK1 = 5
-TFCTX0 = 6
-TFCTX1 = 7 
-.global ubi256_nextBlock
-ubi256_nextBlock:
-       stack_alloc_large 64
-       push_range 2, 7
-       adiw r30, 1 /* Z points to tfctx */
-       movw TFCTX0, r30
-       movw CTX0, r24
-       movw BLOCK0, r22
-       movw r26, r24
-/* add BLOCKSIZE_B (32) to tweak */
-       ldi r25, 32
-       ld r24, X
-       add r24, r25
-       st X+, r24
-       ldi r25, 11
-1:     ld r24, X 
-       adc r24, r1
-       st X+, r24
-       dec r25
-       brne 1b
-/* call threefish256_init */   
-       movw r24, CTX0
-       adiw r24, 16
-       movw r22, CTX0
-       movw CTX0, r24  /* CTX points to ctx->g */
-       movw r20, TFCTX0
-       rcall threefish256_init
-       /* copy block to ctx->g */      
-       movw r26, CTX0
-       movw r30, BLOCK0
-       ldi r25, 32
-1:     ld r24, Z+
-       st X+, r24
-       dec r25
-       brne 1b
-/* call threefish256_enc */    
-       movw r24, CTX0
-       movw r22, TFCTX0
-       rcall threefish256_enc
-/* xor block into ctx->g */    
-       movw r26, BLOCK0
-       movw r30, CTX0
-       ldi r25, 32
-1:     ld r24, X+
-       ld r23, Z
-       eor r23, r24
-       st Z+, r23      
-       dec r25
-       brne 1b
-/* clear 'first' bit in tweak */
-       sbiw r30, 33    
-       ld r24, Z
-       andi r24, ~0x40
-       st Z, r24
-exit:
-       pop_range 2, 7
-       stack_free_large 64
-       ret
-
-/******************************************************************************/
-/*
-void ubi256_lastBlock(ubi256_ctx_t* ctx, const void* block, uint16_t length_b){
-       threefish256_ctx_t tfctx;
-       while(length_b>UBI256_BLOCKSIZE){
-               ubi256_nextBlock(ctx, block);
-               block = (uint8_t*)block + UBI256_BLOCKSIZE_B;
-               length_b -= UBI256_BLOCKSIZE;
-       }
-       ctx->tweak[15] |= 0x80;
-       ((uint64_t*)(ctx->tweak))[0] += (length_b+7)/8;
-       if(length_b & 0x07){
-               ctx->tweak[14] |= 0x80;
-       }
-       threefish256_init(ctx->g, ctx->tweak, &tfctx);
-       memset(ctx->g, 0, UBI256_BLOCKSIZE_B);
-       memcpy(ctx->g, block, (length_b+7)/8);
-       if(length_b & 0x07){
-               ctx->g[((length_b+7)/8)-1] |= 0x80>>(length_b&7);
-               ctx->g[((length_b+7)/8)-1] &= ~((0x80>>(length_b&7))-1);
-       }
-       threefish256_enc(ctx->g, &tfctx);
-       memxor(ctx->g, block, (length_b+7)/8);
-       if(length_b & 0x07){
-               ctx->g[((length_b+7)/8)-1] ^= 0x80>>(length_b&7);
-       }
-} 
-*/
-/*
- * param ctx:     r24:r25
- * param block:   r22:r23
- * param ength_b: r20:r21
- */
-MASK_B  =  8 
-LEN_B   =  9
-TFCTX0  = 10
-TFCTX1  = 11
-CTX0    = 12
-CTX1    = 13
-BLOCK0  = 14
-BLOCK1  = 15
-LENGTH0 = 16
-LENGTH1 = 17
-.global ubi256_lastBlock
-ubi256_lastBlock:
-/* run nextBlock for preceding blocks*/
-       push_range 8, 17
-       movw CTX0, r24
-       movw BLOCK0, r22
-       movw LENGTH0, r20
-1:     cpi LENGTH1, 2
-       brlo 2f
-       movw r24, CTX0
-       movw r22, BLOCK0
-       rcall ubi256_nextBlock
-       ldi r25, 32
-       add BLOCK0, r25
-       adc BLOCK1, r1
-       dec LENGTH1
-       rjmp 1b
-2:     tst LENGTH1
-       breq 3f
-       tst LENGTH0
-       breq 3f
-       movw r24, CTX0
-       movw r22, BLOCK0
-       rcall ubi256_nextBlock
-       ldi r25, 32
-       add BLOCK0, r25
-       adc BLOCK1, r1
-       dec LENGTH1
-3:     /* now the real fun */
-    stack_alloc_large 64
-       adiw r30, 1
-       movw TFCTX0, r30
-       /* calculate LEN_B */
-       movw r24, LENGTH0
-       adiw r24, 7
-       lsr r25
-       ror r24
-       lsr r24
-       lsr r24
-       mov LEN_B, r24
-       /* add length to tweak */
-       movw r30, CTX0
-       ld r24, Z
-       add r24, LEN_B
-       st Z+, r24
-       ldi r25, 11
-1:     ld r24, Z
-       adc r24, r1
-       st Z+, r24
-       dec r25
-       brne 1b
-       /* set 'final' bit*/
-       movw r30, CTX0
-       ldd r24, Z+15
-       ori r24, 0x80
-       std Z+15, r24
-       /* store in T if we do bit processing and set 'BitPad' bit*/
-       clr MASK_B
-       mov r24, LENGTH0
-       andi r24, 0x07
-       tst r24
-       breq 4f
-       ldd r25, Z+14
-       ori r25, 0x80
-       std Z+14, r25
-       ldi r25, 0x80
-       mov MASK_B, r25
-1:     lsr MASK_B
-       dec r24
-       brne 1b
-4:  /* call threefish256_init*/
-       movw r24, CTX0
-       adiw r24, 16
-       movw r22, CTX0
-       movw CTX0, r24 /* CTX points at ctx->g */
-       movw r20, TFCTX0
-       rcall threefish256_init
-       /* copy block to ctx->g */
-       movw r26, BLOCK0
-       movw r30, CTX0
-       mov r24, LEN_B
-       ldi r25, 32
-       sub r25, LEN_B
-       tst r24
-1:     breq 2f
-       ld r22, X+
-       st Z+, r22
-       dec r24 
-       rjmp 1b
-2:     tst MASK_B
-       breq 29f
-       or r22, MASK_B
-       st -Z, r22
-       adiw r30, 1
-29:    tst r25
-3:     breq 4f
-       st Z+, r1
-       dec r25
-       rjmp 3b
-4: /* call threefish256_enc */
-       movw r24, CTX0
-       movw r22, TFCTX0
-       rcall threefish256_enc
-   /* xor block into ctx->g */
-       movw r30, CTX0
-       movw r26, BLOCK0
-       tst LEN_B
-5:     breq 6f
-       ld r22, X+
-       ld r23, Z
-       eor r23, r22
-       st Z+, r23
-       dec LEN_B
-       rjmp 5b         
-6:     tst MASK_B
-       breq 7f
-       eor r23, MASK_B
-       st -Z, r23
-       
-7:     stack_free_large 64
-       pop_range 8, 17
-       ret
-
-