Introduction
Introduction Statistics Contact Development Disclaimer Help
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 }
You are viewing proxied material from suckless.org. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.