HashMatch: do return values more strict.
[skeinsum.git] / skein_cli.c
index 220809768a12a5ec51ca78806adc39ec201b4a1f..0ab840835690951179942431663d506041ab4fba 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,17 +221,19 @@ 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[PATH_MAX + hashbitlen/4 + 4];
@@ -243,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);
@@ -263,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++;
                }