X-Git-Url: https://jxself.org/git/?p=skeinsum.git;a=blobdiff_plain;f=skein_cli.c;h=4378da620f85a029f7f9f90f68d1591cd2a07dee;hp=39e5ea03b2018c12f43f5b05892ea28af5b14d71;hb=d0b6f05c608f64a734cca9405f373312ce119730;hpb=941b27c79189de1beba6f8874e833c02632ea132 diff --git a/skein_cli.c b/skein_cli.c index 39e5ea0..4378da6 100644 --- a/skein_cli.c +++ b/skein_cli.c @@ -166,7 +166,7 @@ int HashFile(const char file_name[], char MsgDigest[], char mode) } unsigned char output[hashbitlen/4]; - Hash(hashbitlen, (unsigned char*) readbuf, total_readed, output); + Hash(hashbitlen, (unsigned char*) readbuf, total_readed * 8, output); free(readbuf); @@ -366,6 +366,15 @@ int VerifyHashesFromFile(FILE *fp, int status, int warn, int quiet) return (NotProper || NoMatch) ? -1 : 1; } +void PrintStringHash(const char *s) +{ + unsigned char output[hashbitlen/4]; + char digest[hashbitlen/4 + 1]; + Hash(hashbitlen, s, strlen(s) * 8, output); + hash2hexstr(output, digest); + printf("%s -%s\n", digest, s); +} + void print_version(void) { printf("skein%dsum 1.0\n", hashbitlen); @@ -386,6 +395,7 @@ void print_usage(void) "-c, --check read skein sums from the FILEs and check them\n" "--tag create a BSD-style checksum\n" "-t, --text read in text mode (default)\n" + "-0 hash strings from command line\n" "\n" "The following three options are useful only when verifying checksums:\n" "--quiet don't print OK for each successfully verified file\n" @@ -431,6 +441,27 @@ int is_goodfile(const char filename[]) return 1; /* try it as good */ } +int warn_check_opts(int quiet, int warn, int status) +{ + int n = 0; + if(quiet == 1) + n = WARN("the --quiet option is meaningful only when verifying checksums\n"); + if(status ==1) + n = WARN("the --status option is meaningful only when verifying checksums\n"); + if(warn == 1) + n = WARN("the --warn option is meaningful only when verifying checksums\n"); + return n; +} + +int warn_gen_opts(int tag, int binary) +{ + int n = 0; + if (tag == 1) + n = WARN("the --tag option is meaningful only when calculating file checksums\n"); + if (binary >= 0) + n = WARN("the --text and --binary options are meaningful only when calculating file checksums\n"); + return n; +} int main(int argc, char** argv) { @@ -448,10 +479,10 @@ int main(int argc, char** argv) /***************************************************************************************** ************************************* GETTING DATA *********************************** *****************************************************************************************/ - while ((opt = getopt_long (argc, argv, "hVbctw", long_options, NULL)) != -1) + while ((opt = getopt_long (argc, argv, "hVbctw0", long_options, NULL)) != -1) { switch (opt) { - case 0 : hashString = 1; break; + case '0' : hashString = 1; break; case 'b' : binary = 1; break; case 't' : binary = 0; break; case 'c' : check = 1; break; @@ -473,18 +504,25 @@ int main(int argc, char** argv) ************************************* PROCESSING DATA *********************************** *****************************************************************************************/ - if (check < 0) /* READ FILES, GENERATE CHECKSUMS AND PRINT TO STDOUT.. */ + if (hashString > 0) { - if (quiet == 1 || warn == 1 || status == 1) - { - if(quiet == 1) - WARN("the --quiet option is meaningful only when verifying checksums\n"); - if(status ==1) - WARN("the --status option is meaningful only when verifying checksums\n"); - if(warn == 1) - WARN("the --warn option is meaningful only when verifying checksums\n"); + if (warn_check_opts(quiet, warn, status) + warn_gen_opts(tag, binary)) + TRYHELP_GOODBYE(); + + int n = first_file; + if (n >= argc) { + WARN("command line should contain strings for hashing\n"); TRYHELP_GOODBYE(); } + while (n < argc) + PrintStringHash(argv[n++]); + return 0; + } + + if (check < 0) /* READ FILES, GENERATE CHECKSUMS AND PRINT TO STDOUT.. */ + { + if (warn_check_opts(quiet, warn, status)) + TRYHELP_GOODBYE(); char mode = binary > 0 ? 'b' : 't'; @@ -515,14 +553,8 @@ int main(int argc, char** argv) if (check == 1) /* READ LISTFILES, GENERATE HASHES, COMPARE WITH STORED, PRINT RESULT */ { - if (tag == 1 || binary >= 0) - { - if (tag == 1) - WARN("the --tag option is meaningless when verifying checksums\n"); - if (binary >= 0) - WARN("the --text and --binary options are meaningless when verifying checksums\n"); + if (warn_gen_opts(tag, binary)) TRYHELP_GOODBYE(); - } int file_index; for (file_index = first_file; file_index < argc; file_index++)