RC4 in C

John Allen wrote this smaller version of rc4 in C which takes a hex key as it's argument.
#define S ,t=s[i],s[i]=s[j],s[j]=t /* rc4 hexkey <file */ unsigned char k[256],s[256],i,j,t;main(c,v,e)char**v;{++v;while(++i)s[ i]=i;for(c=0;*(*v)++;k[c++]=e)sscanf((*v)++-1,"%2x",&e);while(j+=s[i] +k[i%c]S,++i);for(j=0;c=~getchar();putchar(~c^s[t+=s[i]]))j+=s[++i]S;}
The usage is the same as the rc4 in perl, and the (uncompacted) rc4 in C, that is:

% rc4 hexkey < input > output

Compile it like this:

% gcc -o rc4 -O4 rc4.c This is lots faster than rc4 in perl.


Comments, html bugs to me (Adam Back) at <adam@cypherspace.org>