67 lines · 1.0 KB · C
RawDownload
/* *	Data Encryption Standard *	D.P.Mitchell  83/06/08. * *	block_cipher(key, block, decrypting) * *	these routines use the non-standard 7 byte format *	for DES keys. */#include <u.h>#include <libc.h>#include <libsec.h> /* * destructively encrypt the buffer, which * must be at least 8 characters long. */intencrypt(void *key, void *vbuf, int n){	ulong ekey[32];	uchar *buf;	int i, r; 	if(n < 8)		return 0;	key_setup(key, ekey);	buf = vbuf;	n--;	r = n % 7;	n /= 7;	for(i = 0; i < n; i++){		block_cipher(ekey, buf, 0);		buf += 7;	}	if(r)		block_cipher(ekey, buf - 7 + r, 0);	return 1;} /* * destructively decrypt the buffer, which * must be at least 8 characters long. */intdecrypt(void *key, void *vbuf, int n){	ulong ekey[128];	uchar *buf;	int i, r; 	if(n < 8)		return 0;	key_setup(key, ekey);	buf = vbuf;	n--;	r = n % 7;	n /= 7;	buf += n * 7;	if(r)		block_cipher(ekey, buf - 7 + r, 1);	for(i = 0; i < n; i++){		buf -= 7;		block_cipher(ekey, buf, 1);	}	return 1;}