X-Authentication-Warning: claven.cse.psu.edu: majordom set sender to owner-9fans using -f Subject: [9fans] encryption routines for il To: 9fans@cse.psu.edu Date: Wed, 22 Apr 1998 18:14:48 +0100 (BST) From: Digby Tarvin Reply-To: digbyt@acm.org (Digby Tarvin) X-Pgp-Key-Fingerprint: 61 E7 39 FE 4A F4 CA F3 F5 5E BB 45 26 EC 36 3C X-Mailer: ELM [version 2.4 PL25] Sender: owner-9fans@cse.psu.edu Reply-To: 9fans@cse.psu.edu I am looking at installing Pace Willisson's Unix based Authentication server on my BSDI box (thanks to Russ Cox for letting me know about it). If anyone outside the US has implemented compatible versions of the missing encryption routines, please let me know. Thanks, DigbyT -- Digby R. S. Tarvin digbyt@acm.org http://www.cthulhu.dircon.co.uk X-Authentication-Warning: claven.cse.psu.edu: majordom set sender to owner-9fans using -f Date: Wed, 22 Apr 1998 14:26:51 -0400 To: 9fans@cse.psu.edu From: "Russ Cox" Subject: re: [9fans] encryption routines for il Sender: owner-9fans@cse.psu.edu Reply-To: 9fans@cse.psu.edu Take Pace's il.tar.gz, make des.c a null file, and then use the following encrypt.c: (The inspiration and almost all of the code for this came from Kenji Arisawa.) #include #include #include #define DESKEYLEN 7 #define NAMELEN 22 typedef unsigned char uchar; uchar a[8] = { 128, 64, 32, 16, 8, 4, 2, 1 }; /* get bit status at the bit position n of string s char s[8] int n: 0 .. 63 */ int strbit(char *s, int n) { int q,m; q = n / 8; m = n % 8; return (s[q] & a[m]?1:0); } /* uchar s[8] uchar x[1] */ uchar s2b(uchar *s) { int i; uchar x; x = 0; for(i = 0; i < 8; i++) if(s[i]) x |= a[i]; return x; } /* uchar s[8] uchar x[1] */ void b2s(uchar x, uchar *s) { int i; for(i = 0; i < 8; i++) s[i] = 0; for(i = 0; i < 8; i++) if(x & a[i]) s[i] = 1; } /* uchar s[64], x[8] */ void blk2str(uchar *x, uchar *s) { int i; for(i = 0; i < 8; i++) b2s(x[i],&s[8*i]); } /* uchar s[64], x[8] */ void str2blk(uchar *s, uchar *x) { int i; for(i = 0; i < 8; i++) x[i] = s2b(&s[8*i]); } /* Plan9 encrypt uchar key[7] --- deskey uchar t[8] --- target(des cypher block) */ void des(uchar *key, uchar *t) { int i,j; char s[64],u[64]; for(j = 0; j < 8; j++){ for(i = 0; i < 7; i++) s[8*j + i] = strbit(key, 7*j + i); s[8*j + 7] = 0; } setkey(s); blk2str(t,u); encrypt(u,0); /* encrypt */ str2blk(u,t); } void plan9_encrypt(uchar *key, uchar *t, int len) { des(key, t); } This doesn't work under Linux. Don't complain to me. Russ