X-Git-Url: https://git.cryptolib.org/?a=blobdiff_plain;ds=sidebyside;f=twister%2Ftwister224.S;fp=twister%2Ftwister224.S;h=e97ed5540b2c465d7133d1bca0be3f0411518d42;hb=4f50c75ee5a6cc88bf7ea71957ed509e298e6c25;hp=0000000000000000000000000000000000000000;hpb=7701e318e4e2bac7f84dbf6e368f1501814948fc;p=avr-crypto-lib.git diff --git a/twister/twister224.S b/twister/twister224.S new file mode 100644 index 0000000..e97ed55 --- /dev/null +++ b/twister/twister224.S @@ -0,0 +1,98 @@ +/* twister224.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 . +*/ +/** + * \file twister224.S + * \email daniel.otte@rub.de + * \author Daniel Otte + * \date 2008-12-28 + * \license GPLv3 or later + * + */ + +#include "avr-asm-macros.S" +/*********************************************************************/ +/* void twister224(void* dest, void* msg, uint32_t msg_length_b) */ +/* + * param dest: r24:r25 + * param msg: r22:r23 + * param msg_length_b: r18:r21 + */ + +CTX_SAVE0 = 10 +CTX_SAVE1 = 11 +DST_SAVE0 = 14 +DST_SAVE1 = 15 +MSG_LEN0 = 16 +MSG_LEN1 = 17 +MSG_LEN2 = 12 +MSG_LEN3 = 13 +MSG_SAVE0 = 28 +MSG_SAVE1 = 29 + +.global twister224 +twister224: + push_range 10, 17 + push r28 + push r29 + stack_alloc_large 64+2*8 + adiw r30, 1 + movw CTX_SAVE0, r30 + movw DST_SAVE0, r24 + movw MSG_SAVE0, r22 + movw MSG_LEN0, r18 + movw MSG_LEN2, r20 + movw r24, CTX_SAVE0 + ldi r22, lo8(224) + ldi r23, hi8(224) + rcall twister_small_init +1: + tst MSG_LEN3 + brne 2f + tst MSG_LEN2 + brne 2f + cpi MSG_LEN1, 2 + brmi 3f +2: + movw r24, CTX_SAVE0 + movw r22, MSG_SAVE0 + rcall twister_small_nextBlock + adiw MSG_SAVE0, 63 + adiw MSG_SAVE0, 1 + subi MSG_LEN1, 2 + sbc MSG_LEN2, r1 + sbc MSG_LEN3, r1 + rjmp 1b +3: + movw r24, CTX_SAVE0 + movw r22, MSG_SAVE0 + movw r20, MSG_LEN0 + rcall twister_small_lastBlock + + movw r24, DST_SAVE0 + movw r22, CTX_SAVE0 + ldi r20, lo8(224) + ldi r21, hi8(224) + rcall twister_small_ctx2hash + + stack_free_large 64+2*8 + pop r29 + pop r28 + pop_range 10, 17 + ret +