X-Git-Url: https://git.cryptolib.org/?a=blobdiff_plain;f=arcfour-asm.S;fp=arcfour-asm.S;h=0000000000000000000000000000000000000000;hb=d32eba56ce10ea6b9eff123b50d9842673b38f2b;hp=1ef8218ce971a608ffaf096959dc40fb63141804;hpb=8f855d283a31a468ea014774c4723a8b77b81644;p=avr-crypto-lib.git diff --git a/arcfour-asm.S b/arcfour-asm.S deleted file mode 100644 index 1ef8218..0000000 --- a/arcfour-asm.S +++ /dev/null @@ -1,133 +0,0 @@ -/* arcfour-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 . -*/ - -/* - * File: arcfour-asm.S - * Author: Daniel Otte - * Date: 2006-07-06 - * License: GPLv3 or later - * Description: Implementation of the ARCFOUR (RC4 compatible) stream cipher algorithm. - * - */ - -#include -#include "avr-asm-macros.S" - - /* +---+---+---------------------+ - * | i | j | ......<256>........ | - * +---+---+---------------------+ - */ - -.global arcfour_init -/* - *== arcfour_init == - * this function initialises the context - * param1: 16-bit pointer to the key - * given in r24:r25 - * param2: 8-bit integer indicating keylength in byte - * given in r22 - * param3: 16-bit pointer to a ctx struct - * given in r20:r21 - */ -arcfour_init: - push_ r28, r29 - movw r26, r20 /* X points to ctx */ - movw r30, r24 /* Z points to key */ - st X+, r1 - st X+, r1 /* X points to S */ - movw r20, r26 /* store pointer to S in r21:r20 */ - -1: - st X+, r1 - inc r1 - brne 1b - - movw r26, r20 - add r22, r30 /* r18 is keyindex counter */ - clr r0 - clr r19 -2: - ld r23, X - ld r18, Z+ - add r19, r18 - add r19, r23 - movw r28, r20 /* load pointer to S in Y */ - add r28, r19 - adc r29, r1 - ld r18, Y - st Y, r23 - st X+, r18 - cp r30, r22 - brne 3f - movw r30, r24 -3: - inc r0 - brne 2b - pop_ r29, r28 - ret - -/* -uint8_t arcfour_gen(arcfour_ctx_t *c){ - uint8_t t; - c->i++; - c->j += c->s[c->i]; - t = c->s[c->j]; - c->s[c->j] = c->s[c->i]; - c->s[c->i] = t; - return c->s[(c->s[c->j] + c->s[c->i]) & 0xff]; -} -*/ -.global arcfour_gen - -;== arcfour_gen == -; this function initialises the context -; param1: 16-bit pointer to a ctx struct -; given in r25,r24 - -arcfour_gen: - movw r26, r24 - ld r18, X - inc r18 - st X+, r18 - movw r30, r26 - ld r19, X+ - add r26, r18 - adc r27, r1 - ld r20, X - add r19, r20 - st Z+, r19 /* i,j loaded&saved; X->S[i]; Z->S[0]; r20=S[i] */ - add r30, r19 - adc r31, r1 - ld r21, Z /* X->S[i]; Z->S[j]; r20=S[i]; r21=S[j]*/ - st Z, r20 - st X, r21 - add r20, r21 - adiw r24, 2 - movw r26, r24 /* X and Z point to S */ - add r26, r20 - adc r27, r1 - ld r24, X - clr r25 - ret - - - - - -