X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;ds=sidebyside;f=lib%2Farcfour.c;h=66efb58669d71e8ccf106d448f30da2857234d19;hb=66f5e6513c46dffcb40b216e3709b84ab5fbc392;hp=61b851127c9d6aa7382d338c4edf8cfabb163762;hpb=13083d5caa5989dab4238adce19a2fa55efc4201;p=gnulib.git diff --git a/lib/arcfour.c b/lib/arcfour.c index 61b851127..66efb5866 100644 --- a/lib/arcfour.c +++ b/lib/arcfour.c @@ -1,5 +1,5 @@ /* arcfour.c --- The arcfour stream cipher - * Copyright (C) 2000, 2001, 2002, 2003, 2005 Free Software Foundation, Inc. + * Copyright (C) 2000-2003, 2005-2006, 2009-2012 Free Software Foundation, Inc. * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published @@ -12,9 +12,7 @@ * General Public License for more details. * * You should have received a copy of the GNU General Public License - * along with this file; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - * 02110-1301, USA. + * along with this file; if not, see . * */ @@ -26,31 +24,29 @@ * ISBN 0-471-11709-9. Pages 397 ff. */ -#ifdef HAVE_CONFIG_H -# include -#endif +#include #include "arcfour.h" void arcfour_stream (arcfour_context * context, const char *inbuf, char *outbuf, - size_t length) + size_t length) { - size_t i = context->idx_i; - size_t j = context->idx_j; + uint8_t i = context->idx_i; + uint8_t j = context->idx_j; char *sbox = context->sbox; for (; length > 0; length--) { char t; - i = (i + 1) % ARCFOUR_SBOX_SIZE; - j = (j + sbox[i]) % ARCFOUR_SBOX_SIZE; + i++; + j += sbox[i]; t = sbox[i]; sbox[i] = sbox[j]; sbox[j] = t; *outbuf++ = (*inbuf++ - ^ sbox[(0U + sbox[i] + sbox[j]) % ARCFOUR_SBOX_SIZE]); + ^ sbox[(0U + sbox[i] + sbox[j]) % ARCFOUR_SBOX_SIZE]); } context->idx_i = i; @@ -74,6 +70,6 @@ arcfour_setkey (arcfour_context * context, const char *key, size_t keylen) sbox[i] = sbox[j]; sbox[j] = t; if (++k == keylen) - k = 0; + k = 0; } }