Staging: Add pristine upstream vt6656 driver sources to drivers/staging/vt6656.
[firewire-audio.git] / drivers / staging / vt6655 / rc4.c
blob0345e3247f4d4638f170e2d98392f03b5d5e7d78
1 /*
2 * File: rc4.c
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.
18 * Purpose:
20 * Functions:
22 * Revision History:
24 * Author: Kyle Hsu
26 * Date: Sep 4, 2002
30 #if !defined(__RC4_H__)
31 #include "rc4.h"
32 #endif
34 VOID rc4_init(PRC4Ext pRC4, PBYTE pbyKey, UINT cbKey_len)
36 UINT ust1, ust2;
37 UINT keyindex;
38 UINT stateindex;
39 PBYTE pbyst;
40 UINT idx;
42 pbyst = pRC4->abystate;
43 pRC4->ux = 0;
44 pRC4->uy = 0;
45 for (idx = 0; idx < 256; idx++)
46 pbyst[idx] = (BYTE)idx;
47 keyindex = 0;
48 stateindex = 0;
49 for (idx = 0; idx < 256; idx++) {
50 ust1 = pbyst[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)
56 keyindex = 0;
60 UINT rc4_byte(PRC4Ext pRC4)
62 UINT ux;
63 UINT uy;
64 UINT ustx, usty;
65 PBYTE pbyst;
67 pbyst = pRC4->abystate;
68 ux = (pRC4->ux + 1) & 0xff;
69 ustx = pbyst[ux];
70 uy = (ustx + pRC4->uy) & 0xff;
71 usty = pbyst[uy];
72 pRC4->ux = ux;
73 pRC4->uy = uy;
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)
83 UINT ii;
84 for (ii = 0; ii < cbData_len; ii++)
85 pbyDest[ii] = (BYTE)(pbySrc[ii] ^ rc4_byte(pRC4));