]> pd.if.org Git - zpackage/blobdiff - lib/zpm_hash.c
switch to blake2
[zpackage] / lib / zpm_hash.c
index a14f7d62597136132486a613a04e847a83aeedbd..f4c7b67e7f1b0fb0658ec7eeec310abd4552fbcb 100644 (file)
 #include "zpm.h"
 #include "elf.h"
 
-#include "sha256.h"
+#include "lib/blake2/ref/blake2.h"
+
+int zpm_hash_mem(void *mem, size_t size, char *hash) {
+       struct blake2b_state__ blake;
+       int j;
+       unsigned char tmp[32];
+       
+       blake2b_init(&blake, sizeof tmp);
+       blake2b_update(&blake, mem, size);
+       blake2b_final(&blake, tmp, sizeof tmp);
+       for (j=0;j<32;j++) {
+               sprintf(hash+j*2, "%02x", (unsigned)tmp[j]);
+       }
+       return 1;
+}
 
 /* flags 0, close mmap, flags 1, return mmap fd */
 int zpm_hash(char *path, char *hash, uint32_t flags) {
        int fd;
        void *content;
        struct stat sbuf;
-       struct sha256_state md;
-       int j;
-       unsigned char tmp[32];
 
        /* mmap the file */
        fd = open(path, O_RDONLY);
@@ -48,13 +59,7 @@ int zpm_hash(char *path, char *hash, uint32_t flags) {
                return 0;
        }
 
-       /* get hash */
-       sha256_init(&md);
-       sha256_process(&md, content, sbuf.st_size);
-       sha256_done(&md, tmp);
-       for (j=0;j<32;j++) {
-               sprintf(hash+j*2, "%02x", (unsigned)tmp[j]);
-       }
+       zpm_hash_mem(content, sbuf.st_size, hash);
        hash[64] = 0;
        munmap(content, sbuf.st_size);
        return flags ? fd : 1;