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:   25-Jun-2010 20:40:28
  Branch: rpm-5_3                          Handle: 2010062518402601

  Modified files:           (Branch: rpm-5_3)
    rpm                     CHANGES
    rpm/build               build.c pack.c
    rpm/rpmio               rpmbc.c

  Log:
    - pgp: fix: algo parameters to signature/pubkey with msbits().

  Summary:
    Revision    Changes     Path
    1.3296.2.50 +1  -0      rpm/CHANGES
    2.139.2.4   +12 -8      rpm/build/build.c
    2.317.2.4   +11 -9      rpm/build/pack.c
    2.17.2.5    +65 -12     rpm/rpmio/rpmbc.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: rpm/CHANGES
  ============================================================================
  $ cvs diff -u -r1.3296.2.49 -r1.3296.2.50 CHANGES
  --- rpm/CHANGES       23 Jun 2010 07:12:41 -0000      1.3296.2.49
  +++ rpm/CHANGES       25 Jun 2010 18:40:26 -0000      1.3296.2.50
  @@ -1,4 +1,5 @@
   5.3.1 -> 5.3.2:
  +    - jbj: pgp: fix: algo parameters to signature/pubkey with msbits().
       - jbj: pgp: use the pubkey from header when installing.
       - jbj: pgp: retrieve pubkey from package header (if present).
       - jbj: pgp: add pgpArmorUnwrap to parse a pubkey from a buffer.
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/build/build.c
  ============================================================================
  $ cvs diff -u -r2.139.2.3 -r2.139.2.4 build.c
  --- rpm/build/build.c 23 Jun 2010 04:08:04 -0000      2.139.2.3
  +++ rpm/build/build.c 25 Jun 2010 18:40:27 -0000      2.139.2.4
  @@ -339,14 +339,14 @@
   static int rpmbcExportPubkey(pgpDig dig)
   {
       uint8_t pkt[8192];
  -uint8_t * be = pkt;
  +    uint8_t * be = pkt;
       size_t pktlen;
       time_t now = time(NULL);
       uint32_t bt = now;
       uint16_t bn;
  -pgpDigParams pubp = pgpGetPubkey(dig);
  -rpmbc bc = dig->impl;
  -int xx;
  +    pgpDigParams pubp = pgpGetPubkey(dig);
  +    rpmbc bc = dig->impl;
  +    int xx;
   
       *be++ = 0x80 | (PGPTAG_PUBLIC_KEY << 2) | 0x01;
       be += 2;
  @@ -358,22 +358,26 @@
       *be++ = (bt      );
       *be++ = pubp->pubkey_algo;
   
  -    bn = MP_WORDS_TO_BITS(bc->dsa_keypair.param.p.size);
  +    bn = mpbits(bc->dsa_keypair.param.p.size, bc->dsa_keypair.param.p.modl);
  +    bn += 7; bn &= ~7;
       *be++ = (bn >> 8);       *be++ = (bn     );
       xx = i2osp(be, bn/8, bc->dsa_keypair.param.p.modl, 
bc->dsa_keypair.param.p.size);
       be += bn/8;
   
  -    bn = MP_WORDS_TO_BITS(bc->dsa_keypair.param.q.size);
  +    bn = mpbits(bc->dsa_keypair.param.q.size, bc->dsa_keypair.param.q.modl);
  +    bn += 7; bn &= ~7;
       *be++ = (bn >> 8);       *be++ = (bn     );
       xx = i2osp(be, bn/8, bc->dsa_keypair.param.q.modl, 
bc->dsa_keypair.param.q.size);
       be += bn/8;
   
  -    bn = MP_WORDS_TO_BITS(bc->dsa_keypair.param.g.size);
  +    bn = mpbits(bc->dsa_keypair.param.g.size, bc->dsa_keypair.param.g.data);
  +    bn += 7; bn &= ~7;
       *be++ = (bn >> 8);       *be++ = (bn     );
       xx = i2osp(be, bn/8, bc->dsa_keypair.param.g.data, 
bc->dsa_keypair.param.g.size);
       be += bn/8;
   
  -    bn = MP_WORDS_TO_BITS(bc->dsa_keypair.y.size);
  +    bn = mpbits(bc->dsa_keypair.y.size, bc->dsa_keypair.y.data);
  +    bn += 7; bn &= ~7;
       *be++ = (bn >> 8);       *be++ = (bn     );
       xx = i2osp(be, bn/8, bc->dsa_keypair.y.data, bc->dsa_keypair.y.size);
       be += bn/8;
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/build/pack.c
  ============================================================================
  $ cvs diff -u -r2.317.2.3 -r2.317.2.4 pack.c
  --- rpm/build/pack.c  23 Jun 2010 04:08:04 -0000      2.317.2.3
  +++ rpm/build/pack.c  25 Jun 2010 18:40:27 -0000      2.317.2.4
  @@ -638,16 +638,16 @@
   static int rpmbcExportSignature(pgpDig dig, /*...@only@*/ DIGEST_CTX ctx)
   {
       uint8_t pkt[8192];
  -uint8_t * be = pkt;
  -uint8_t * h;
  +    uint8_t * be = pkt;
  +    uint8_t * h;
       size_t pktlen;
       time_t now = time(NULL);
       uint32_t bt;
       uint16_t bn;
  -pgpDigParams pubp = pgpGetPubkey(dig);
  -pgpDigParams sigp = pgpGetSignature(dig);
  -rpmbc bc = dig->impl;
  -int xx;
  +    pgpDigParams pubp = pgpGetPubkey(dig);
  +    pgpDigParams sigp = pgpGetSignature(dig);
  +    rpmbc bc = dig->impl;
  +    int xx;
   
       sigp->tag = PGPTAG_SIGNATURE;
       *be++ = 0x80 | (sigp->tag << 2) | 0x01;
  @@ -720,7 +720,7 @@
   assert(xx == 1);
   
       be += 2;                         /* skip unhashed length. */
  -h = be;
  +    h = be;
   
       *be++ = 1 + 8;                   /* issuer key ID */
       *be++ = PGPSUBTYPE_ISSUER_KEYID;
  @@ -740,13 +740,15 @@
       *be++ = sigp->signhash16[0];     /* signhash16 */
       *be++ = sigp->signhash16[1];
   
  -    bn = MP_WORDS_TO_BITS(bc->r.size);
  +    bn = mpbits(bc->r.size, bc->r.data);
  +    bn += 7; bn &= ~7;
       *be++ = (bn >> 8);
       *be++ = (bn     );
       xx = i2osp(be, bn/8, bc->r.data, bc->r.size);
       be += bn/8;
   
  -    bn = MP_WORDS_TO_BITS(bc->s.size);
  +    bn = mpbits(bc->s.size, bc->s.data);
  +    bn += 7; bn &= ~7;
       *be++ = (bn >> 8);
       *be++ = (bn     );
       xx = i2osp(be, bn/8, bc->s.data, bc->s.size);
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/rpmio/rpmbc.c
  ============================================================================
  $ cvs diff -u -r2.17.2.4 -r2.17.2.5 rpmbc.c
  --- rpm/rpmio/rpmbc.c 23 Jun 2010 04:08:05 -0000      2.17.2.4
  +++ rpm/rpmio/rpmbc.c 25 Jun 2010 18:40:27 -0000      2.17.2.5
  @@ -56,6 +56,55 @@
       return (unsigned char) '\0';
   }
   
  +#define      _spewMPB(_N, _MPB)      \
  +  { mpbarrett * mpb = &(_MPB); \
  +    fprintf(stderr, "\t" _N ": "); mpfprintln(stderr, mpb->size, mpb->modl); 
\
  +  }
  +
  +#define      _spewMPN(_N, _MPN)      \
  +  { mpnumber * mpn = &(_MPN); \
  +    fprintf(stderr, "\t" _N ": "); mpfprintln(stderr, mpn->size, mpn->data); 
\
  +  }
  +
  +#ifdef       UNUSED
  +static void rpmbcDumpRSA(const char * msg, rpmbc bc)
  +{
  +    if (msg) fprintf(stderr, "========== %s\n", msg);
  +
  +    {
  +     _spewMPB(" n", bc->rsa_keypair.n);
  +     _spewMPN(" e", bc->rsa_keypair.e);
  +     _spewMPN(" d", bc->rsa_keypair.d);
  +     _spewMPB(" p", bc->rsa_keypair.p);
  +     _spewMPB(" q", bc->rsa_keypair.q);
  +     _spewMPN("dp", bc->rsa_keypair.dp);
  +     _spewMPN("dq", bc->rsa_keypair.dq);
  +     _spewMPN("qi", bc->rsa_keypair.qi);
  +    }
  +
  +    _spewMPN(" c", bc->c);
  +    _spewMPN("hm", bc->hm);
  +}
  +
  +static void rpmbcDumpDSA(const char * msg, rpmbc bc)
  +{
  +    if (msg) fprintf(stderr, "========== %s\n", msg);
  +
  +    {
  +     _spewMPB(" p", bc->dsa_keypair.param.p);
  +     _spewMPB(" q", bc->dsa_keypair.param.q);
  +     _spewMPN(" g", bc->dsa_keypair.param.g);
  +     _spewMPN(" y", bc->dsa_keypair.y);
  +    }
  +
  +    _spewMPN(" r", bc->r);
  +    _spewMPN(" s", bc->s);
  +
  +    _spewMPN("hm", bc->hm);
  +
  +}
  +#endif       /* UNUSED */
  +
   static
   int rpmbcSetRSA(/*...@only@*/ DIGEST_CTX ctx, pgpDig dig, pgpDigParams sigp)
        /*...@modifies dig @*/
  @@ -66,7 +115,7 @@
       const char * prefix = rpmDigestASN1(ctx);
       const char * hexstr;
       char * tt;
  -    int rc;
  +    int rc = 1;              /* assume failure */
       int xx;
   pgpDigParams pubp = pgpGetPubkey(dig);
   dig->pubkey_algoN = _pgpPubkeyAlgo2Name(pubp->pubkey_algo);
  @@ -74,7 +123,7 @@
   
   assert(sigp->hash_algo == rpmDigestAlgo(ctx));
       if (prefix == NULL)
  -     return 1;
  +     goto exit;
   
       /*
        * The no. of bytes for hash + PKCS1 padding is needed.
  @@ -88,7 +137,7 @@
        nbits = (unsigned) MP_WORDS_TO_BITS(bc->rsa_keypair.n.size);
       nb = (nbits + 7) >> 3;           /* XXX overkill */
       if (nb < 64/8 || nb > 65536/8)   /* XXX generous "sanity" check */
  -     return 1;
  +     goto exit;
   
   /* XXX FIXME: do PKCS1 padding in binary not hex */
   /* XXX FIXME: should this lazy free be done elsewhere? */
  @@ -119,6 +168,8 @@
        s[1] = (rpmuint8_t) (nibble(str[2]) << 4) | nibble(str[3]);
        rc = memcmp(s, t, sizeof(sigp->signhash16));
       }
  +
  +exit:
   SPEW(0, !rc, dig);
       return rc;
   }
  @@ -671,8 +722,6 @@
   fprintf(stderr, "*** %s %s\n", pre, t);
       (void) mpnsethex(mpn, t);
       t = _free(t);
  -if (_pgp_debug && _pgp_print)
  -fprintf(stderr, "\t %s ", pre), mpfprintln(stderr, mpn->size, mpn->data);
       return 0;
   }
   
  @@ -697,43 +746,47 @@
       case 10:         /* RSA m**d */
        (void) mpnsethex(&bc->c, s = pgpMpiHex(p));
   if (_pgp_debug && _pgp_print)
  -fprintf(stderr, "\t %s ", pre),  mpfprintln(stderr, bc->c.size, bc->c.data);
  +_spewMPN(" c", bc->c);
        break;
       case 20:         /* DSA r */
        rc = pgpMpiSet(pre, 160, &bc->r, p, pend);
  +if (_pgp_debug && _pgp_print)
  +_spewMPN(" r", bc->r);
        break;
       case 21:         /* DSA s */
        rc = pgpMpiSet(pre, 160, &bc->s, p, pend);
  +if (_pgp_debug && _pgp_print)
  +_spewMPN(" s", bc->s);
        break;
       case 30:         /* RSA n */
        (void) mpbsethex(&bc->rsa_keypair.n, s = pgpMpiHex(p));
   if (_pgp_debug && _pgp_print)
  -fprintf(stderr, "\t %s ", pre),  mpfprintln(stderr, bc->rsa_keypair.n.size, 
bc->rsa_keypair.n.modl);
  +_spewMPB(" n", bc->dsa_keypair.param.n);
        break;
       case 31:         /* RSA e */
        (void) mpnsethex(&bc->rsa_keypair.e, s = pgpMpiHex(p));
   if (_pgp_debug && _pgp_print)
  -fprintf(stderr, "\t %s ", pre),  mpfprintln(stderr, bc->rsa_keypair.e.size, 
bc->rsa_keypair.e.data);
  +_spewMPN(" e", bc->rsa_keypair.e);
        break;
       case 40:         /* DSA p */
        (void) mpbsethex(&bc->dsa_keypair.param.p, s = pgpMpiHex(p));
   if (_pgp_debug && _pgp_print)
  -fprintf(stderr, "\t %s ", pre),  mpfprintln(stderr, 
bc->dsa_keypair.param.p.size, bc->dsa_keypair.param.p.modl);
  +_spewMPB(" p", bc->dsa_keypair.param.p);
        break;
       case 41:         /* DSA q */
        (void) mpbsethex(&bc->dsa_keypair.param.q, s = pgpMpiHex(p));
   if (_pgp_debug && _pgp_print)
  -fprintf(stderr, "\t %s ", pre),  mpfprintln(stderr, 
bc->dsa_keypair.param.q.size, bc->dsa_keypair.param.q.modl);
  +_spewMPB(" q", bc->dsa_keypair.param.q);
        break;
       case 42:         /* DSA g */
        (void) mpnsethex(&bc->dsa_keypair.param.g, s = pgpMpiHex(p));
   if (_pgp_debug && _pgp_print)
  -fprintf(stderr, "\t %s ", pre),  mpfprintln(stderr, 
bc->dsa_keypair.param.g.size, bc->dsa_keypair.param.g.data);
  +_spewMPN(" g", bc->dsa_keypair.param.g);
        break;
       case 43:         /* DSA y */
        (void) mpnsethex(&bc->dsa_keypair.y, s = pgpMpiHex(p));
   if (_pgp_debug && _pgp_print)
  -fprintf(stderr, "\t %s ", pre),  mpfprintln(stderr, bc->dsa_keypair.y.size, 
bc->dsa_keypair.y.data);
  +_spewMPN(" y", bc->dsa_keypair.y);
        break;
       }
       s = _free(s);
  @@ .
______________________________________________________________________
RPM Package Manager                                    http://rpm5.org
CVS Sources Repository                                [email protected]

Reply via email to