RPM Package Manager, CVS Repository http://rpm5.org/cvs/ ____________________________________________________________________________
Server: rpm5.org Name: Jeff Johnson Root: /v/rpm/cvs Email: j...@rpm5.org Module: rpm Date: 11-Apr-2016 00:19:57 Branch: rpm-5_4 Handle: 2016041022195700 Modified files: (Branch: rpm-5_4) rpm/rpmio rpmhkp.c rpmhkp.h Log: - rpmhkp: rewrite algorithm parameter loading, avoid pgpPrtPkts() laziness. Summary: Revision Changes Path 2.20.2.14 +25 -12 rpm/rpmio/rpmhkp.c 2.9.2.3 +1 -1 rpm/rpmio/rpmhkp.h ____________________________________________________________________________ patch -p0 <<'@@ .' Index: rpm/rpmio/rpmhkp.c ============================================================================ $ cvs diff -u -r2.20.2.13 -r2.20.2.14 rpmhkp.c --- rpm/rpmio/rpmhkp.c 4 Apr 2016 18:31:28 -0000 2.20.2.13 +++ rpm/rpmio/rpmhkp.c 10 Apr 2016 22:19:57 -0000 2.20.2.14 @@ -399,9 +399,6 @@ } if (p) { -#ifdef DYING - p = pgpPrtPubkeyParams(dig, pp, pubkey_algo, p); -#else const rpmuint8_t * pend = pp->u.h + pp->hlen; const char * rsalbl[] = { " n =", " e =", NULL }; @@ -456,7 +453,6 @@ if (p != pend || i != nmpis) goto exit; -#endif rc = 0; } @@ -534,8 +530,13 @@ goto exit; } sigp->version = pp->u.h[0]; + sigp->pubkey_algo = 0; + sigp->hash_algo = 0; switch (pp->u.h[0]) { + default: + goto exit; + break; case 3: { sigp->version = pp->u.r->version; sigp->pubkey_algo = pp->u.r->pubkey_algo; @@ -624,10 +625,6 @@ /* XXX Load signature paramaters. */ if (p) { -#ifdef DYING - pgpPrtSigParams(dig, pp, - (pgpPubkeyAlgo)sigp->pubkey_algo, (pgpSigType)sigp->sigtype, p); -#else const rpmuint8_t * pend = pp->u.h + pp->hlen; const char * rsalbl[] = { " m**d =", NULL }; const char * dsalbl[] = { " r =", " s =", NULL }; @@ -639,8 +636,8 @@ switch (sigp->pubkey_algo) { case PGPPUBKEYALGO_EDDSA: default: - goto exit; - break; + goto exit; + break; case PGPPUBKEYALGO_RSA: lbl = rsalbl; nmpis = 1; mpix = 10; break; @@ -652,6 +649,23 @@ break; } + switch (sigp->hash_algo) { + default: + goto exit; + break; + case PGPHASHALGO_MD5: + case PGPHASHALGO_SHA1: + case PGPHASHALGO_RIPEMD160: + case PGPHASHALGO_MD2: + case PGPHASHALGO_TIGER192: + case PGPHASHALGO_HAVAL_5_160: + case PGPHASHALGO_SHA256: + case PGPHASHALGO_SHA384: + case PGPHASHALGO_SHA512: + case PGPHASHALGO_SHA224: + break; + } + for (i = 0; i < nmpis && p+2 <= pend; i++) { int mpil = pgpMpiLen(p); if (mpil < 0) @@ -665,12 +679,11 @@ if (p != pend || i != nmpis) goto exit; -#endif rc = 0; } exit: -HKPDEBUG((stderr, "<-- %s(%p,%p,%p) rc %d V%u\n", __FUNCTION__, hkp, dig, pp, rc, sigp->version)); +HKPDEBUG((stderr, "<-- %s(%p,%p,%p) rc %d V%u %u/%u\n", __FUNCTION__, hkp, dig, pp, rc, sigp->version, sigp->pubkey_algo, sigp->hash_algo)); return rc; } @@ . patch -p0 <<'@@ .' Index: rpm/rpmio/rpmhkp.h ============================================================================ $ cvs diff -u -r2.9.2.2 -r2.9.2.3 rpmhkp.h --- rpm/rpmio/rpmhkp.h 20 Jul 2014 00:08:43 -0000 2.9.2.2 +++ rpm/rpmio/rpmhkp.h 10 Apr 2016 22:19:57 -0000 2.9.2.3 @@ -126,7 +126,6 @@ rpmRC rpmhkpValidate(/*@null@*/ rpmhkp hkp, /*@null@*/ const char * keyname) /*@*/; -#if defined(_RPMHKP_INTERNAL) /** * Load values into pubkey params from packet. * @param hkp hkp handle @@ -149,6 +148,7 @@ int rpmhkpLoadSignature(/*@null@*/ rpmhkp hkp, pgpDig dig, pgpPkt pp) /*@*/; +#if defined(_RPMHKP_INTERNAL) /** * Retrieve/Load the pubkey associated with a signature. * @param hkp hkp handle @@ . ______________________________________________________________________ RPM Package Manager http://rpm5.org CVS Sources Repository rpm-cvs@rpm5.org