Blob


1 /*
2 * Data Encryption Standard
3 * D.P.Mitchell 83/06/08.
4 *
5 * block_cipher(key, block, decrypting)
6 *
7 * these routines use the non-standard 7 byte format
8 * for DES keys.
9 */
10 #include <u.h>
11 #include <libc.h>
12 #include <auth.h>
13 #include <libsec.h>
15 /*
16 * destructively encrypt the buffer, which
17 * must be at least 8 characters long.
18 */
19 int
20 encrypt(void *key, void *vbuf, int n)
21 {
22 ulong ekey[32];
23 uchar *buf;
24 int i, r;
26 if(n < 8)
27 return 0;
28 key_setup(key, ekey);
29 buf = vbuf;
30 n--;
31 r = n % 7;
32 n /= 7;
33 for(i = 0; i < n; i++){
34 block_cipher(ekey, buf, 0);
35 buf += 7;
36 }
37 if(r)
38 block_cipher(ekey, buf - 7 + r, 0);
39 return 1;
40 }
42 /*
43 * destructively decrypt the buffer, which
44 * must be at least 8 characters long.
45 */
46 int
47 decrypt(void *key, void *vbuf, int n)
48 {
49 ulong ekey[128];
50 uchar *buf;
51 int i, r;
53 if(n < 8)
54 return 0;
55 key_setup(key, ekey);
56 buf = vbuf;
57 n--;
58 r = n % 7;
59 n /= 7;
60 buf += n * 7;
61 if(r)
62 block_cipher(ekey, buf - 7 + r, 1);
63 for(i = 0; i < n; i++){
64 buf -= 7;
65 block_cipher(ekey, buf, 1);
66 }
67 return 1;
68 }