#include #define I s[256] #define J s[257] void arc4_init(ARC4_STATE *a __attribute__((__unused__))) { } void arc4_setkey(ARC4_STATE *a, const void *key, unsigned int keylen, unsigned int n_discard) { unsigned char *s; int i; int j; int k; unsigned char t; j = 0; k = 0; s = &a->s[0]; for (i=0;i<256;i++) s[i] = i; for (i=0;i<256;i++) { if (k >= keylen) k = 0; j = (j + s[i] + ((const unsigned char *)key)[k++]) & 0xff; t = s[i]; s[i] = s[j]; s[j] = t; } i = 0; j = 0; for (k=n_discard;k>0;k--) { i = (i + 1) & 0xff; t = s[i]; j = (j + t) & 0xff; if (i != j) { s[i] = s[j]; s[j] = t; } } I = i; J = j; } void arc4_crypt(ARC4_STATE *a, const void *in, unsigned int len, void *out) { const unsigned char *ip; unsigned char *op; unsigned char *s; unsigned char t1; unsigned char t2; int i; int j; ip = in; op = out; s = a->s; i = I; j = J; while (len > 0) { for (;len>0;len--) { i = (i + 1) & 0xff; t1 = s[i]; j = (j + t1) & 0xff; t2 = s[j]; s[i] = t2; s[j] = t1; *op++ = *ip++ ^ s[(t1+t2)&0xff]; } } I = i; J = j; }