On Saturday 01 July 2006 20:06, Alexander Schmehl wrote:
> Hi!
>
> * George Danchev <[EMAIL PROTECTED]> [060701 15:20]:
> > I hope that Alexander Schmehl is still willing to check it out and
> > upload. Should anything still to be corrented I'm willing to do so. The
> > new RC4 implementation is documented in debian/copyright, along with the
> > match script as well (that were the points Alexnder raised in his last
> > reviewing).
>
> Currently I'm on the road without my gpg-key, so I can't upload anythign
> right now.  I'll be back on Tuesday evening / wednesday morning will
> check it then (if I don't forget it, might be a got idea to send me an
> reminder ;)

Alexander,
        I found a compromise fix for the above break as to force the resulting 
binary 
(that produced by shc) to be always redistributable. You can dget packages 
from: ftp://ftp.logos-bg.net/debian-addons-bg/dists/unstable/shc/

-- 
pub 4096R/0E4BD0AB 2003-03-18 <people.fccf.net/danchev/key pgp.mit.edu>
fingerprint 1AE7 7C66 0A26 5BFF DF22 5D55 1C57 0C89 0E4B D0AB 
diff -Naur shc-3.8.3/shc.c shc-3.8.3.dfsg/shc.c
--- shc-3.8.3/shc.c	2005-06-28 22:28:52.000000000 +0300
+++ shc-3.8.3.dfsg/shc.c	2006-07-04 12:35:06.000000000 +0300
@@ -1,10 +1,27 @@
 /* shc.c */
 
-/**
- * This software contains the 'Alleged RC4' source code.
- * The original source code was published on the Net by a group of cypherpunks.
- * I picked up a modified version from the news.
- * The copyright notice does not apply to that code.
+/*-
+ * This software contains a clean-room implementation of Alleged RC4 (ARC4).
+ * The following copyright notice and license apply only to that code.
+ *
+ * Copyright (c) 2006 Brian M. Carlson
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License, dated June
+ * 1991, with MD5 hash 8ca43cbc842c2336e835926c2166c28b.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to:
+ *   Free Software Foundation, Inc.
+ *   51 Franklin St, Fifth Floor
+ *   Boston, MA  02110-1301
+ *   USA
  */
 static const char my_name[] = "shc";
 static const char version[] = "Version 3.8.3";
@@ -125,63 +142,85 @@
 "#include <string.h>",
 "#include <time.h>",
 "#include <unistd.h>",
-"",
-"/**",
-" * 'Alleged RC4' Source Code picked up from the news.",
-" * From: [EMAIL PROTECTED] (John L. Allen)",
-" * Newsgroups: comp.lang.c",
-" * Subject: Shrink this C code for fame and fun",
-" * Date: 21 May 1996 10:49:37 -0400",
+"/*-",
+" * This software contains a clean-room implementation of Alleged RC4.",
+" * The following copyright notice and license apply only to that code.",
+" *",
+" * Copyright (c) 2006 Brian M. Carlson",
+" * ",
+" * This program is free software; you can redistribute it and/or modify",
+" * it under the terms of the GNU General Public License as published by",
+" * the Free Software Foundation; version 2 of the License, dated June",
+" * 1991, with MD5 hash 8ca43cbc842c2336e835926c2166c28b.",
+" * ",
+" * This program is distributed in the hope that it will be useful, but",
+" * WITHOUT ANY WARRANTY; without even the implied warranty of",
+" * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU",
+" * General Public License for more details.",
+" * ",
+" * You should have received a copy of the GNU General Public License",
+" * along with this program; if not, write to:",
+" *   Free Software Foundation, Inc.",
+" *   51 Franklin St, Fifth Floor",
+" *   Boston, MA  02110-1301",
+" *   USA",
+" *",
+" * In addition, as a special exception, you may deal in this software as",
+" * part of a program produced by shc (the shell script compiler) without",
+" * restriction.",
+" *",
+" * Note that people who make modified versions of this software are not",
+" * obligated to grant this special exception for their modified versions;",
+" * it is their choice whether to do so. The GNU General Public License",
+" * gives permission to release a modified version without this exception;",
+" * this exception also makes it possible to release a modified version",
+" * which carries forward this exception.",
 " */",
 "",
-"static unsigned char stte[256], indx, jndx, kndx;",
+"struct crypto_rc4_s",
+"{",
+"           unsigned char s[256];",
+"           unsigned char i;",
+"           unsigned char j;",
+"} ctxo, *ctx=&ctxo;",
+"",
+"#define SWAP(x, y) do{unsigned char tmp;tmp=(x);(x)=(y);(y)=tmp;}while (0)",
 "",
-"/*",
-" * Reset arc4 stte. ",
-" */",
 "void stte_0(void)",
 "{",
-"	indx = jndx = kndx = 0;",
-"	do {",
-"		stte[indx] = indx;",
-"	} while (++indx);",
+"           int i;",
+"",
+"           for (i=0; i<256; i++)",
+"                           ctx->s[i]=i;",
+"           ctx->i=ctx->j=0;",
 "}",
 "",
-"/*",
-" * Set key. Can be used more than once. ",
-" */",
-"void key(void * str, int len)",
+"void key(const char *str, int len)",
 "{",
-"	unsigned char tmp, * ptr = (unsigned char *)str;",
-"	while (len > 0) {",
-"		do {",
-"			tmp = stte[indx];",
-"			kndx += tmp;",
-"			kndx += ptr[(int)indx % len];",
-"			stte[indx] = stte[kndx];",
-"			stte[kndx] = tmp;",
-"		} while (++indx);",
-"		ptr += 256;",
-"		len -= 256;",
+"           const unsigned char *k=(const unsigned char *)str;",
+"           int i;",
+"           unsigned char j=0;",
+"",
+"           for (i=0; i<256; i++)",
+"           {",
+"                      j+=ctx->s[i]+k[i];",
+"                      SWAP(ctx->s[i], ctx->s[j]);",
 "	}",
 "}",
 "",
-"/*",
-" * Crypt data. ",
-" */",
-"void arc4(void * str, int len)",
+"void rc4(char *data, int sz)",     
 "{",
-"	unsigned char tmp, * ptr = (unsigned char *)str;",
-"	while (len > 0) {",
-"		indx++;",
-"		tmp = stte[indx];",
-"		jndx += tmp;",
-"		stte[indx] = stte[jndx];",
-"		stte[jndx] = tmp;",
-"		tmp += stte[indx];",
-"		*ptr ^= stte[tmp];",
-"		ptr++;",
-"		len--;",
+"           int idx;",
+"           unsigned char t, k;",
+"",
+"           for (idx=0; idx<sz; idx++)",
+"           {",
+"                          ctx->i++;",
+"                          ctx->j+=ctx->s[ctx->i];",
+"                          SWAP(ctx->s[ctx->i], ctx->s[ctx->j]);",
+"                          t=ctx->s[ctx->i]+ctx->s[ctx->j];",
+"                          k=ctx->s[t];",
+"                          data[idx]^=k;",
 "	}",
 "}",
 "",
@@ -206,7 +245,7 @@
 "	control->st_size = statf->st_size;",
 "	control->st_mtime = statf->st_mtime;",
 "	control->st_ctime = statf->st_ctime;",
-"	key(control, sizeof(control));",
+"	key(\"control\", sizeof(control));",
 "	return 0;",
 "}",
 "",
@@ -315,35 +354,35 @@
 "",
 "	stte_0();",
 "	 key(pswd, pswd_z);",
-"	arc4(msg1, msg1_z);",
-"	arc4(date, date_z);",
+"	rc4(msg1, msg1_z);",
+"	rc4(date, date_z);",
 "	if (date[0] && date[0]<time(NULL))",
 "		return msg1;",
-"	arc4(shll, shll_z);",
-"	arc4(inlo, inlo_z);",
-"	arc4(xecc, xecc_z);",
-"	arc4(lsto, lsto_z);",
-"	arc4(tst1, tst1_z);",
+"	rc4(shll, shll_z);",
+"	rc4(inlo, inlo_z);",
+"	rc4(xecc, xecc_z);",
+"	rc4(lsto, lsto_z);",
+"	rc4(tst1, tst1_z);",
 "	 key(tst1, tst1_z);",
-"	arc4(chk1, chk1_z);",
+"	rc4(chk1, chk1_z);",
 "	if ((chk1_z != tst1_z) || memcmp(tst1, chk1, tst1_z))",
 "		return tst1;",
 "	ret = chkenv(argc);",
-"	arc4(msg2, msg2_z);",
+"	rc4(msg2, msg2_z);",
 "	if (ret < 0)",
 "		return msg2;",
 "	varg = (char **)calloc(argc + 10, sizeof(char *));",
 "	if (!varg)",
 "		return 0;",
 "	if (ret) {",
-"		arc4(rlax, rlax_z);",
+"		rc4(rlax, rlax_z);",
 "		if (!rlax[0] && key_with_file(shll))",
 "			return shll;",
-"		arc4(opts, opts_z);",
-"		arc4(text, text_z);",
-"		arc4(tst2, tst2_z);",
+"		rc4(opts, opts_z);",
+"		rc4(text, text_z);",
+"		rc4(tst2, tst2_z);",
 "		 key(tst2, tst2_z);",
-"		arc4(chk2, chk2_z);",
+"		rc4(chk2, chk2_z);",
 "		if ((chk2_z != tst2_z) || memcmp(tst2, chk2, tst2_z))",
 "			return tst2;",
 "		if (text_z < hide_z) {",
@@ -529,63 +568,52 @@
 	}
 }
 
-/**
- * 'Alleged RC4' Source Code picked up from the news.
- * From: [EMAIL PROTECTED] (John L. Allen)
- * Newsgroups: comp.lang.c
- * Subject: Shrink this C code for fame and fun
- * Date: 21 May 1996 10:49:37 -0400
- */
-
-static unsigned char stte[256], indx, jndx, kndx;
 
-/*
- * Reset arc4 stte. 
- */
-void stte_0(void)
+struct crypto_rc4_s
 {
-	indx = jndx = kndx = 0;
-	do {
-		stte[indx] = indx;
-	} while (++indx);
+             unsigned char s[256];
+             unsigned char i;
+             unsigned char j;
 }
+ ctxo, *ctx=&ctxo;
 
-/*
- * Set key. Can be used more than once. 
- */
-void key(void * str, int len)
-{
-	unsigned char tmp, * ptr = (unsigned char *)str;
-	while (len > 0) {
-		do {
-			tmp = stte[indx];
-			kndx += tmp;
-			kndx += ptr[(int)indx % len];
-			stte[indx] = stte[kndx];
-			stte[kndx] = tmp;
-		} while (++indx);
-		ptr += 256;
-		len -= 256;
-	}
-}
+#define SWAP(x, y) do { unsigned char tmp; tmp=(x); (x)=(y); (y)=tmp; } while (0)
 
-/*
- * Crypt data. 
- */
-void arc4(void * str, int len)
+void stte_0(void)
 {
-	unsigned char tmp, * ptr = (unsigned char *)str;
-	while (len > 0) {
-		indx++;
-		tmp = stte[indx];
-		jndx += tmp;
-		stte[indx] = stte[jndx];
-		stte[jndx] = tmp;
-		tmp += stte[indx];
-		*ptr ^= stte[tmp];
-		ptr++;
-		len--;
-	}
+           int i;
+           for (i=0; i<256; i++)
+                          ctx->s[i]=i;
+           ctx->i=ctx->j=0;
+}
+ 
+void key(const char *str, int len)  
+{
+
+               const unsigned char *k=(const unsigned char *)str;
+               int i;
+               unsigned char j=0;
+
+               for (i=0; i<256; i++)
+               {
+                              j+=ctx->s[i]+k[i];
+                              SWAP(ctx->s[i], ctx->s[j]);
+               }
+}
+
+void rc4(char *data, int sz)
+{
+               int idx;
+               unsigned char t, k;
+               for (idx=0; idx<sz; idx++)
+               {
+                              ctx->i++;
+                              ctx->j+=ctx->s[ctx->i];
+                              SWAP(ctx->s[ctx->i], ctx->s[ctx->j]);
+                              t=ctx->s[ctx->i]+ctx->s[ctx->j];
+                              k=ctx->s[t];
+                              data[idx]^=k;   
+               }
 }
 
 /*
@@ -609,7 +637,7 @@
 	control->st_size = statf->st_size;
 	control->st_mtime = statf->st_mtime;
 	control->st_ctime = statf->st_ctime;
-	key(control, sizeof(control));
+	key("control", sizeof(control));
 	return 0;
 }
 
@@ -802,7 +830,7 @@
 
 void dump_array(FILE * o, void * ptr, char * name, int l, char * cast)
 {
-	arc4(ptr, l);
+	rc4(ptr, l);
 	prnt_array(o, ptr, name, l, cast);
 }
 
@@ -844,28 +872,28 @@
 	 key(pswd, pswd_z);
 	msg1_z += strlen(mail);
 	msg1 = strcat(realloc(msg1, msg1_z), mail);
-	arc4(msg1, msg1_z); numd++;
-	arc4(date, date_z); numd++;
-	arc4(shll, shll_z); numd++;
-	arc4(inlo, inlo_z); numd++;
-	arc4(xecc, xecc_z); numd++;
-	arc4(lsto, lsto_z); numd++;
-	arc4(tst1, tst1_z); numd++;
+	rc4(msg1, msg1_z); numd++;
+	rc4(date, date_z); numd++;
+	rc4(shll, shll_z); numd++;
+	rc4(inlo, inlo_z); numd++;
+	rc4(xecc, xecc_z); numd++;
+	rc4(lsto, lsto_z); numd++;
+	rc4(tst1, tst1_z); numd++;
 	 key(chk1, chk1_z);
-	arc4(chk1, chk1_z); numd++;
-	arc4(msg2, msg2_z); numd++;
+	rc4(chk1, chk1_z); numd++;
+	rc4(msg2, msg2_z); numd++;
 	indx = !rlax[0];
-	arc4(rlax, rlax_z); numd++;
+	rc4(rlax, rlax_z); numd++;
 	if (indx && key_with_file(kwsh)) {
 		fprintf(stderr, "%s: invalid file name: %s", my_name, kwsh);
 		perror("");
 		exit(1);
 	}
-	arc4(opts, opts_z); numd++;
-	arc4(text, text_z); numd++;
-	arc4(tst2, tst2_z); numd++;
+	rc4(opts, opts_z); numd++;
+	rc4(text, text_z); numd++;
+	rc4(tst2, tst2_z); numd++;
 	 key(chk2, chk2_z);
-	arc4(chk2, chk2_z); numd++;
+	rc4(chk2, chk2_z); numd++;
 
 	/* Output */
 	name = strcat(realloc(name, strlen(name)+5), ".x.c");

Reply via email to