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
));