Blame


1 0fc65b37 2004-03-21 devnull #include "os.h"
2 0fc65b37 2004-03-21 devnull #include <libsec.h>
3 0fc65b37 2004-03-21 devnull
4 0fc65b37 2004-03-21 devnull void
5 0fc65b37 2004-03-21 devnull setupRC4state(RC4state *key, uchar *start, int n)
6 0fc65b37 2004-03-21 devnull {
7 0fc65b37 2004-03-21 devnull int t;
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;
11 0fc65b37 2004-03-21 devnull
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;
16 0fc65b37 2004-03-21 devnull
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++)
23 0fc65b37 2004-03-21 devnull {
24 0fc65b37 2004-03-21 devnull t = *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;
30 0fc65b37 2004-03-21 devnull }
31 0fc65b37 2004-03-21 devnull }
32 0fc65b37 2004-03-21 devnull
33 0fc65b37 2004-03-21 devnull void
34 0fc65b37 2004-03-21 devnull rc4(RC4state *key, uchar *p, int len)
35 0fc65b37 2004-03-21 devnull {
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;
40 0fc65b37 2004-03-21 devnull
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++)
45 0fc65b37 2004-03-21 devnull {
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];
53 0fc65b37 2004-03-21 devnull }
54 0fc65b37 2004-03-21 devnull key->x = x;
55 0fc65b37 2004-03-21 devnull key->y = y;
56 0fc65b37 2004-03-21 devnull }
57 0fc65b37 2004-03-21 devnull
58 0fc65b37 2004-03-21 devnull void
59 0fc65b37 2004-03-21 devnull rc4skip(RC4state *key, int len)
60 0fc65b37 2004-03-21 devnull {
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;
64 0fc65b37 2004-03-21 devnull int i;
65 0fc65b37 2004-03-21 devnull
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++)
70 0fc65b37 2004-03-21 devnull {
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;
77 0fc65b37 2004-03-21 devnull }
78 0fc65b37 2004-03-21 devnull key->x = x;
79 0fc65b37 2004-03-21 devnull key->y = y;
80 0fc65b37 2004-03-21 devnull }
81 0fc65b37 2004-03-21 devnull
82 0fc65b37 2004-03-21 devnull void
83 0fc65b37 2004-03-21 devnull rc4back(RC4state *key, int len)
84 0fc65b37 2004-03-21 devnull {
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;
88 0fc65b37 2004-03-21 devnull int i;
89 0fc65b37 2004-03-21 devnull
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++)
94 0fc65b37 2004-03-21 devnull {
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;
101 0fc65b37 2004-03-21 devnull }
102 0fc65b37 2004-03-21 devnull key->x = x;
103 0fc65b37 2004-03-21 devnull key->y = y;
104 0fc65b37 2004-03-21 devnull }