URI: 
       tReplace openssl with libsodium - safe - password protected secret keeper
  HTML git clone git://git.z3bra.org/safe.git
   DIR Log
   DIR Files
   DIR Refs
   DIR README
   DIR LICENSE
       ---
   DIR commit d003bd0061a5dbb5d92bc0e71c0e35f69fdfe04a
   DIR parent 0c20eb573f7fa48a2ee8727efc736210b193ac80
  HTML Author: z3bra <dev@z3bra.org>
       Date:   Thu, 25 Apr 2019 14:06:09 +0200
       
       Replace openssl with libsodium
       
       Diffstat:
         M mkfile                              |       2 +-
         M safe.c                              |      44 +++++++------------------------
       
       2 files changed, 11 insertions(+), 35 deletions(-)
       ---
   DIR diff --git a/mkfile b/mkfile
       t@@ -7,7 +7,7 @@ MANPREFIX = ${PREFIX}/man
        CPPFLAGS = -D_XOPEN_SOURCE
        CFLAGS = -g -Wall -Wextra -pedantic
        LDFLAGS =
       -LDLIBS = -lcrypto -lcrypt
       +LDLIBS = -lsodium
        
        BIN = safe
        SRC = ${BIN}.c
   DIR diff --git a/safe.c b/safe.c
       t@@ -10,11 +10,11 @@
        #include <string.h>
        #include <unistd.h>
        
       -#include <openssl/sha.h>
       +#include <sodium.h>
        
        #include "arg.h"
        
       -#define MDSIZE 32
       +#define MDSIZE crypto_generichash_BYTES
        #define SAFE ".safe.d"
        
        char *argv0;
       t@@ -85,13 +85,9 @@ usage(void)
        }
        
        void
       -hash(uint8_t *buf, size_t size, uint8_t *md)
       +hash(uint8_t *buf, size_t size, uint8_t *md, size_t mdsize)
        {
       -        SHA256_CTX ctx;
       -
       -        SHA256_Init(&ctx);
       -        SHA256_Update(&ctx, buf, size);
       -        SHA256_Final(md, &ctx);
       +        crypto_generichash(md, mdsize, buf, size, NULL, 0);
        }
        
        void
       t@@ -101,33 +97,11 @@ hash_key(char *pass)
                uint8_t md[MDSIZE];
                char key[MDSIZE * 2];
        
       -        hash((uint8_t *)pass, strlen(pass), md);
       +        hash((uint8_t *)pass, strlen(pass), md, sizeof(md));
                bin2str(md, key, MDSIZE);
        
                for (i = 0; i < sizeof(key); i++)
                        key[i] &= 1;
       -
       -        setkey(key);
       -}
       -
       -void
       -xencrypt(char *s, size_t size, int edflag)
       -{
       -        size_t i, j;
       -        char buf[64];
       -
       -        if (size > 8)
       -                xencrypt(s+8, size - 8, edflag);
       -
       -        for (i = 0; i < 8; i ++)
       -                for (j = 0; j < 8; j++)
       -                        buf[i * 8 + j] = s[i] >> j & 1;
       -
       -        encrypt(buf, edflag);
       -        for (i = 0; i < 8; i++)
       -                for (j = 0; j < 8; j++)
       -                        s[i] |= buf[i * 8 + j] << j;
       -
        }
        
        int
       t@@ -138,7 +112,7 @@ store_secret(int fd, char *name)
                uint8_t md[MDSIZE];
                char buf[64], fn[MDSIZE*2 + 1];
        
       -        hash((uint8_t *)name, strlen(name), md);
       +        hash((uint8_t *)name, strlen(name), md, sizeof(md));
                bin2str(md, fn, MDSIZE);
        
                sfd = open(fn, O_WRONLY | O_CREAT, 0600);
       t@@ -146,7 +120,6 @@ store_secret(int fd, char *name)
                        err(1, "open %s", fn);
        
                while((n = xread(fd, buf, sizeof(buf))) > 0) {
       -                /* xencrypt(buf, sizeof(buf), 0); */
                        xwrite(sfd, buf, n);
                }
        
       t@@ -162,7 +135,7 @@ show_secret(int fd, char *name)
                uint8_t md[MDSIZE];
                char buf[64], fn[MDSIZE*2 + 1];
        
       -        hash((uint8_t *)name, strlen(name), md);
       +        hash((uint8_t *)name, strlen(name), md, sizeof(md));
                bin2str(md, fn, MDSIZE);
        
                sfd = open(fn, O_RDONLY);
       t@@ -208,6 +181,9 @@ main(int argc, char *argv[])
                                err(1, "chdir: %s", safe);
                }
        
       +        if (sodium_init() < 0)
       +                err(1, "sodium: failed to initialize library");
       +
                if (pass)
                        hash_key(pass);