/* -*-c-*-
*
- * $Id: hashsum.c,v 1.5 2000/12/06 20:33:27 mdw Exp $
+ * $Id: hashsum.c,v 1.10 2004/04/08 01:36:15 mdw Exp $
*
* Hash files using some secure hash function
*
* MA 02111-1307, USA.
*/
-/*----- Revision history --------------------------------------------------*
- *
- * $Log: hashsum.c,v $
- * Revision 1.5 2000/12/06 20:33:27 mdw
- * Make flags be macros rather than enumerations, to ensure that they're
- * unsigned.
- *
- * Revision 1.4 2000/08/04 23:23:44 mdw
- * Various <ctype.h> fixes.
- *
- * Revision 1.3 2000/07/29 17:02:43 mdw
- * (checkhash): Be pettier about spaces between the hash and filename, for
- * compatiblity with `md5sum'.
- *
- * Revision 1.2 2000/07/15 21:14:05 mdw
- * Missed `-e' out of the usage string.
- *
- * Revision 1.1 2000/07/15 20:52:34 mdw
- * Useful replacement for `md5sum' with support for many different hash
- * functions and for reading filename lists from `find'.
- *
- */
-
/*----- Header files ------------------------------------------------------*/
#include "config.h"
#include "ghash.h"
-#include "md4.h"
-#include "md5.h"
-#include "rmd128.h"
-#include "rmd160.h"
-#include "rmd256.h"
-#include "rmd320.h"
-#include "sha.h"
-#include "tiger.h"
-
/*----- Static variables --------------------------------------------------*/
-static const gchash *hashtab[] = {
- &md5, &md4, &sha, &rmd128, &rmd160, &rmd256, &rmd320, &tiger,
- 0
-};
-
#define f_binary 1u
#define f_bogus 2u
#define f_verbose 4u
else if ((fp = fopen(file, f & f_binary ? "rb" : "r")) == 0)
return (-1);
- h = gch->init();
+ h = GH_INIT(gch);
while ((sz = fread(fbuf, 1, sizeof(fbuf), fp)) > 0)
- h->ops->hash(h, fbuf, sz);
- h->ops->done(h, buf);
- h->ops->destroy(h);
+ GH_HASH(h, fbuf, sz);
+ GH_DONE(h, buf);
+ GH_DESTROY(h);
e = ferror(fp);
if (file)
fclose(fp);
static const gchash *gethash(const char *name)
{
- const gchash **g, *gg = 0;
+ const gchash *const *g, *gg = 0;
size_t sz = strlen(name);
- for (g = hashtab; *g; g++) {
+ for (g = ghashtab; *g; g++) {
if (strncmp(name, (*g)->name, sz) == 0) {
if ((*g)->name[sz] == 0) {
gg = *g;
gch = gethash(q);
}
if (!gch)
- gch = hashtab[0];
+ gch = gethash("md5");
xfree(q);
}
break;
case 'l': {
unsigned j;
- for (j = 0; hashtab[j]; j++) {
+ for (j = 0; ghashtab[j]; j++) {
if (j)
fputc(' ', stdout);
- printf("%s", hashtab[j]->name);
+ printf("%s", ghashtab[j]->name);
}
fputc('\n', stdout);
exit(0);