X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;f=lib%2Farcfour.c;h=7df321ba0a5dc179a953b10d69139ec0de77eafc;hb=4662b82a3d9015359bb7a75bc95ecf2f57f841e1;hp=61b851127c9d6aa7382d338c4edf8cfabb163762;hpb=13083d5caa5989dab4238adce19a2fa55efc4201;p=gnulib.git diff --git a/lib/arcfour.c b/lib/arcfour.c index 61b851127..7df321ba0 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-2011 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 @@ -26,31 +26,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 +72,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; } }