3 This file is part of the AVR-Crypto-Lib.
4 Copyright (C) 2008 Daniel Otte (daniel.otte@rub.de)
6 This program is free software: you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation, either version 3 of the License, or
9 (at your option) any later version.
11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
16 You should have received a copy of the GNU General Public License
17 along with this program. If not, see <http://www.gnu.org/licenses/>.
24 * License: GPLv3 or later
25 * Description: Implementation of the ARCFOUR (RC4 compatible) stream cipher algorithm.
30 #include "avr-asm-macros.S"
32 /* +---+---+---------------------+
33 * | i | j | ......<256>........ |
34 * +---+---+---------------------+
40 * this function initialises the context
41 * param1: 16-bit pointer to the key
43 * param2: 8-bit integer indicating keylength in bits
45 * param3: 16-bit pointer to a ctx struct
50 movw r26, r20 /* X points to ctx */
51 movw r30, r24 /* Z points to key */
53 st X+, r1 /* X points to S */
54 movw r20, r26 /* store pointer to S in r21:r20 */
67 add r22, r30 /* r18 is keyindex counter */
75 movw r28, r20 /* load pointer to S in Y */
91 uint8_t arcfour_gen(arcfour_ctx_t *c){
96 c->s[c->j] = c->s[c->i];
98 return c->s[(c->s[c->j] + c->s[c->i]) & 0xff];
104 ; this function generates a keystream byte
105 ; param1: 16-bit pointer to a ctx struct
119 st Z+, r19 /* i,j loaded&saved; X->S[i]; Z->S[0]; r20=S[i] */
122 ld r21, Z /* X->S[i]; Z->S[j]; r20=S[i]; r21=S[j] */
127 movw r26, r24 /* X and Z point to S */