From d02531d4d299060f4eb3cd71aa45bdf6a5c2f604 Mon Sep 17 00:00:00 2001 From: Steffen Jaeckel Date: Mon, 1 May 2017 14:10:24 +0200 Subject: [PATCH 1/8] improve hashsum a bit --- demos/hashsum.c | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/demos/hashsum.c b/demos/hashsum.c index 5625329..ec901a0 100644 --- a/demos/hashsum.c +++ b/demos/hashsum.c @@ -9,6 +9,12 @@ #include +#if _POSIX_C_SOURCE >= 200112L +#include +#else +#define basename(x) x +#endif + int errno; void register_algs(void); @@ -22,24 +28,31 @@ int main(int argc, char **argv) /* You need to register algorithms before using them */ register_algs(); if (argc < 2) { - printf("usage: ./hash algorithm file [file ...]\n"); + printf("usage: %s algorithm file [file ...]\n", basename(argv[0])); printf("Algorithms:\n"); + w = 0; for (x = 0; hash_descriptor[x].name != NULL; x++) { - printf(" %s (%d)\n", hash_descriptor[x].name, hash_descriptor[x].ID); + w += printf("%-14s", hash_descriptor[x].name); + if (w >= 70) { + printf("\n"); + w = 0; + } } + printf("\n"); exit(EXIT_SUCCESS); } idx = find_hash(argv[1]); if (idx == -1) { fprintf(stderr, "\nInvalid hash specified on command line.\n"); - return -1; + return EXIT_FAILURE; } if (argc == 2) { w = sizeof(hash_buffer); if ((errno = hash_filehandle(idx, stdin, hash_buffer, &w)) != CRYPT_OK) { - printf("File hash error: %s\n", error_to_string(errno)); + fprintf(stderr, "File hash error: %s\n", error_to_string(errno)); + return EXIT_FAILURE; } else { for (x = 0; x < w; x++) { printf("%02x",hash_buffer[x]); @@ -50,7 +63,8 @@ int main(int argc, char **argv) for (z = 2; z < argc; z++) { w = sizeof(hash_buffer); if ((errno = hash_file(idx,argv[z],hash_buffer,&w)) != CRYPT_OK) { - printf("File hash error: %s\n", error_to_string(errno)); + fprintf(stderr, "File hash error: %s\n", error_to_string(errno)); + return EXIT_FAILURE; } else { for (x = 0; x < w; x++) { printf("%02x",hash_buffer[x]); From 31dcb9ff2a94a245ae96878c5de3512962ffa91c Mon Sep 17 00:00:00 2001 From: Steffen Jaeckel Date: Mon, 1 May 2017 21:42:12 +0200 Subject: [PATCH 2/8] only set outlen on success --- src/hashes/helper/hash_filehandle.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/hashes/helper/hash_filehandle.c b/src/hashes/helper/hash_filehandle.c index e1d037e..f1f29c0 100644 --- a/src/hashes/helper/hash_filehandle.c +++ b/src/hashes/helper/hash_filehandle.c @@ -52,14 +52,15 @@ int hash_filehandle(int hash, FILE *in, unsigned char *out, unsigned long *outle goto LBL_ERR; } - *outlen = hash_descriptor[hash].hashsize; do { x = fread(buf, 1, LTC_FILE_READ_BUFSIZE, in); if ((err = hash_descriptor[hash].process(&md, buf, (unsigned long)x)) != CRYPT_OK) { goto LBL_CLEANBUF; } } while (x == LTC_FILE_READ_BUFSIZE); - err = hash_descriptor[hash].done(&md, out); + if ((err = hash_descriptor[hash].done(&md, out)) == CRYPT_OK) { + *outlen = hash_descriptor[hash].hashsize; + } LBL_CLEANBUF: zeromem(buf, LTC_FILE_READ_BUFSIZE); From ea7115dc6588b6a3e6d0f2237fe3b9a0e03bd6ee Mon Sep 17 00:00:00 2001 From: Steffen Jaeckel Date: Mon, 1 May 2017 21:51:38 +0200 Subject: [PATCH 3/8] implement file checking --- demos/hashsum.c | 200 +++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 172 insertions(+), 28 deletions(-) diff --git a/demos/hashsum.c b/demos/hashsum.c index ec901a0..713c683 100644 --- a/demos/hashsum.c +++ b/demos/hashsum.c @@ -15,43 +15,189 @@ #define basename(x) x #endif -int errno; +/* thanks http://stackoverflow.com/a/8198009 */ +#define _base(x) ((x >= '0' && x <= '9') ? '0' : \ + (x >= 'a' && x <= 'f') ? 'a' - 10 : \ + (x >= 'A' && x <= 'F') ? 'A' - 10 : \ + '\255') +#define HEXOF(x) (x - _base(x)) -void register_algs(void); +static void register_algs(void); + +static char* hashsum; + +static void die(int status) +{ + unsigned long w, x; + FILE* o = status == EXIT_SUCCESS ? stdout : stderr; + fprintf(o, "usage: %s -a algorithm [-c] [file...]\n", hashsum); + fprintf(o, "Algorithms:\n"); + w = 0; + for (x = 0; hash_descriptor[x].name != NULL; x++) { + w += fprintf(o, "%-14s", hash_descriptor[x].name); + if (w >= 70) { + fprintf(o, "\n"); + w = 0; + } + } + if (w != 0) fprintf(o, "\n"); + free(hashsum); + exit(status); +} + +static void printf_hex(unsigned char* hash_buffer, unsigned long w) +{ + unsigned long x; + for (x = 0; x < w; x++) { + printf("%02x",hash_buffer[x]); + } +} + +static void check_file(int argn, int argc, char **argv) +{ + int err, failed, invalid; + unsigned char is_buffer[MAXBLOCKSIZE], should_buffer[MAXBLOCKSIZE]; + char buf[PATH_MAX + (MAXBLOCKSIZE * 3)]; + /* iterate through all files */ + while(argn < argc) { + char* s; + FILE* f = fopen(argv[argn], "rb"); + if(f == NULL) { + int n = snprintf(buf, sizeof(buf), "%s: %s", hashsum, argv[argn]); + if (n > 0 && n < (int)sizeof(buf)) + perror(buf); + else + perror(argv[argn]); + exit(EXIT_FAILURE); + } + failed = 0; + invalid = 0; + /* read the file line by line */ + while((s = fgets(buf, sizeof(buf), f)) != NULL) + { + int tries, n; + unsigned long hash_len, w, x; + char* space = strstr(s, " "); + if (space == NULL) { + fprintf(stderr, "%s: no properly formatted checksum lines found\n", hashsum); + goto ERR; + } + + hash_len = space - s; + hash_len /= 2; + + /* convert the hex-string back to binary */ + for (x = 0; x < hash_len; ++x) { + should_buffer[x] = HEXOF(s[x*2]) << 4 | HEXOF(s[x*2 + 1]); + } + + space++; + if (*space != '*') { + fprintf(stderr, "%s: unsupported input mode '%c'\n", hashsum, *space); + goto ERR; + } + space++; + + for (n = 0; n < (buf + sizeof(buf)) - space; ++n) { + if(iscntrl(space[n])) { + space[n] = '\0'; + break; + } + } + + /* try all hash algorithms that have the appropriate hash size */ + tries = 0; + for (x = 0; hash_descriptor[x].name != NULL; ++x) { + if (hash_descriptor[x].hashsize == hash_len) { + tries++; + w = sizeof(is_buffer); + if ((err = hash_file(x, space, is_buffer, &w)) != CRYPT_OK) { + fprintf(stderr, "File hash error: %s: %s\n", space, error_to_string(err)); +ERR: + fclose(f); + exit(EXIT_FAILURE); + } + if(XMEMCMP(should_buffer, is_buffer, w) == 0) { + printf("%s: OK\n", space); + break; + } + } + } /* for */ + if (hash_descriptor[x].name == NULL) { + if(tries > 0) { + printf("%s: FAILED\n", space); + failed++; + } + else { + invalid++; + } + } + } /* while */ + fclose(f); + if(invalid) { + fprintf(stderr, "%s: WARNING: %d %s is improperly formatted\n", hashsum, invalid, invalid > 1?"lines":"line"); + } + if(failed) { + fprintf(stderr, "%s: WARNING: %d computed %s did NOT match\n", hashsum, failed, failed > 1?"checksums":"checksum"); + } + argn++; + } + exit(EXIT_SUCCESS); +} int main(int argc, char **argv) { - int idx, z; + int idx, check, z, err, argn; unsigned long w, x; unsigned char hash_buffer[MAXBLOCKSIZE]; + hashsum = strdup(basename(argv[0])); + /* You need to register algorithms before using them */ register_algs(); - if (argc < 2) { - printf("usage: %s algorithm file [file ...]\n", basename(argv[0])); - printf("Algorithms:\n"); - w = 0; - for (x = 0; hash_descriptor[x].name != NULL; x++) { - w += printf("%-14s", hash_descriptor[x].name); - if (w >= 70) { - printf("\n"); - w = 0; + if (argc > 1 && (strcmp("-h", argv[1]) == 0 || strcmp("--help", argv[1]) == 0)) { + die(EXIT_SUCCESS); + } + if (argc < 3) { + die(EXIT_FAILURE); + } + + argn = 1; + check = 0; + idx = -2; + + while(argn < argc){ + if(strcmp("-a", argv[argn]) == 0) { + argn++; + if(argn < argc) { + idx = find_hash(argv[argn]); + if (idx == -1) { + fprintf(stderr, "\nInvalid hash (%s) specified on command line.\n", argv[2]); + die(EXIT_FAILURE); + } + argn++; + continue; + } + else { + die(EXIT_FAILURE); } } - printf("\n"); - exit(EXIT_SUCCESS); + if(strcmp("-c", argv[argn]) == 0) { + check = 1; + argn++; + continue; + } + break; } - idx = find_hash(argv[1]); - if (idx == -1) { - fprintf(stderr, "\nInvalid hash specified on command line.\n"); - return EXIT_FAILURE; + if (check == 1) { + check_file(argn, argc, argv); } - if (argc == 2) { + if (argc == argn) { w = sizeof(hash_buffer); - if ((errno = hash_filehandle(idx, stdin, hash_buffer, &w)) != CRYPT_OK) { - fprintf(stderr, "File hash error: %s\n", error_to_string(errno)); + if ((err = hash_filehandle(idx, stdin, hash_buffer, &w)) != CRYPT_OK) { + fprintf(stderr, "File hash error: %s\n", error_to_string(err)); return EXIT_FAILURE; } else { for (x = 0; x < w; x++) { @@ -60,15 +206,13 @@ int main(int argc, char **argv) printf(" *-\n"); } } else { - for (z = 2; z < argc; z++) { + for (z = 3; z < argc; z++) { w = sizeof(hash_buffer); - if ((errno = hash_file(idx,argv[z],hash_buffer,&w)) != CRYPT_OK) { - fprintf(stderr, "File hash error: %s\n", error_to_string(errno)); + if ((err = hash_file(idx,argv[z],hash_buffer,&w)) != CRYPT_OK) { + fprintf(stderr, "File hash error: %s\n", error_to_string(err)); return EXIT_FAILURE; } else { - for (x = 0; x < w; x++) { - printf("%02x",hash_buffer[x]); - } + printf_hex(hash_buffer, w); printf(" *%s\n", argv[z]); } } @@ -76,7 +220,7 @@ int main(int argc, char **argv) return EXIT_SUCCESS; } -void register_algs(void) +static void register_algs(void) { int err; LTC_UNUSED_PARAM(err); From 9893566ae9788289dc13165f25cbf60d4a8a163a Mon Sep 17 00:00:00 2001 From: Steffen Jaeckel Date: Mon, 1 May 2017 21:58:21 +0200 Subject: [PATCH 4/8] add `shasum` compatibility for '-a' option --- demos/hashsum.c | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/demos/hashsum.c b/demos/hashsum.c index 713c683..8d15476 100644 --- a/demos/hashsum.c +++ b/demos/hashsum.c @@ -171,6 +171,27 @@ int main(int argc, char **argv) argn++; if(argn < argc) { idx = find_hash(argv[argn]); + if (idx == -1) { + struct { + const char* is; + const char* should; + } shasum_compat[] = + { + { "1", sha1_desc.name }, + { "224", sha224_desc.name }, + { "256", sha256_desc.name }, + { "384", sha384_desc.name }, + { "512", sha512_desc.name }, + { "512224", sha512_224_desc.name }, + { "512256", sha512_256_desc.name }, + }; + for (x = 0; x < sizeof(shasum_compat)/sizeof(shasum_compat[0]); ++x) { + if(XSTRCMP(shasum_compat[x].is, argv[argn]) == 0) { + idx = find_hash(shasum_compat[x].should); + break; + } + } + } if (idx == -1) { fprintf(stderr, "\nInvalid hash (%s) specified on command line.\n", argv[2]); die(EXIT_FAILURE); From 28f8a85246bc646899d0555dd7b99c3f854a5300 Mon Sep 17 00:00:00 2001 From: Steffen Jaeckel Date: Tue, 2 May 2017 00:01:30 +0200 Subject: [PATCH 5/8] update coverage.sh * hashsum requires now a '-a' option flag for the algorithm * '-h' is required to output the list of algorithms to stdout * the algorithms are printed in columns, so we have to sort differently --- coverage.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/coverage.sh b/coverage.sh index d089ff6..a17c97d 100755 --- a/coverage.sh +++ b/coverage.sh @@ -32,7 +32,7 @@ fi ./sizes ./constants -for i in $(./hashsum | tail -n +3 | awk '{print $1}' | sort); do echo -n "$i: " && ./hashsum $i testprof/test.key ; done > hashsum_tv.txt +for i in $(for j in $(echo $(./hashsum -h | tail -n +3)); do echo $j; done | sort); do echo -n "$i: " && ./hashsum -a $i testprof/test.key ; done > hashsum_tv.txt difftroubles=$(diff -i -w -B hashsum_tv.txt notes/hashsum_tv.txt | grep '^<') || true if [ -n "$difftroubles" ]; then echo "FAILURE: hashsum_tv.tx" From b472ef31a20d76004f1ecbd6812446e67f9ca867 Mon Sep 17 00:00:00 2001 From: Steffen Jaeckel Date: Tue, 2 May 2017 00:02:48 +0200 Subject: [PATCH 6/8] looks like the previous output was not really `shaXsum` compatible... --- notes/hashsum_tv.txt | 58 ++++++++++++++++++++++---------------------- 1 file changed, 29 insertions(+), 29 deletions(-) diff --git a/notes/hashsum_tv.txt b/notes/hashsum_tv.txt index c2a58b4..228d9f0 100644 --- a/notes/hashsum_tv.txt +++ b/notes/hashsum_tv.txt @@ -1,29 +1,29 @@ -blake2b-160: 684b540eb245ebba2cd66b7814fe6d787868a5bb *testprof/test.key -blake2b-256: 3aaa08120aa0174c105fd1f3412e3da30c3bbb9073569b0b8ae458b34de7780e *testprof/test.key -blake2b-384: c33f39ab19099d5dea6789479e23447857803a3f45361ea58dd69c7b8037c8697544b6a741e236215adcb8b38fa0cfc4 *testprof/test.key -blake2b-512: a2daabae6996e3bbfb76c5d277fb881107037c756173f510d83a78f669cf0b70a5088b971e30ca2168381568ea3d30b80a7b500944a5e2e3294f25aed4c3a5f1 *testprof/test.key -blake2s-128: 7e1f9b6de11a3c597308f9d8aacd7321 *testprof/test.key -blake2s-160: 3d1c9ae1a0afe8a6ef8b61d5380de7b061cd353c *testprof/test.key -blake2s-224: 95dacd83d0421b2d69a52d92ee54143bb97c91a61450d917a88d4388 *testprof/test.key -blake2s-256: 92ac6dc88b9ce4a75b2a54783435a37919303f713396db0e9ccd976d8c55f1cf *testprof/test.key -chc_hash: d50da1ea9b53c0b891c8bcb0a4c6e5e0 *testprof/test.key -md2: 0b327a17a102580ccde8081c18f137c7 *testprof/test.key -md4: 6df7b3c1f7fbcbf6b8246dc0046e9d6b *testprof/test.key -md5: 48fd9ed11c633069c3cf721611696a73 *testprof/test.key -rmd128: a78170e11d56605eb0f5e05e6a218e61 *testprof/test.key -rmd160: 56236b14cd15958c58136a295fa2b07c5edee009 *testprof/test.key -rmd256: a0a658b25b8841f20be8151eb5e2c1229f085dd5cf7aa8bef4c8e07ea5738913 *testprof/test.key -rmd320: 2ec15ca947f29dd8cef4782aeaeb4541ac00dc29e1649c4f5f4578ef0287091e513f9da423ce7319 *testprof/test.key -sha1: c17a11eef02d7a2ad7250bc2ee22bdf37ed21f0f *testprof/test.key -sha224: b226daa069512c849d55866470c23543d87e1fb768171efdcc6ab59a *testprof/test.key -sha256: 76ec7faebdc42a4de35ca70024c2d273e9f7856ca61612e89f5f66350ba8cf5f *testprof/test.key -sha3-224: 09525d6410c462e00e72ccd4304290bc59ff2b1b8e5322dbc197e169 *testprof/test.key -sha3-256: b9016fc9976545ad0183775d88f20df5295d40b31db00d85f6916333260b8ae2 *testprof/test.key -sha3-384: 5452977763b602df4185bbe7cce193346b09ee20d4a45a780fd44237e335ceaa71b9da06242621e159d796db9043c9be *testprof/test.key -sha3-512: 1fadf63073c8613d38d5c944e2e3f7e086d94d93dceb2eec1e9693fd44158f3127c90cbaa8a13035cc9ff9b3572c9dce836bea15c92e8a78b036ec382caceb0f *testprof/test.key -sha384: 7cc080c662524617e56d5a49f1c185909e9b1858a86684161ddd97fc5426f693b53f59d779de16da25dcb1259df879e5 *testprof/test.key -sha512: f90afe4d254716a9770fd2c4f29ca544f2975f961cbd7fa207117383e4e48f7a2e1ade4aac333a2cb8c227dd6af2fff4d87c31c2a3916ae24d507c7c94c21818 *testprof/test.key -sha512-224: 64ec566b5c2de736eab1b4e8542dc110f736819ea7f8f48e3712fbad *testprof/test.key -sha512-256: db880bce4beb7246510febb961c7595aab57a15de6f90cd079f145e476b5d773 *testprof/test.key -tiger: 97d713850e7affac30a642572c1ee7b18793d5b9e0ef5932 *testprof/test.key -whirlpool: d7d41c755e0f28313f254cb198e0bfa42f56670595d97b80dceec754825d69938a9c11e5bf16e9a3809a62a09bddf021f3dbff4302ceec7ba46c88b41772b711 *testprof/test.key +blake2b-160: 684b540eb245ebba2cd66b7814fe6d787868a5bb *testprof/test.key +blake2b-256: 3aaa08120aa0174c105fd1f3412e3da30c3bbb9073569b0b8ae458b34de7780e *testprof/test.key +blake2b-384: c33f39ab19099d5dea6789479e23447857803a3f45361ea58dd69c7b8037c8697544b6a741e236215adcb8b38fa0cfc4 *testprof/test.key +blake2b-512: a2daabae6996e3bbfb76c5d277fb881107037c756173f510d83a78f669cf0b70a5088b971e30ca2168381568ea3d30b80a7b500944a5e2e3294f25aed4c3a5f1 *testprof/test.key +blake2s-128: 7e1f9b6de11a3c597308f9d8aacd7321 *testprof/test.key +blake2s-160: 3d1c9ae1a0afe8a6ef8b61d5380de7b061cd353c *testprof/test.key +blake2s-224: 95dacd83d0421b2d69a52d92ee54143bb97c91a61450d917a88d4388 *testprof/test.key +blake2s-256: 92ac6dc88b9ce4a75b2a54783435a37919303f713396db0e9ccd976d8c55f1cf *testprof/test.key +chc_hash: d50da1ea9b53c0b891c8bcb0a4c6e5e0 *testprof/test.key +md2: 0b327a17a102580ccde8081c18f137c7 *testprof/test.key +md4: 6df7b3c1f7fbcbf6b8246dc0046e9d6b *testprof/test.key +md5: 48fd9ed11c633069c3cf721611696a73 *testprof/test.key +rmd128: a78170e11d56605eb0f5e05e6a218e61 *testprof/test.key +rmd160: 56236b14cd15958c58136a295fa2b07c5edee009 *testprof/test.key +rmd256: a0a658b25b8841f20be8151eb5e2c1229f085dd5cf7aa8bef4c8e07ea5738913 *testprof/test.key +rmd320: 2ec15ca947f29dd8cef4782aeaeb4541ac00dc29e1649c4f5f4578ef0287091e513f9da423ce7319 *testprof/test.key +sha1: c17a11eef02d7a2ad7250bc2ee22bdf37ed21f0f *testprof/test.key +sha224: b226daa069512c849d55866470c23543d87e1fb768171efdcc6ab59a *testprof/test.key +sha256: 76ec7faebdc42a4de35ca70024c2d273e9f7856ca61612e89f5f66350ba8cf5f *testprof/test.key +sha3-224: 09525d6410c462e00e72ccd4304290bc59ff2b1b8e5322dbc197e169 *testprof/test.key +sha3-256: b9016fc9976545ad0183775d88f20df5295d40b31db00d85f6916333260b8ae2 *testprof/test.key +sha3-384: 5452977763b602df4185bbe7cce193346b09ee20d4a45a780fd44237e335ceaa71b9da06242621e159d796db9043c9be *testprof/test.key +sha3-512: 1fadf63073c8613d38d5c944e2e3f7e086d94d93dceb2eec1e9693fd44158f3127c90cbaa8a13035cc9ff9b3572c9dce836bea15c92e8a78b036ec382caceb0f *testprof/test.key +sha384: 7cc080c662524617e56d5a49f1c185909e9b1858a86684161ddd97fc5426f693b53f59d779de16da25dcb1259df879e5 *testprof/test.key +sha512: f90afe4d254716a9770fd2c4f29ca544f2975f961cbd7fa207117383e4e48f7a2e1ade4aac333a2cb8c227dd6af2fff4d87c31c2a3916ae24d507c7c94c21818 *testprof/test.key +sha512-224: 64ec566b5c2de736eab1b4e8542dc110f736819ea7f8f48e3712fbad *testprof/test.key +sha512-256: db880bce4beb7246510febb961c7595aab57a15de6f90cd079f145e476b5d773 *testprof/test.key +tiger: 97d713850e7affac30a642572c1ee7b18793d5b9e0ef5932 *testprof/test.key +whirlpool: d7d41c755e0f28313f254cb198e0bfa42f56670595d97b80dceec754825d69938a9c11e5bf16e9a3809a62a09bddf021f3dbff4302ceec7ba46c88b41772b711 *testprof/test.key From e9923129c86b2f66738cb3155e58816946867147 Mon Sep 17 00:00:00 2001 From: Steffen Jaeckel Date: Tue, 2 May 2017 01:09:01 +0200 Subject: [PATCH 7/8] fix LTC_EASY compilation --- demos/hashsum.c | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/demos/hashsum.c b/demos/hashsum.c index 8d15476..cdb8af8 100644 --- a/demos/hashsum.c +++ b/demos/hashsum.c @@ -177,15 +177,30 @@ int main(int argc, char **argv) const char* should; } shasum_compat[] = { +#ifdef LTC_SHA1 { "1", sha1_desc.name }, +#endif +#ifdef LTC_SHA224 { "224", sha224_desc.name }, +#endif +#ifdef LTC_SHA256 { "256", sha256_desc.name }, +#endif +#ifdef LTC_SHA384 { "384", sha384_desc.name }, +#endif +#ifdef LTC_SHA512 { "512", sha512_desc.name }, +#endif +#ifdef LTC_SHA512_224 { "512224", sha512_224_desc.name }, +#endif +#ifdef LTC_SHA512_256 { "512256", sha512_256_desc.name }, +#endif + { NULL, NULL } }; - for (x = 0; x < sizeof(shasum_compat)/sizeof(shasum_compat[0]); ++x) { + for (x = 0; shasum_compat[x].is != NULL; ++x) { if(XSTRCMP(shasum_compat[x].is, argv[argn]) == 0) { idx = find_hash(shasum_compat[x].should); break; @@ -193,7 +208,7 @@ int main(int argc, char **argv) } } if (idx == -1) { - fprintf(stderr, "\nInvalid hash (%s) specified on command line.\n", argv[2]); + fprintf(stderr, "Invalid hash (%s) specified on command line.\n", argv[2]); die(EXIT_FAILURE); } argn++; From 85c2186ae64c4fbfe5506da5251c3c95f003682b Mon Sep 17 00:00:00 2001 From: Steffen Jaeckel Date: Tue, 2 May 2017 01:13:35 +0200 Subject: [PATCH 8/8] better output on stderr --- demos/hashsum.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/demos/hashsum.c b/demos/hashsum.c index cdb8af8..c3824d5 100644 --- a/demos/hashsum.c +++ b/demos/hashsum.c @@ -112,7 +112,7 @@ static void check_file(int argn, int argc, char **argv) tries++; w = sizeof(is_buffer); if ((err = hash_file(x, space, is_buffer, &w)) != CRYPT_OK) { - fprintf(stderr, "File hash error: %s: %s\n", space, error_to_string(err)); + fprintf(stderr, "%s: File hash error: %s: %s\n", hashsum, space, error_to_string(err)); ERR: fclose(f); exit(EXIT_FAILURE); @@ -208,7 +208,7 @@ int main(int argc, char **argv) } } if (idx == -1) { - fprintf(stderr, "Invalid hash (%s) specified on command line.\n", argv[2]); + fprintf(stderr, "%s: Unrecognized algorithm\n", hashsum); die(EXIT_FAILURE); } argn++; @@ -233,7 +233,7 @@ int main(int argc, char **argv) if (argc == argn) { w = sizeof(hash_buffer); if ((err = hash_filehandle(idx, stdin, hash_buffer, &w)) != CRYPT_OK) { - fprintf(stderr, "File hash error: %s\n", error_to_string(err)); + fprintf(stderr, "%s: File hash error: %s\n", hashsum, error_to_string(err)); return EXIT_FAILURE; } else { for (x = 0; x < w; x++) { @@ -245,7 +245,7 @@ int main(int argc, char **argv) for (z = 3; z < argc; z++) { w = sizeof(hash_buffer); if ((err = hash_file(idx,argv[z],hash_buffer,&w)) != CRYPT_OK) { - fprintf(stderr, "File hash error: %s\n", error_to_string(err)); + fprintf(stderr, "%s: File hash error: %s\n", hashsum, error_to_string(err)); return EXIT_FAILURE; } else { printf_hex(hash_buffer, w);