]> pd.if.org Git - zpackage/blobdiff - src/hash.c
move C source files into src
[zpackage] / src / hash.c
diff --git a/src/hash.c b/src/hash.c
new file mode 100644 (file)
index 0000000..46c99d2
--- /dev/null
@@ -0,0 +1,49 @@
+#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;
+       }
+       rv = zpm_hash(av[1], hash, 0);
+       if (rv) {
+               printf("%s\n", hash);
+       }
+
+       return !rv;
+}