From mboxrd@z Thu Jan 1 00:00:00 1970 Date: Wed, 22 Apr 1998 14:26:51 -0400 From: Russ Cox rsc@plan9.bell-labs.com Subject: [9fans] encryption routines for il Topicbox-Message-UUID: 77028ec2-eac8-11e9-9e20-41e7f4b1d025 Message-ID: <19980422182651.ArfXaegEz6_WV4EcwgnlzDnBaLrGCWj_HbSdPOD-7ec@z> 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