From 4efa2cf91ddcce727fd66be55f504510b6400b8b Mon Sep 17 00:00:00 2001 From: Nathan Wagner Date: Fri, 3 Mar 2017 05:47:58 -0600 Subject: [PATCH] add hashing stdin to zpm-hash --- t/hash.t | 7 ++++++- zpm-hash.c | 28 ++++++++++++++++++++++++++++ 2 files changed, 34 insertions(+), 1 deletion(-) diff --git a/t/hash.t b/t/hash.t index 48006db..c727066 100755 --- a/t/hash.t +++ b/t/hash.t @@ -9,7 +9,7 @@ vtest() { okstreq "$res" "$2" "$1 == $2" } -plan 2 +plan 4 printf '' > hash.test vtest hash.test e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 @@ -18,5 +18,10 @@ vtest hash.test b5bb9d8014a0f9b1d61e21e796d78dccdf1352f23cd32812f4850b878ae4944c rm hash.test +res=$(printf 'foo\n' | zpm-hash) +okstreq $res b5bb9d8014a0f9b1d61e21e796d78dccdf1352f23cd32812f4850b878ae4944c + +res=$(printf 'foo\n' | zpm-hash -) +okstreq $res b5bb9d8014a0f9b1d61e21e796d78dccdf1352f23cd32812f4850b878ae4944c finish diff --git a/zpm-hash.c b/zpm-hash.c index 31791b1..f3578c7 100644 --- a/zpm-hash.c +++ b/zpm-hash.c @@ -1,11 +1,39 @@ #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], "-"))) { + 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; -- 2.40.0