summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/htscoremain.c2
-rw-r--r--src/htsmd5.c20
-rw-r--r--src/htsmd5.h1
3 files changed, 23 insertions, 0 deletions
diff --git a/src/htscoremain.c b/src/htscoremain.c
index 77dc93a..1ca82e8 100644
--- a/src/htscoremain.c
+++ b/src/htscoremain.c
@@ -45,6 +45,7 @@ Please visit our Website: http://www.httrack.com
#include "htszlib.h"
#include "htscharset.h"
#include "htsencoding.h"
+#include "htsmd5.h"
#include <ctype.h>
#if USE_BEGINTHREAD
@@ -2410,6 +2411,7 @@ HTSEXT_API int hts_main2(int argc, char **argv, httrackp * opt) {
return 0;
break;
case '7': // hashtable selftest: httrack -#7 nb_entries
+ md5selftest();
if (++na < argc) {
char *const snum = strdup(argv[na]);
unsigned long count = 0;
diff --git a/src/htsmd5.c b/src/htsmd5.c
index def901d..84399be 100644
--- a/src/htsmd5.c
+++ b/src/htsmd5.c
@@ -77,3 +77,23 @@ unsigned long int md5sum32(const char *buff) {
domd5mem(buff, strlen(buff), u.md5digest, 0);
return u.hash;
}
+
+void md5selftest() {
+ static const char str1[] = "The quick brown fox jumps over the lazy dog\n";
+ static const char str1m[] = "37c4b87edffc5d198ff5a185cee7ee09";
+ static const char str2[] = "Hello";
+ static const char str2m[] = "09f7e02f1290be211da707a266f153b3";
+ char digest[64];
+#define MDCHECK(VAR, VARMD) do { \
+ memset(digest, 0xCC, sizeof(digest)); \
+ domd5mem(VAR, sizeof(VAR) - 1, digest, 1); \
+ if (strcmp(digest, VARMD) != 0) { \
+ fprintf(stderr, "error: md5 selftest failed: '%s' => '%s'\n", \
+ VAR, digest); \
+ } \
+} while(0)
+MDCHECK(str1, str1m);
+MDCHECK(str2, str2m);
+#undef MDCHECK
+ fprintf(stderr, "md5 selftest succeeded\n");
+}
diff --git a/src/htsmd5.h b/src/htsmd5.h
index 194d8c8..091a454 100644
--- a/src/htsmd5.h
+++ b/src/htsmd5.h
@@ -42,6 +42,7 @@ Please visit our Website: http://www.httrack.com
#ifdef HTS_INTERNAL_BYTECODE
int domd5mem(const char *buf, size_t len, char *digest, int asAscii);
unsigned long int md5sum32(const char *buff);
+void md5selftest(void);
#endif
#endif