4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation; either version 2 of the License, or
7 * (at your option) any later version.
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
14 * You should have received a copy of the GNU General Public License along
15 * with this program; if not, write to the Free Software Foundation, Inc.,
16 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
30 #if !defined(__RC4_H__)
34 VOID rc4_init(PRC4Ext pRC4, PBYTE pbyKey, UINT cbKey_len)
42 pbyst = pRC4->abystate;
45 for (idx = 0; idx < 256; idx++)
46 pbyst[idx] = (BYTE)idx;
49 for (idx = 0; idx < 256; idx++) {
51 stateindex = (stateindex + pbyKey[keyindex] + ust1) & 0xff;
52 ust2 = pbyst[stateindex];
53 pbyst[stateindex] = (BYTE)ust1;
54 pbyst[idx] = (BYTE)ust2;
55 if (++keyindex >= cbKey_len)
60 UINT rc4_byte(PRC4Ext pRC4)
67 pbyst = pRC4->abystate;
68 ux = (pRC4->ux + 1) & 0xff;
70 uy = (ustx + pRC4->uy) & 0xff;
74 pbyst[uy] = (BYTE)ustx;
75 pbyst[ux] = (BYTE)usty;
77 return pbyst[(ustx + usty) & 0xff];
80 VOID rc4_encrypt(PRC4Ext pRC4, PBYTE pbyDest,
81 PBYTE pbySrc, UINT cbData_len)
84 for (ii = 0; ii < cbData_len; ii++)
85 pbyDest[ii] = (BYTE)(pbySrc[ii] ^ rc4_byte(pRC4));