--- /dev/null
+#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;
+}