Add gcrypt to tdigest.
authorjbj <devnull@localhost>
Fri, 28 Mar 2003 22:11:06 +0000 (22:11 +0000)
committerjbj <devnull@localhost>
Fri, 28 Mar 2003 22:11:06 +0000 (22:11 +0000)
CVS patchset: 6722
CVS date: 2003/03/28 22:11:06

rpmio/Makefile.am
rpmio/rpmsw.c
rpmio/tdigest.c

index 1202039..72e18c6 100644 (file)
@@ -63,7 +63,7 @@ lint:
        $(LINT) $(DEFS) $(INCLUDES) $(librpmio_la_SOURCES)
 
 tdigest_SOURCES = tdigest.c
-tdigest_LDADD = librpmio.la $(top_builddir)/popt/libpopt.la
+tdigest_LDADD = librpmio.la $(top_builddir)/popt/libpopt.la -lgcrypt
 
 tdir_SOURCES = tdir.c
 tdir_LDFLAGS = -all-static
index 9824221..1e70f7d 100644 (file)
@@ -18,7 +18,7 @@ static int rpmsw_type = 0;
 /*@unchecked@*/
 static int rpmsw_initialized = 0;
 
-#if 0  /* XXX defined(__i386__) */
+#if 1  /* XXX defined(__i386__) */
 /* Swiped from glibc-2.3.2 sysdeps/i386/i686/hp-timing.h */
 
 #define        HP_TIMING_ZERO(Var)     (Var) = (0)
index 9b2428f..7f36d13 100644 (file)
@@ -1,14 +1,15 @@
 #include "system.h"
+#include <gcrypt.h>
 #include "rpmio_internal.h"
 #include "popt.h"
 #include "debug.h"
 
-
 static pgpHashAlgo hashalgo = PGPHASHALGO_MD5;
 static rpmDigestFlags flags = RPMDIGEST_NONE;
 extern int _rpmio_debug;
 
 static int fips = 0;
+static int gcrypt = 0;
 
 const char * FIPSAdigest = "a9993e364706816aba3e25717850c26c9cd0d89d";
 const char * FIPSBdigest = "84983e441c3bd26ebaae4aa1f95129e5e54670f1";
@@ -23,6 +24,7 @@ static struct poptOption optionsTable[] = {
  { "fipsa",'\0', POPT_ARG_VAL, &fips, 1,       NULL, NULL },
  { "fipsb",'\0', POPT_ARG_VAL, &fips, 2,       NULL, NULL },
  { "fipsc",'\0', POPT_ARG_VAL, &fips, 3,       NULL, NULL },
+ { "gcrypt",'\0', POPT_ARG_VAL, &gcrypt, 1,    NULL, NULL },
  { "debug",'d', POPT_ARG_VAL, &_rpmio_debug, -1,       NULL, NULL },
   POPT_AUTOHELP
   POPT_TABLEEND
@@ -39,6 +41,7 @@ main(int argc, const char *argv[])
     const char * ifn;
     const char * ofn = "/dev/null";
     DIGEST_CTX ctx;
+    GcryMDHd gcry;
     const char * idigest;
     const char * odigest;
     const char * sdigest;
@@ -54,38 +57,63 @@ main(int argc, const char *argv[])
     while ((rc = poptGetNextOpt(optCon)) > 0)
        ;
 
-#ifdef DYING
-    reverse = (flags & RPMDIGEST_REVERSE);
-#endif
     if (fips) {
-       ctx = rpmDigestInit(PGPHASHALGO_SHA1, flags);
+       struct rpmsw_s begin, end;
+       (void) rpmswNow(&begin);
+
+       if (gcrypt)
+           gcry = gcry_md_open(GCRY_MD_SHA1, 0);
+       else
+           ctx = rpmDigestInit(PGPHASHALGO_SHA1, flags);
        ifn = NULL;
        appendix = ' ';
        sdigest = NULL;
        switch (fips) {
        case 1:
            ifn = "abc";
-           rpmDigestUpdate(ctx, ifn, strlen(ifn));
+           if (gcrypt)
+               gcry_md_write (gcry, ifn, strlen(ifn));
+           else
+               rpmDigestUpdate(ctx, ifn, strlen(ifn));
            sdigest = FIPSAdigest;
            appendix = 'A';
            break;
        case 2:
            ifn = "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq";
-           rpmDigestUpdate(ctx, ifn, strlen(ifn));
+           if (gcrypt)
+               gcry_md_write (gcry, ifn, strlen(ifn));
+           else
+               rpmDigestUpdate(ctx, ifn, strlen(ifn));
            sdigest = FIPSBdigest;
            appendix = 'B';
            break;
        case 3:
            ifn = "aaaaaaaaaaa ...";
-           for (i = 0; i < 1000000; i++)
-               rpmDigestUpdate(ctx, ifn, 1);
+           for (i = 0; i < 1000000; i++) {
+               if (gcrypt)
+                   gcry_md_write (gcry, ifn, strlen(ifn));
+               else
+                   rpmDigestUpdate(ctx, ifn, 1);
+           }
            sdigest = FIPSCdigest;
            appendix = 'C';
            break;
        }
        if (ifn == NULL)
            return 1;
-       rpmDigestFinal(ctx, (void **)&digest, &digestlen, asAscii);
+       if (gcrypt) {
+           const char * s = gcry_md_read (gcry, GCRY_MD_SHA1);
+           digestlen = 2*16;
+           digest = xcalloc(1, digestlen+1);
+           for (i = 0; i < digestlen; i += 2) {
+               static const char hex[] = "0123456789abcdef";
+               digest[i  ] = hex[ (unsigned)((*s >> 4) & 0x0f) ];
+               digest[i+1] = hex[ (unsigned)((*s++   ) & 0x0f) ];
+           }
+           digest[digestlen] = '\0';
+       } else
+           rpmDigestFinal(ctx, (void **)&digest, &digestlen, asAscii);
+       (void) rpmswNow(&end);
 
        if (digest) {
            fprintf(stdout, "%s     %s\n", digest, ifn);
@@ -97,6 +125,7 @@ main(int argc, const char *argv[])
                appendix);
            fflush(stdout);
        }
+fprintf(stderr, "*** time %lu usecs\n", (unsigned long)rpmswDiff(&end, &begin));
        return 0;
     }