tadd crypt - plan9port - [fork] Plan 9 from user space
 (HTM) git clone git://src.adamsgaard.dk/plan9port
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit 641405320f4601f50e0d728805e14fb6f8196710
 (DIR) parent 648bb6f75a801e6d605fcd061f0b14fecc07a8be
 (HTM) Author: rsc <devnull@localhost>
       Date:   Tue,  8 Feb 2005 21:02:40 +0000
       
       add crypt
       
       Diffstat:
         A src/lib9/crypt.c                    |      68 +++++++++++++++++++++++++++++++
         M src/lib9/mkfile                     |       1 +
       
       2 files changed, 69 insertions(+), 0 deletions(-)
       ---
 (DIR) diff --git a/src/lib9/crypt.c b/src/lib9/crypt.c
       t@@ -0,0 +1,68 @@
       +/*
       + *        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;
       +}
 (DIR) diff --git a/src/lib9/mkfile b/src/lib9/mkfile
       t@@ -84,6 +84,7 @@ LIB9OFILES=\
                convM2S.$O\
                convS2M.$O\
                create.$O\
       +        crypt.$O\
                ctime.$O\
                date.$O\
                dial.$O\