#include <errno.h>
#include "SHA3api_ref.h"
+#define TRYHELP_GOODBYE() do { printf("Try 'skein%dsum --help' for more information.\n", hashbitlen); exit(1); } while(0)
+
extern const int hashbitlen;
#define MaxNmberFiles 10
static struct option const long_options[] =
{
- { "binary", no_argument, NULL, 'b' },
- { "check", no_argument, NULL, 'c' },
- { "quiet", no_argument, NULL, QUIET_OPTION },
- { "status", no_argument, NULL, STATUS_OPTION },
- { "text", no_argument, NULL, 't' },
- { "warn", no_argument, NULL, 'w' },
- { "tag", no_argument, NULL, TAG_OPTION },
- { "help", no_argument, NULL, HELP_OPTION },
+ { "binary", no_argument, NULL, 'b' },
+ { "check", no_argument, NULL, 'c' },
+ { "quiet", no_argument, NULL, QUIET_OPTION },
+ { "status", no_argument, NULL, STATUS_OPTION },
+ { "text", no_argument, NULL, 't' },
+ { "warn", no_argument, NULL, 'w' },
+ { "tag", no_argument, NULL, TAG_OPTION },
+ { "help", no_argument, NULL, HELP_OPTION },
{ "version", no_argument, NULL, VERSION_OPTION },
{ NULL, 0, NULL, 0 }
};
return HashWithMode(file_name, MsgDigest, 'b');
}
-int HashStringMode(char Msg[],char MsgDigest[])
+void HashStringMode(char Msg[],char MsgDigest[])
{
unsigned char output[hashbitlen/4];
Hash(hashbitlen,(unsigned char*) Msg,sizeof(Msg),output);
printHexMsg(output,hashbitlen/4,MsgDigest);
- return 1;
+}
+
+void HashStdin(char MsgDigest[], int tag)
+{
+ char stri[100];
+ char longstring[1000];
+ longstring[0] = 0;
+ while(fgets(stri,100,stdin))
+ strcat(longstring, stri);
+ HashStringMode(longstring, MsgDigest);
+ if (tag) {
+ printf("skein%d_v%s (-) = %s\n", hashbitlen, skeinVersion, MsgDigest);
+ } else {
+ printf("%s *-\n", MsgDigest);
+ }
}
int isProper(char MsgDigest[])
case HELP_OPTION : print_usage(); /* ..never returns */
case VERSION_OPTION : print_version(); /* ..never returns */
- default:
- printf("Try `skein%dsum --help' for more information.\n",hashbitlen);
- exit(1);
+ default: TRYHELP_GOODBYE();
}
}
if (check == 1 || quiet == 1 || warn == 1 || status == 1)
{
printf("skein%dsum: the --binary and --text options are meaningless when verifying checksums\n",hashbitlen);
- printf("Try 'skein%dsum --help' for more information.\n",hashbitlen);
- exit(0);
+ TRYHELP_GOODBYE();
}
if(number_files > 0)
{
}
}
else if(errorFound != 1)
- { // read stdin for strings
- char stri[100];
- char longstring[1000];
- longstring[0] = 0;
- while((fgets(stri,100,stdin))!=NULL)
- {
- strcat(longstring,stri);
- }
- HashStringMode(longstring,MsgDigest);
- if(tag == 1)
- {
- printf("skein%d_v%s (-) = %s\n",hashbitlen,skeinVersion,MsgDigest);
- }
- else
- {
- printf("%s *-\n",MsgDigest);
- }
+ {
+ HashStdin(MsgDigest, tag);
}
}
if (check == 1 || quiet == 1 || warn == 1 || status == 1)
{
printf("skein%dsum: the --binary and --text options are meaningless when verifying checksums\n",hashbitlen);
- printf("Try 'skein%dsum --help' for more information.\n",hashbitlen);
- exit(0);
+ TRYHELP_GOODBYE();
}
if(number_files > 0)
{
}
}
else if(errorFound != 1)
- { // read stdin for strings
- char stri[100];
- char longstring[1000];
- longstring[0] = 0;
- while((fgets(stri,100,stdin))!=NULL)
- {
- strcat(longstring,stri);
- }
- HashStringMode(longstring,MsgDigest);
- if(tag == 1)
- {
- printf("skein%d_v%s (-) = %s\n",hashbitlen,skeinVersion,MsgDigest);
- }
- else
- {
- printf("%s -\n",MsgDigest);
- }
+ {
+ HashStdin(MsgDigest, tag);
}
}
printf("skein%dsum: the --status option is meaningful only when verifying checksums\n",hashbitlen);
if(warn == 1)
printf("skein%dsum: the --warn option is meaningful only when verifying checksums\n",hashbitlen);
-
- printf("Try 'skein%dsum --help' for more information.\n",hashbitlen);
- exit(1);
+ TRYHELP_GOODBYE();
}
if(number_files > 0)
{// hashing files
}
}
else if(errorFound != 1)
- { // hasing strings read from stdin
- char stri[100];
- char longstring[1000]; /* TODO!!! Fix buffer overflow!!! */
- longstring[0] = 0;
- while((fgets(stri,100,stdin))!=NULL)
- {
- strcat(longstring,stri);
- }
- HashStringMode(longstring,MsgDigest);
- if(tag == 1)
- {
- printf("skein%d_v%s (-) = %s\n",hashbitlen,skeinVersion,MsgDigest);
- }
- else
- {
- printf("%s -\n",MsgDigest);
- }
+ {
+ HashStdin(MsgDigest, tag);
}
}
else if(check == 1)
if(tag == 1)
{
printf("skein%dsum: the --tag option is meaningless when verifying checksums\n",hashbitlen);
- printf("Try 'skein%dsum --help' for more information\n",hashbitlen);
- exit(1);
+ TRYHELP_GOODBYE();
}
int index_files = 0;
while(index_files < number_files)
}
}
- if ((errorFound != 1) && (argc == 1 || (hashString == 1 && number_files == 0)))
- {
- char stri[100];
- char longstring[1000];
- longstring[0] = 0;
- while((fgets(stri,100,stdin))!=NULL)
- {
- strcat(longstring,stri);
- }
- HashStringMode(longstring,MsgDigest);
- printf("%s -\n",MsgDigest);
- }
+ if (!errorFound && (argc == 1 || (hashString == 1 && !number_files)))
+ HashStdin(MsgDigest, 0);
return 1;
}