]> pd.if.org Git - zpackage/blobdiff - zpm-hash.c
implement trust on first use
[zpackage] / zpm-hash.c
index 31791b184a197fd3f16c8b55e0b9b69aaae22616..46c99d28399b5b352deef7c15d532ac99c82e26b 100644 (file)
@@ -1,11 +1,41 @@
 #include <stdlib.h>
 #include <stdio.h>
+#include <string.h>
+
 #include "zpm.h"
+#include "sha256.h"
 
 int main(int ac, char **av){
        int rv;
        char hash[65];
 
+       /*
+        * hash stdin
+        */
+       if (ac == 1 || (ac == 2 && !strcmp(av[1], "-"))) {
+               struct sha256_state md;
+               unsigned char buf[4096];
+               size_t bytes;
+               unsigned char tmp[32];
+               int j;
+
+               sha256_init(&md);
+               do {
+                       bytes = fread(buf, 1, sizeof buf, stdin);
+                       sha256_process(&md, buf, bytes);
+               } while (bytes && !feof(stdin));
+               if (ferror(stdin)) {
+                       exit(1);
+               }
+               sha256_done(&md, tmp);
+               for (j=0;j<32;j++) {
+                       sprintf(hash+j*2, "%02x", (unsigned)tmp[j]);
+               }
+               hash[64] = 0;
+               printf("%s\n", hash);
+               return 0;
+       }
+
        if (ac < 2) {
                fprintf(stderr, "usage: path\n");
                return 1;
@@ -15,5 +45,5 @@ int main(int ac, char **av){
                printf("%s\n", hash);
        }
 
-       return rv;
+       return !rv;
 }