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);
}
}