X-Git-Url: https://pd.if.org/git/?a=blobdiff_plain;f=zpm-hash.c;h=46c99d28399b5b352deef7c15d532ac99c82e26b;hb=4b448fbc77510c589cc7f367c05bef63acc07858;hp=31791b184a197fd3f16c8b55e0b9b69aaae22616;hpb=cfbebb05d00b06bd7ac644611d94f7f689451838;p=zpackage diff --git a/zpm-hash.c b/zpm-hash.c index 31791b1..46c99d2 100644 --- a/zpm-hash.c +++ b/zpm-hash.c @@ -1,11 +1,41 @@ #include #include +#include + #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; }