Blame view
drivers/staging/vt6655/rc4.c
2.15 KB
5449c685a Staging: Add pris... |
1 |
/* |
612822f5d Staging: vt665x: ... |
2 3 |
* Copyright (c) 1996, 2003 VIA Networking Technologies, Inc. * All rights reserved. |
5449c685a Staging: Add pris... |
4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
* * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * |
612822f5d Staging: vt665x: ... |
19 20 |
* File: rc4.c * |
5449c685a Staging: Add pris... |
21 22 23 24 25 26 27 28 29 30 31 |
* Purpose: * * Functions: * * Revision History: * * Author: Kyle Hsu * * Date: Sep 4, 2002 * */ |
5449c685a Staging: Add pris... |
32 |
#include "rc4.h" |
5449c685a Staging: Add pris... |
33 |
|
2989e96f1 Staging: vt6655: ... |
34 |
void rc4_init(PRC4Ext pRC4, unsigned char *pbyKey, unsigned int cbKey_len) |
5449c685a Staging: Add pris... |
35 |
{ |
7e58568f1 staging:vt6655:rc... |
36 37 38 39 40 |
unsigned int ust1, ust2; unsigned int keyindex; unsigned int stateindex; unsigned char *pbyst; unsigned int idx; |
5449c685a Staging: Add pris... |
41 |
|
7e58568f1 staging:vt6655:rc... |
42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
pbyst = pRC4->abystate; pRC4->ux = 0; pRC4->uy = 0; for (idx = 0; idx < 256; idx++) pbyst[idx] = (unsigned char)idx; keyindex = 0; stateindex = 0; for (idx = 0; idx < 256; idx++) { ust1 = pbyst[idx]; stateindex = (stateindex + pbyKey[keyindex] + ust1) & 0xff; ust2 = pbyst[stateindex]; pbyst[stateindex] = (unsigned char)ust1; pbyst[idx] = (unsigned char)ust2; if (++keyindex >= cbKey_len) keyindex = 0; } |
5449c685a Staging: Add pris... |
58 |
} |
b6e95cd52 Staging: vt6655: ... |
59 |
unsigned int rc4_byte(PRC4Ext pRC4) |
5449c685a Staging: Add pris... |
60 |
{ |
7e58568f1 staging:vt6655:rc... |
61 62 63 64 |
unsigned int ux; unsigned int uy; unsigned int ustx, usty; unsigned char *pbyst; |
5449c685a Staging: Add pris... |
65 |
|
7e58568f1 staging:vt6655:rc... |
66 67 68 69 70 71 72 73 74 |
pbyst = pRC4->abystate; ux = (pRC4->ux + 1) & 0xff; ustx = pbyst[ux]; uy = (ustx + pRC4->uy) & 0xff; usty = pbyst[uy]; pRC4->ux = ux; pRC4->uy = uy; pbyst[uy] = (unsigned char)ustx; pbyst[ux] = (unsigned char)usty; |
5449c685a Staging: Add pris... |
75 |
|
7e58568f1 staging:vt6655:rc... |
76 |
return pbyst[(ustx + usty) & 0xff]; |
5449c685a Staging: Add pris... |
77 |
} |
2989e96f1 Staging: vt6655: ... |
78 |
void rc4_encrypt(PRC4Ext pRC4, unsigned char *pbyDest, |
7e58568f1 staging:vt6655:rc... |
79 |
unsigned char *pbySrc, unsigned int cbData_len) |
5449c685a Staging: Add pris... |
80 |
{ |
7e58568f1 staging:vt6655:rc... |
81 |
unsigned int ii; |
6b7112719 staging: vt6655: ... |
82 |
|
7e58568f1 staging:vt6655:rc... |
83 84 |
for (ii = 0; ii < cbData_len; ii++) pbyDest[ii] = (unsigned char)(pbySrc[ii] ^ rc4_byte(pRC4)); |
5449c685a Staging: Add pris... |
85 |
} |