1 0fc65b37 2004-03-21 devnull #include "os.h"
2 0fc65b37 2004-03-21 devnull #include <libsec.h>
5 0fc65b37 2004-03-21 devnull setupRC4state(RC4state *key, uchar *start, int n)
8 0fc65b37 2004-03-21 devnull int index2;
9 0fc65b37 2004-03-21 devnull uchar *state;
10 0fc65b37 2004-03-21 devnull uchar *p, *e, *sp, *se;
12 0fc65b37 2004-03-21 devnull state = key->state;
13 0fc65b37 2004-03-21 devnull se = &state[256];
14 0fc65b37 2004-03-21 devnull for(sp = state; sp < se; sp++)
15 0fc65b37 2004-03-21 devnull *sp = sp - state;
17 0fc65b37 2004-03-21 devnull key->x = 0;
18 0fc65b37 2004-03-21 devnull key->y = 0;
19 0fc65b37 2004-03-21 devnull index2 = 0;
20 0fc65b37 2004-03-21 devnull e = start + n;
21 0fc65b37 2004-03-21 devnull p = start;
22 0fc65b37 2004-03-21 devnull for(sp = state; sp < se; sp++)
25 0fc65b37 2004-03-21 devnull index2 = (*p + t + index2) & 255;
26 0fc65b37 2004-03-21 devnull *sp = state[index2];
27 0fc65b37 2004-03-21 devnull state[index2] = t;
28 0fc65b37 2004-03-21 devnull if(++p >= e)
29 0fc65b37 2004-03-21 devnull p = start;
34 0fc65b37 2004-03-21 devnull rc4(RC4state *key, uchar *p, int len)
36 0fc65b37 2004-03-21 devnull int tx, ty;
37 0fc65b37 2004-03-21 devnull int x, y;
38 0fc65b37 2004-03-21 devnull uchar *state;
39 0fc65b37 2004-03-21 devnull uchar *e;
41 0fc65b37 2004-03-21 devnull x = key->x;
42 0fc65b37 2004-03-21 devnull y = key->y;
43 0fc65b37 2004-03-21 devnull state = &key->state[0];
44 0fc65b37 2004-03-21 devnull for(e = p + len; p < e; p++)
46 0fc65b37 2004-03-21 devnull x = (x+1)&255;
47 0fc65b37 2004-03-21 devnull tx = state[x];
48 0fc65b37 2004-03-21 devnull y = (y+tx)&255;
49 0fc65b37 2004-03-21 devnull ty = state[y];
50 0fc65b37 2004-03-21 devnull state[x] = ty;
51 0fc65b37 2004-03-21 devnull state[y] = tx;
52 0fc65b37 2004-03-21 devnull *p ^= state[(tx+ty)&255];
54 0fc65b37 2004-03-21 devnull key->x = x;
55 0fc65b37 2004-03-21 devnull key->y = y;
59 0fc65b37 2004-03-21 devnull rc4skip(RC4state *key, int len)
61 0fc65b37 2004-03-21 devnull int tx, ty;
62 0fc65b37 2004-03-21 devnull int x, y;
63 0fc65b37 2004-03-21 devnull uchar *state;
66 0fc65b37 2004-03-21 devnull x = key->x;
67 0fc65b37 2004-03-21 devnull y = key->y;
68 0fc65b37 2004-03-21 devnull state = &key->state[0];
69 0fc65b37 2004-03-21 devnull for(i=0; i<len; i++)
71 0fc65b37 2004-03-21 devnull x = (x+1)&255;
72 0fc65b37 2004-03-21 devnull tx = state[x];
73 0fc65b37 2004-03-21 devnull y = (y+tx)&255;
74 0fc65b37 2004-03-21 devnull ty = state[y];
75 0fc65b37 2004-03-21 devnull state[x] = ty;
76 0fc65b37 2004-03-21 devnull state[y] = tx;
78 0fc65b37 2004-03-21 devnull key->x = x;
79 0fc65b37 2004-03-21 devnull key->y = y;
83 0fc65b37 2004-03-21 devnull rc4back(RC4state *key, int len)
85 0fc65b37 2004-03-21 devnull int tx, ty;
86 0fc65b37 2004-03-21 devnull int x, y;
87 0fc65b37 2004-03-21 devnull uchar *state;
90 0fc65b37 2004-03-21 devnull x = key->x;
91 0fc65b37 2004-03-21 devnull y = key->y;
92 0fc65b37 2004-03-21 devnull state = &key->state[0];
93 0fc65b37 2004-03-21 devnull for(i=0; i<len; i++)
95 0fc65b37 2004-03-21 devnull ty = state[x];
96 0fc65b37 2004-03-21 devnull tx = state[y];
97 0fc65b37 2004-03-21 devnull state[y] = ty;
98 0fc65b37 2004-03-21 devnull state[x] = tx;
99 0fc65b37 2004-03-21 devnull y = (y-tx)&255;
100 0fc65b37 2004-03-21 devnull x = (x-1)&255;
102 0fc65b37 2004-03-21 devnull key->x = x;
103 0fc65b37 2004-03-21 devnull key->y = y;