]> git.lizzy.rs Git - plan9front.git/blobdiff - sys/src/libauthsrv/passtokey.c
etheriwl: don't break controller on command flush timeout
[plan9front.git] / sys / src / libauthsrv / passtokey.c
index 44963cec64f6643682f9aaa8532bcf2209fb712f..e6803427a200d056dddef1a2d9314e56c2e93030 100644 (file)
@@ -1,32 +1,48 @@
 #include <u.h>
 #include <libc.h>
 #include <authsrv.h>
+#include <libsec.h>
 
-int
-passtokey(Authkey *key, char *p)
+void
+passtodeskey(char key[DESKEYLEN], char *p)
 {
-       uchar buf[ANAMELEN], *t;
+       uchar buf[PASSWDLEN], *t;
        int i, n;
 
        n = strlen(p);
-       if(n >= ANAMELEN)
-               n = ANAMELEN-1;
+       if(n >= PASSWDLEN)
+               n = PASSWDLEN-1;
        memset(buf, ' ', 8);
        t = buf;
        strncpy((char*)t, p, n);
        t[n] = 0;
-       memset(key, 0, sizeof(Authkey));
+       memset(key, 0, DESKEYLEN);
        for(;;){
                for(i = 0; i < DESKEYLEN; i++)
-                       key->des[i] = (t[i] >> i) + (t[i+1] << (8 - (i+1)));
+                       key[i] = (t[i] >> i) + (t[i+1] << (8 - (i+1)));
                if(n <= 8)
-                       return 1;
+                       return;
                n -= 8;
                t += 8;
                if(n < 8){
                        t -= 8 - n;
                        n = 8;
                }
-               encrypt(key->des, t, 8);
+               encrypt(key, t, 8);
        }
 }
+
+void
+passtoaeskey(uchar key[AESKEYLEN], char *p)
+{
+       static char salt[] = "Plan 9 key derivation";
+       pbkdf2_x((uchar*)p, strlen(p), (uchar*)salt, sizeof(salt)-1, 9001, key, AESKEYLEN, hmac_sha1, SHA1dlen);
+}
+
+void
+passtokey(Authkey *key, char *pw)
+{
+       memset(key, 0, sizeof(Authkey));
+       passtodeskey(key->des, pw);
+       passtoaeskey(key->aes, pw);
+}