Hashing cmdline strings added.
[skeinsum.git] / skein_cli.c
index 39e5ea03b2018c12f43f5b05892ea28af5b14d71..e95f4b60844f9e90db443def874a87c9e453d678 100644 (file)
@@ -386,6 +386,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"
@@ -448,10 +449,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,6 +474,23 @@ int main(int argc, char** argv)
  ************************************* PROCESSING DATA ***********************************
  *****************************************************************************************/
 
+       if (hashString > 0)
+       {
+               int n = first_file;
+               if (n >= argc) {
+                       WARN("command line should contain strings for hashing\n");
+                       TRYHELP_GOODBYE();
+               }
+               for( ; n < argc; n++) {
+                       unsigned char output[hashbitlen/4];
+                       char digest[hashbitlen/4 + 1];
+                       Hash(hashbitlen, argv[n], strlen(argv[n]), output);
+                       hash2hexstr(output, digest);
+                       printf("%s -%s\n", digest, argv[n]);
+               }
+               return 0;
+       }
+
        if (check < 0)   /* READ FILES, GENERATE CHECKSUMS AND PRINT TO STDOUT.. */
        {
                if (quiet == 1 || warn == 1 || status == 1)