1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- /*
- * 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 <auth.h>
- #include <libsec.h>
- /*
- * destructively encrypt the buffer, which
- * must be at least 8 characters long.
- */
- int
- encrypt(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.
- */
- int
- decrypt(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;
- }
|