00001 #include "RC4.h"
00002
00003 namespace crypt {
00004
00005 void rc4_removeWarningAndDoNothingFunction() {
00006 if (RC4_magicbyte == RC4_magicbyte)
00007 if (RC4_key == RC4_key) {
00008
00009 }
00010 }
00011
00012 void rc4_init(struct rc4_state *s, unsigned char *key, int length)
00013 {
00014 int j=0, k=0;
00015
00016 int *m = s->m;
00017 s->x = 0;
00018 s->y = 0;
00019
00020 for (int i=0; i<256; i++)
00021 m[i] = i;
00022
00023 for (int i=0; i<256; i++) {
00024 int a = m[i];
00025 j = (unsigned char)(j+a+key[k]);
00026 m[i] = m[j];
00027 m[j] = a;
00028
00029 if (++k >= length)
00030 k = 0;
00031 }
00032 }
00033
00034
00035 void rc4_crypt(struct rc4_state *s, unsigned char *data, int length)
00036 {
00037 int x = s->x;
00038 int y = s->y;
00039 int *m = s->m;
00040
00041 for (int i = 0; i < length; i++ ) {
00042 x = (unsigned char)(x+1);
00043 int a = m[x];
00044 y = (unsigned char)(y+a);
00045 int b = m[y];
00046 m[x] = b;
00047 m[y] = a;
00048 data[i] ^= m[(unsigned char)(a+b)];
00049 }
00050
00051 s->x = x;
00052 s->y = y;
00053 }
00054 }