isProper - small changes.
[skeinsum.git] / skein_cli.c
index 23f3e1d0747f655d3f0d2b88025a5dee8b5d13ce..d6e7649480d4b930cf53cd415ac606a5283fd9ca 100644 (file)
@@ -210,6 +210,7 @@ void HashStdin(int tag)
        }
 }
 
+/* Return: -1 = Error, 0 = Mismatch, 1 = Match */
 int HashMatch(const char StoredDigest[], const char *filename, int quiet)
 {
        char mode = 't';
@@ -220,20 +221,23 @@ int HashMatch(const char StoredDigest[], const char *filename, int quiet)
        
        char MsgDigest[hashbitlen/2];
        if (HashWithMode(filename, MsgDigest, mode) < 0)
-               return 0;
+               return -1;
 
        if (strcmp(MsgDigest, StoredDigest)) {
                printf("%s: FAILED\n", filename);
                return 0;
        }
+
        if (quiet > 0)
                printf("%s: OK\n", filename);
        return 1;
 }
 
+/* Return: -1 = some errors/mismatches, 1 = all ok */
 int VerifyHashesFromFile(FILE *fp, int status, int warn, int quiet)
 {
-       char hash[500], MsgDigest_tmp[hashbitlen/2];
+       char hash[PATH_MAX + hashbitlen/4 + 4];
+       char MsgDigest_tmp[hashbitlen/2];
        int NoMatch = 0, NotProper = 0, Computed = 0;
        int line = 0;
 
@@ -242,7 +246,7 @@ int VerifyHashesFromFile(FILE *fp, int status, int warn, int quiet)
                char file_tmp[PATH_MAX];
                line ++;
                Computed++;
-               unsigned int hashVersion = decomposeHashLine(hash,MsgDigest_tmp,file_tmp);
+               int hashVersion = decomposeHashLine(hash,MsgDigest_tmp,file_tmp);
                if (hashVersion == -1)
                {
                        fprintf(stderr, "skein%d: %s is using newer version of skein%d algorithm\n",hashbitlen,file_tmp,hashbitlen);
@@ -262,7 +266,7 @@ int VerifyHashesFromFile(FILE *fp, int status, int warn, int quiet)
                        NotProper ++;
                        NoMatch ++;
                }
-               else if (!HashMatch(MsgDigest_tmp, file_tmp, quiet))
+               else if (HashMatch(MsgDigest_tmp, file_tmp, quiet) <= 0)
                {
                        NoMatch++;
                }
@@ -279,17 +283,18 @@ int VerifyHashesFromFile(FILE *fp, int status, int warn, int quiet)
        return (NotProper || NoMatch) ? -1 : 1;
 }
 
-int isProper(char MsgDigest[])
+int isProper(const char MsgDigest[])
 {
-       if ((strlen(MsgDigest) - hashbitlen/4) != 0)
+       int len = strlen(MsgDigest);
+       if (len != (hashbitlen / 4))
                return 0;
        int index = 0;
-       char c = 0;
-       for(index = 0; index < strlen(MsgDigest);index++)
+       for (index = 0; index < len; index++)
        {
-               c = MsgDigest[index];
-               if(!(( c >= '0' && c <= '9' ) || ( c >= 'A' && c <= 'F')))
-                       return 0;
+               char c = MsgDigest[index];
+               if (c >= '0' && c <= '9') continue;
+               if (c >= 'A' && c <= 'F') continue;
+               return 0;
        }
 
        return 1;