Path: cactus.org!news.dell.com!swrinde!cs.utexas.edu!not-for-mail From: boucher@csl.sri.com (Peter K. Boucher) Newsgroups: sci.crypt Subject: Dynamic Substitution? Date: 15 Nov 1994 18:31:06 -0600 Organization: UTexas Mail-to-News Gateway Lines: 59 Sender: nobody@cs.utexas.edu Message-ID: <9411160031.AA15776@redwood.csl.sri.com> NNTP-Posting-Host: news.cs.utexas.edu I coded this up based on a description under a thread about improving RC4. It runs a little faster than optimized DES. Does it infringe on Ritter's Dynamic Substitution patent? Anyone see a weakness (assuming rand32() is good)? -Peter ======================== clip clip ======================== extern unsigned char estab[256]; /* A substitution table */ extern unsigned char dstab[256]; /* Its inverse */ extern unsigned long rand32(); #define BUFSIZE 8192 #define IV_SIZE 256 #define SWAP_TABS(TMP1,TMP2,A,B) \ TMP1=estab[A]; \ TMP2=estab[B]; \ dstab[TMP1]=B; \ dstab[TMP2]=A; \ estab[B]=TMP1; \ estab[A]=TMP2; void stream_crypt(buf, buf_length, encrypting) unsigned char *buf; register int buf_length, encrypting; { register unsigned char cleart, rnd_char1, rnd_char2, tmp1, tmp2; register unsigned long rnd_long; register int i, need_a_long=1; for (i=buf_length; i--;) { if (need_a_long) { rnd_long = rand32(); rnd_char1 = ( rnd_long & 255); rnd_char2 = ((rnd_long >> 8) & 255); need_a_long = 0; } else { rnd_char1 = ((rnd_long >> 16) & 255); rnd_char2 = (rnd_long >> 24) ; need_a_long = 1; } if (encrypting == 0) { /* DECRYPTING */ cleart = buf[i] = dstab[rnd_char1^estab[buf[i]]]; } else { /* ENCRYPTING */ cleart = buf[i]; buf[i] = dstab[rnd_char1^estab[cleart]]; } SWAP_TABS(tmp1, tmp2, rnd_char2, cleart); } }