okstreq "$res" "$2" "$1 == $2"
}
-plan 2
+plan 4
printf '' > hash.test
vtest hash.test e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
rm hash.test
+res=$(printf 'foo\n' | zpm-hash)
+okstreq $res b5bb9d8014a0f9b1d61e21e796d78dccdf1352f23cd32812f4850b878ae4944c
+
+res=$(printf 'foo\n' | zpm-hash -)
+okstreq $res b5bb9d8014a0f9b1d61e21e796d78dccdf1352f23cd32812f4850b878ae4944c
finish
#include <stdlib.h>
#include <stdio.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], "-"))) {
+ hash_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;