RPM Package Manager, CVS Repository
  http://rpm5.org/cvs/
  ____________________________________________________________________________

  Server: rpm5.org                         Name:   Jeff Johnson
  Root:   /v/rpm/cvs                       Email:  [email protected]
  Module: rpm                              Date:   08-Jun-2010 16:05:29
  Branch: HEAD                             Handle: 2010060814052900

  Modified files:
    rpm/rpmio               rpmbc.c
    rpm/tests               trsa.c

  Log:
    - pgp: WIP.

  Summary:
    Revision    Changes     Path
    2.30        +7  -26     rpm/rpmio/rpmbc.c
    1.28        +80 -45     rpm/tests/trsa.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: rpm/rpmio/rpmbc.c
  ============================================================================
  $ cvs diff -u -r2.29 -r2.30 rpmbc.c
  --- rpm/rpmio/rpmbc.c 7 Jun 2010 20:24:16 -0000       2.29
  +++ rpm/rpmio/rpmbc.c 8 Jun 2010 14:05:29 -0000       2.30
  @@ -22,6 +22,12 @@
   /*...@unchecked@*/
   static int _rpmbc_debug;
   
  +#define      SPEW(_t, _rc, _dig)     \
  +  { if ((_t) || _rpmbc_debug || _pgp_debug < 0) \
  +     fprintf(stderr, "<-- %s(%p) %s\t%s\n", __FUNCTION__, (_dig), \
  +             ((_rc) ? "OK" : "BAD"), (_dig)->pubkey_algoN); \
  +  }
  +
   static const char * _pgpHashAlgo2Name(uint32_t algo)
   {
       return pgpValStr(pgpHashTbl, (rpmuint8_t)algo);
  @@ -32,31 +38,6 @@
       return pgpValStr(pgpPubkeyTbl, (rpmuint8_t)algo);
   }
   
  -#define      SPEW(_t, _rc, _dig)     \
  -  { if ((_t) || _rpmbc_debug || _pgp_debug < 0) \
  -     fprintf(stderr, "<-- %s(%p) %s\t%s\n", __FUNCTION__, (_dig), \
  -             ((_rc) ? "OK" : "BAD"), (_dig)->pubkey_algoN); \
  -  }
  -
  -#ifdef       UNUSED
  -static void rpmbcDumpRSA(const char * msg, rpmbc bc)
  -{
  -rsakp * kp = &bc->rsa_keypair;
  -if (msg) fprintf(stderr, "========== %s\n", msg);
  -fprintf(stderr, "\t n: %s\n", pgpHexStr((rpmuint8_t *)kp->n.modl, 
kp->n.size));
  -fprintf(stderr, "\t e: %s\n", pgpHexStr((rpmuint8_t *)kp->e.data, 
kp->e.size));
  -fprintf(stderr, "\t d: %s\n", pgpHexStr((rpmuint8_t *)kp->d.data, 
kp->d.size));
  -fprintf(stderr, "\t p: %s\n", pgpHexStr((rpmuint8_t *)kp->p.modl, 
kp->p.size));
  -fprintf(stderr, "\t q: %s\n", pgpHexStr((rpmuint8_t *)kp->q.modl, 
kp->q.size));
  -fprintf(stderr, "\tdp: %s\n", pgpHexStr((rpmuint8_t *)kp->dp.data, 
kp->dp.size));
  -fprintf(stderr, "\tdq: %s\n", pgpHexStr((rpmuint8_t *)kp->dq.data, 
kp->dq.size));
  -fprintf(stderr, "\tqi: %s\n", pgpHexStr((rpmuint8_t *)kp->qi.data, 
kp->qi.size));
  -fprintf(stderr, "\thm: %s\n", pgpHexStr((rpmuint8_t *)bc->hm.data, 
bc->hm.size));
  -fprintf(stderr, "\t m: %s\n", pgpHexStr((rpmuint8_t *)bc->m.data, 
bc->m.size));
  -fprintf(stderr, "\t c: %s\n", pgpHexStr((rpmuint8_t *)bc->c.data, 
bc->c.size));
  -}
  -#endif
  -
   /**
    * Convert hex to binary nibble.
    * @param c            hex character
  @@ -168,7 +149,7 @@
   #ifdef       SLOWER
       xx = rsapri(&bc->rsa_keypair.n, &bc->rsa_keypair.d, &bc->hm, &bc->c);
   #else
  -    /* XXX RSA w CRT is ~3x faster for signing. */
  +    /* XXX RSA w CRT is ~3x-4x faster for signing. */
       xx = rsapricrt(&bc->rsa_keypair.n, &bc->rsa_keypair.p, 
&bc->rsa_keypair.q,
                &bc->rsa_keypair.dp, &bc->rsa_keypair.dq, &bc->rsa_keypair.qi,
                &bc->hm, &bc->c);
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/tests/trsa.c
  ============================================================================
  $ cvs diff -u -r1.27 -r1.28 trsa.c
  --- rpm/tests/trsa.c  7 Jun 2010 22:30:52 -0000       1.27
  +++ rpm/tests/trsa.c  8 Jun 2010 14:05:29 -0000       1.28
  @@ -284,17 +284,33 @@
   {
   rsakp * kp = &bc->rsa_keypair;
   if (msg) fprintf(stderr, "========== %s\n", msg);
  -fprintf(stderr, "\t n: %s\n", pgpHexStr((rpmuint8_t *)kp->n.modl, 
kp->n.size));
  -fprintf(stderr, "\t e: %s\n", pgpHexStr((rpmuint8_t *)kp->e.data, 
kp->e.size));
  -fprintf(stderr, "\t d: %s\n", pgpHexStr((rpmuint8_t *)kp->d.data, 
kp->d.size));
  -fprintf(stderr, "\t p: %s\n", pgpHexStr((rpmuint8_t *)kp->p.modl, 
kp->p.size));
  -fprintf(stderr, "\t q: %s\n", pgpHexStr((rpmuint8_t *)kp->q.modl, 
kp->q.size));
  -fprintf(stderr, "\tdp: %s\n", pgpHexStr((rpmuint8_t *)kp->dp.data, 
kp->dp.size));
  -fprintf(stderr, "\tdq: %s\n", pgpHexStr((rpmuint8_t *)kp->dq.data, 
kp->dq.size));
  -fprintf(stderr, "\tqi: %s\n", pgpHexStr((rpmuint8_t *)kp->qi.data, 
kp->qi.size));
  -fprintf(stderr, "\thm: %s\n", pgpHexStr((rpmuint8_t *)bc->hm.data, 
bc->hm.size));
  -fprintf(stderr, "\t m: %s\n", pgpHexStr((rpmuint8_t *)bc->m.data, 
bc->m.size));
  -fprintf(stderr, "\t c: %s\n", pgpHexStr((rpmuint8_t *)bc->c.data, 
bc->c.size));
  +fprintf(stderr, "\t n: %s\n", pgpHexStr((rpmuint8_t *)kp->n.modl, 
MP_WORDS_TO_BYTES(kp->n.size)));
  +fprintf(stderr, "\t e: %s\n", pgpHexStr((rpmuint8_t *)kp->e.data, 
MP_WORDS_TO_BYTES(kp->e.size)));
  +fprintf(stderr, "\t d: %s\n", pgpHexStr((rpmuint8_t *)kp->d.data, 
MP_WORDS_TO_BYTES(kp->d.size)));
  +fprintf(stderr, "\t p: %s\n", pgpHexStr((rpmuint8_t *)kp->p.modl, 
MP_WORDS_TO_BYTES(kp->p.size)));
  +fprintf(stderr, "\t q: %s\n", pgpHexStr((rpmuint8_t *)kp->q.modl, 
MP_WORDS_TO_BYTES(kp->q.size)));
  +fprintf(stderr, "\tdp: %s\n", pgpHexStr((rpmuint8_t *)kp->dp.data, 
MP_WORDS_TO_BYTES(kp->dp.size)));
  +fprintf(stderr, "\tdq: %s\n", pgpHexStr((rpmuint8_t *)kp->dq.data, 
MP_WORDS_TO_BYTES(kp->dq.size)));
  +fprintf(stderr, "\tqi: %s\n", pgpHexStr((rpmuint8_t *)kp->qi.data, 
MP_WORDS_TO_BYTES(kp->qi.size)));
  +fprintf(stderr, "\thm: %s\n", pgpHexStr((rpmuint8_t *)bc->hm.data, 
MP_WORDS_TO_BYTES(bc->hm.size)));
  +fprintf(stderr, "\t m: %s\n", pgpHexStr((rpmuint8_t *)bc->m.data, 
MP_WORDS_TO_BYTES(bc->m.size)));
  +fprintf(stderr, "\t c: %s\n", pgpHexStr((rpmuint8_t *)bc->c.data, 
MP_WORDS_TO_BYTES(bc->c.size)));
  +}
  +
  +static void rpmbcDumpDSA(const char * msg, rpmbc bc)
  +{
  +dsakp * kp = &bc->dsa_keypair;
  +if (msg) fprintf(stderr, "========== %s\n", msg);
  +fprintf(stderr, "\t p: %s\n", pgpHexStr((rpmuint8_t *)kp->param.p.modl, 
MP_WORDS_TO_BYTES(kp->param.p.size)));
  +fprintf(stderr, "\t q: %s\n", pgpHexStr((rpmuint8_t *)kp->param.q.modl, 
MP_WORDS_TO_BYTES(kp->param.q.size)));
  +fprintf(stderr, "\t r: %s\n", pgpHexStr((rpmuint8_t *)kp->param.r.data, 
MP_WORDS_TO_BYTES(kp->param.r.size)));
  +fprintf(stderr, "\t g: %s\n", pgpHexStr((rpmuint8_t *)kp->param.g.data, 
MP_WORDS_TO_BYTES(kp->param.g.size)));
  +fprintf(stderr, "\t n: %s\n", pgpHexStr((rpmuint8_t *)kp->param.n.modl, 
MP_WORDS_TO_BYTES(kp->param.n.size)));
  +fprintf(stderr, "\t y: %s\n", pgpHexStr((rpmuint8_t *)kp->y.data, 
MP_WORDS_TO_BYTES(kp->y.size)));
  +fprintf(stderr, "\t x: %s\n", pgpHexStr((rpmuint8_t *)kp->x.data, 
MP_WORDS_TO_BYTES(kp->x.size)));
  +fprintf(stderr, "\thm: %s\n", pgpHexStr((rpmuint8_t *)bc->hm.data, 
MP_WORDS_TO_BYTES(bc->hm.size)));
  +fprintf(stderr, "\t r: %s\n", pgpHexStr((rpmuint8_t *)bc->r.data, 
MP_WORDS_TO_BYTES(bc->r.size)));
  +fprintf(stderr, "\t s: %s\n", pgpHexStr((rpmuint8_t *)bc->s.data, 
MP_WORDS_TO_BYTES(bc->s.size)));
   }
   
   /**
  @@ -2971,6 +2987,7 @@
   pgpCheckVerify(pgpDig dig, void * _badhash)
   {
       int rc = 0;              /* assume success */
  +pgpDigParams pubp = pgpGetPubkey(dig);
   pgpDigParams sigp = pgpGetSignature(dig);
   const char * msg = rpmExpand(dig->pubkey_algoN, "-", dig->hash_algoN, " 
verify", NULL);
   int xx;
  @@ -2978,30 +2995,35 @@
   #if !defined(_RPMGC_INTERNAL)
   {
       DIGEST_CTX ctx = NULL;
  +    uint8_t * digest = NULL;
  +    size_t digestlen = 0;
  +
   
       ctx = rpmDigestInit(sigp->hash_algo, 0);
       xx = rpmDigestUpdate(ctx, "abc", sizeof("abc")-1);
  -#if defined(_RPMBC_INTERNAL)
  -    {        rpmbc bc = dig->impl;
  -bc->digest = _free(bc->digest);
  -bc->digestlen = 0;
  -     xx = rpmDigestFinal(ctx, &bc->digest, &bc->digestlen, 0);
  -    }
  -#endif
  -#if defined(_RPMNSS_INTERNAL)
  -    {        rpmnss nss = dig->impl;
  -nss->digest = _free(nss->digest);
  -nss->digestlen = 0;
  -     xx = rpmDigestFinal(ctx, &nss->digest, &nss->digestlen, 0);
  -    }
  +    xx = rpmDigestFinal(rpmDigestDup(ctx), &digest, &digestlen, 0);
  +    sigp->signhash16[0] = digest[0];
  +    sigp->signhash16[1] = digest[1];
  +    switch (pubp->pubkey_algo) {
  +    case PGPPUBKEYALGO_RSA:
  +     xx = pgpImplSetRSA(ctx, dig, sigp);
  +     break;
  +    case PGPPUBKEYALGO_DSA:
  +     xx = pgpImplSetDSA(ctx, dig, sigp);
  +     break;
  +    case PGPPUBKEYALGO_ELGAMAL:
  +#ifdef       NOTYET
  +     xx = pgpImplSetELG(ctx, dig, sigp);
  +#else
  +     xx = rpmDigestFinal(ctx, NULL, NULL, 0);
  +     xx = 1;
   #endif
  -#if defined(_RPMSSL_INTERNAL)
  -    {        rpmssl ssl = dig->impl;
  -ssl->digest = _free(ssl->digest);
  -ssl->digestlen = 0;
  -     xx = rpmDigestFinal(ctx, &ssl->digest, &ssl->digestlen, 0);
  +     break;
  +    case PGPPUBKEYALGO_ECDSA:
  +     xx = pgpImplSetECDSA(ctx, dig, sigp);
  +     break;
       }
  -#endif
  +    digest = _free(digest);
   if (xx && !rc) rc = 1;
   }
   #endif       /* !defined(_RPMGC_INTERNAL) */
  @@ -3054,26 +3076,39 @@
   sigp->hash_algo = dalgo;
   dig->hash_algoN = _pgpHashAlgo2Name(sigp->hash_algo);
   msg = rpmExpand(dig->pubkey_algoN, "-", dig->hash_algoN, " sign", NULL);
  +
  +{
  +    DIGEST_CTX ctx = NULL;
  +    uint8_t * digest = NULL;
  +    size_t digestlen = 0;
  +
       ctx = rpmDigestInit(sigp->hash_algo, 0);
       xx = rpmDigestUpdate(ctx, "abc", sizeof("abc")-1);
  -if (xx && !rc) rc = 1;
  -
  -#if defined(_RPMBC_INTERNAL)
  -    {        rpmbc bc = dig->impl;
  -     xx = rpmDigestFinal(ctx, &bc->digest, &bc->digestlen, 0);
  -    }
  -#endif
  -#if defined(_RPMNSS_INTERNAL)
  -    {        rpmnss nss = dig->impl;
  -     xx = rpmDigestFinal(ctx, &nss->digest, &nss->digestlen, 0);
  -    }
  +    xx = rpmDigestFinal(rpmDigestDup(ctx), &digest, &digestlen, 0);
  +    sigp->signhash16[0] = digest[0];
  +    sigp->signhash16[1] = digest[1];
  +    switch (pubp->pubkey_algo) {
  +    case PGPPUBKEYALGO_RSA:
  +     xx = pgpImplSetRSA(ctx, dig, sigp);
  +     break;
  +    case PGPPUBKEYALGO_DSA:
  +     xx = pgpImplSetDSA(ctx, dig, sigp);
  +     break;
  +    case PGPPUBKEYALGO_ELGAMAL:
  +#ifdef       NOTYET
  +     xx = pgpImplSetELG(ctx, dig, sigp);
  +#else
  +     xx = rpmDigestFinal(ctx, NULL, NULL, 0);
  +     xx = 1;
   #endif
  -#if defined(_RPMSSL_INTERNAL)
  -    {        rpmssl ssl = dig->impl;
  -     xx = rpmDigestFinal(ctx, &ssl->digest, &ssl->digestlen, 0);
  +     break;
  +    case PGPPUBKEYALGO_ECDSA:
  +     xx = pgpImplSetECDSA(ctx, dig, sigp);
  +     break;
       }
  -#endif
  +    digest = _free(digest);
   if (xx && !rc) rc = 1;
  +}
   
       xx = pgpImplSign(dig);
   if (!xx && !rc) rc = 1;              /* XXX 1 on success */
  @@ .
______________________________________________________________________
RPM Package Manager                                    http://rpm5.org
CVS Sources Repository                                [email protected]

Reply via email to