HashMatch: do return values more strict.
[skeinsum.git] / skein_cli.c
index c8ae45b48ff37219fd4369ba9011ae10dd5979ca..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];
@@ -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++;
                }