2 * Copyright 2006 Mike McCormack
4 * based on arc4.cpp - written and placed in the public domain by Wei Dai
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
11 * This library 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 GNU
14 * Lesser General Public License for more details.
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this library; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
21 /* http://cryptopp.sourceforge.net/docs/ref521/arc4_8cpp-source.html */
25 void rc4_init(RC4_CONTEXT
*a4i
, const unsigned char *key
, unsigned int keyLen
)
27 unsigned int keyIndex
= 0, stateIndex
= 0;
38 stateIndex
+= key
[keyIndex
] + a
;
40 a4i
->state
[i
] = a4i
->state
[stateIndex
];
41 a4i
->state
[stateIndex
] = a
;
42 if (++keyIndex
>= keyLen
)
47 void rc4_crypt(RC4_CONTEXT
*a4i
, unsigned char *inoutString
, unsigned int length
)
49 unsigned char *const s
=a4i
->state
;
50 unsigned int x
= a4i
->x
;
51 unsigned int y
= a4i
->y
;
62 *inoutString
++ ^= s
[(a
+b
) & 0xff];