summaryrefslogtreecommitdiff
path: root/3rdParty/sha1/shacmp.cpp
diff options
context:
space:
mode:
Diffstat (limited to '3rdParty/sha1/shacmp.cpp')
-rw-r--r--3rdParty/sha1/shacmp.cpp169
1 files changed, 169 insertions, 0 deletions
diff --git a/3rdParty/sha1/shacmp.cpp b/3rdParty/sha1/shacmp.cpp
new file mode 100644
index 0000000..476ad3f
--- /dev/null
+++ b/3rdParty/sha1/shacmp.cpp
@@ -0,0 +1,169 @@
+/*
+ * shacmp.cpp
+ *
+ * Copyright (C) 1998, 2009
+ * Paul E. Jones <paulej@packetizer.com>
+ * All Rights Reserved
+ *
+ *****************************************************************************
+ * $Id: shacmp.cpp 12 2009-06-22 19:34:25Z paulej $
+ *****************************************************************************
+ *
+ * Description:
+ * This utility will compare two files by producing a message digest
+ * for each file using the Secure Hashing Algorithm and comparing
+ * the message digests. This function will return 0 if they
+ * compare or 1 if they do not or if there is an error.
+ * Errors result in a return code higher than 1.
+ *
+ * Portability Issues:
+ * none.
+ *
+ */
+
+#include <stdio.h>
+#include <string.h>
+#include "sha1.h"
+
+/*
+ * Return codes
+ */
+#define SHA1_COMPARE 0
+#define SHA1_NO_COMPARE 1
+#define SHA1_USAGE_ERROR 2
+#define SHA1_FILE_ERROR 3
+
+/*
+ * Function prototype
+ */
+void usage();
+
+/*
+ * main
+ *
+ * Description:
+ * This is the entry point for the program
+ *
+ * Parameters:
+ * argc: [in]
+ * This is the count of arguments in the argv array
+ * argv: [in]
+ * This is an array of filenames for which to compute message digests
+ *
+ * Returns:
+ * Nothing.
+ *
+ * Comments:
+ *
+ */
+int main(int argc, char *argv[])
+{
+ SHA1 sha; // SHA-1 class
+ FILE *fp; // File pointer for reading files
+ char c; // Character read from file
+ unsigned message_digest[2][5]; // Message digest for files
+ int i; // Counter
+ bool message_match; // Message digest match flag
+ int returncode;
+
+ /*
+ * If we have two arguments, we will assume they are filenames. If
+ * we do not have to arguments, call usage() and exit.
+ */
+ if (argc != 3)
+ {
+ usage();
+ return SHA1_USAGE_ERROR;
+ }
+
+ /*
+ * Get the message digests for each file
+ */
+ for(i = 1; i <= 2; i++)
+ {
+ sha.Reset();
+
+ if (!(fp = fopen(argv[i],"rb")))
+ {
+ fprintf(stderr, "sha: unable to open file %s\n", argv[i]);
+ return SHA1_FILE_ERROR;
+ }
+
+ c = fgetc(fp);
+ while(!feof(fp))
+ {
+ sha.Input(c);
+ c = fgetc(fp);
+ }
+
+ fclose(fp);
+
+ if (!sha.Result(message_digest[i-1]))
+ {
+ fprintf(stderr,"shacmp: could not compute message digest for %s\n",
+ argv[i]);
+ return SHA1_FILE_ERROR;
+ }
+ }
+
+ /*
+ * Compare the message digest values
+ */
+ message_match = true;
+ for(i = 0; i < 5; i++)
+ {
+ if (message_digest[0][i] != message_digest[1][i])
+ {
+ message_match = false;
+ break;
+ }
+ }
+
+ if (message_match)
+ {
+ printf("Fingerprints match:\n");
+ returncode = SHA1_COMPARE;
+ }
+ else
+ {
+ printf("Fingerprints do not match:\n");
+ returncode = SHA1_NO_COMPARE;
+ }
+
+ printf( "\t%08X %08X %08X %08X %08X\n",
+ message_digest[0][0],
+ message_digest[0][1],
+ message_digest[0][2],
+ message_digest[0][3],
+ message_digest[0][4]);
+ printf( "\t%08X %08X %08X %08X %08X\n",
+ message_digest[1][0],
+ message_digest[1][1],
+ message_digest[1][2],
+ message_digest[1][3],
+ message_digest[1][4]);
+
+ return returncode;
+}
+
+/*
+ * usage
+ *
+ * Description:
+ * This function will display program usage information to the user.
+ *
+ * Parameters:
+ * None.
+ *
+ * Returns:
+ * Nothing.
+ *
+ * Comments:
+ *
+ */
+void usage()
+{
+ printf("usage: shacmp <file> <file>\n");
+ printf("\tThis program will compare the message digests (fingerprints)\n");
+ printf("\tfor two files using the Secure Hashing Algorithm (SHA-1).\n");
+}