crypt.c - 9base - revived minimalist port of Plan 9 userland to Unix | |
git clone git://git.suckless.org/9base | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
crypt.c (1045B) | |
--- | |
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> | |
14 | |
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; | |
25 | |
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 } | |
41 | |
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; | |
52 | |
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 } |