rpmbc.c   rpmbc.c 
skipping to change at line 112 skipping to change at line 112
_spewMPN("hm", bc->hm); _spewMPN("hm", bc->hm);
} }
#endif /* UNUSED */ #endif /* UNUSED */
static static
int rpmbcSetRSA(/*@only@*/ DIGEST_CTX ctx, pgpDig dig, pgpDigParams sigp) int rpmbcSetRSA(/*@only@*/ DIGEST_CTX ctx, pgpDig dig, pgpDigParams sigp)
/*@modifies dig @*/ /*@modifies dig @*/
{ {
rpmbc bc = dig->impl; rpmbc bc = (rpmbc) dig->impl;
size_t nbits = 0; size_t nbits = 0;
size_t nb = 0; size_t nb = 0;
const char * prefix = rpmDigestASN1(ctx); const char * prefix = rpmDigestASN1(ctx);
const char * hexstr; const char * hexstr;
char * tt; char * tt;
int rc = 1; /* assume failure */ int rc = 1; /* assume failure */
int xx; int xx;
pgpDigParams pubp = pgpGetPubkey(dig); pgpDigParams pubp = pgpGetPubkey(dig);
dig->pubkey_algoN = _pgpPubkeyAlgo2Name(pubp->pubkey_algo); dig->pubkey_algoN = _pgpPubkeyAlgo2Name(pubp->pubkey_algo);
dig->hash_algoN = _pgpHashAlgo2Name(sigp->hash_algo); dig->hash_algoN = _pgpHashAlgo2Name(sigp->hash_algo);
skipping to change at line 147 skipping to change at line 147
nb = (nbits + 7) >> 3; /* XXX overkill */ nb = (nbits + 7) >> 3; /* XXX overkill */
if (nb < 64/8 || nb > 65536/8) /* XXX generous "sanity" check */ if (nb < 64/8 || nb > 65536/8) /* XXX generous "sanity" check */
goto exit; goto exit;
/* XXX FIXME: do PKCS1 padding in binary not hex */ /* XXX FIXME: do PKCS1 padding in binary not hex */
/* XXX FIXME: should this lazy free be done elsewhere? */ /* XXX FIXME: should this lazy free be done elsewhere? */
bc->digest = _free(bc->digest); bc->digest = _free(bc->digest);
bc->digestlen = 0; bc->digestlen = 0;
xx = rpmDigestFinal(ctx, (void **)&bc->digest, &bc->digestlen, 1); xx = rpmDigestFinal(ctx, (void **)&bc->digest, &bc->digestlen, 1);
ctx = NULL; /* XXX avoid double free */ ctx = NULL; /* XXX avoid double free */
hexstr = tt = xmalloc(2 * nb + 1); hexstr = tt = (char *) xmalloc(2 * nb + 1);
memset(tt, (int) 'f', (2 * nb)); memset(tt, (int) 'f', (2 * nb));
tt[0] = '0'; tt[1] = '0'; tt[0] = '0'; tt[1] = '0';
tt[2] = '0'; tt[3] = '1'; tt[2] = '0'; tt[3] = '1';
tt += (2 * nb) - strlen(prefix) - strlen(bc->digest) - 2; tt += (2 * nb) - strlen(prefix) - strlen((char *)bc->digest) - 2;
*tt++ = '0'; *tt++ = '0'; *tt++ = '0'; *tt++ = '0';
tt = stpcpy(tt, prefix); tt = stpcpy(tt, prefix);
tt = stpcpy(tt, bc->digest); tt = stpcpy(tt, (char *)bc->digest);
/*@-moduncon -noeffectuncon @*/ /*@-moduncon -noeffectuncon @*/
mpnfree(&bc->hm); mpnfree(&bc->hm);
mpnzero(&bc->hm); (void) mpnsethex(&bc->hm, hexstr); mpnzero(&bc->hm); (void) mpnsethex(&bc->hm, hexstr);
/*@=moduncon =noeffectuncon @*/ /*@=moduncon =noeffectuncon @*/
hexstr = _free(hexstr); hexstr = _free(hexstr);
/* Compare leading 16 bits of digest for quick check. */ /* Compare leading 16 bits of digest for quick check. */
{ const char *str = bc->digest; { const char *str = (const char *) bc->digest;
rpmuint8_t s[2]; rpmuint8_t s[2];
const rpmuint8_t *t = sigp->signhash16; const rpmuint8_t *t = sigp->signhash16;
s[0] = (rpmuint8_t) (nibble(str[0]) << 4) | nibble(str[1]); s[0] = (rpmuint8_t) (nibble(str[0]) << 4) | nibble(str[1]);
s[1] = (rpmuint8_t) (nibble(str[2]) << 4) | nibble(str[3]); s[1] = (rpmuint8_t) (nibble(str[2]) << 4) | nibble(str[3]);
rc = memcmp(s, t, sizeof(sigp->signhash16)); rc = memcmp(s, t, sizeof(sigp->signhash16));
} }
exit: exit:
if (ctx) { /* XXX Free the context on error returns. */ if (ctx) { /* XXX Free the context on error returns. */
xx = rpmDigestFinal(ctx, NULL, NULL, 0); xx = rpmDigestFinal(ctx, NULL, NULL, 0);
ctx = NULL; ctx = NULL;
} }
SPEW(0, !rc, dig); SPEW(0, !rc, dig);
return rc; return rc;
} }
static static
int rpmbcVerifyRSA(pgpDig dig) int rpmbcVerifyRSA(pgpDig dig)
/*@*/ /*@*/
{ {
rpmbc bc = dig->impl; rpmbc bc = (rpmbc) dig->impl;
int rc; int rc;
rc = rsavrfy(&bc->rsa_keypair.n, &bc->rsa_keypair.e, &bc->c, &bc->hm); rc = rsavrfy(&bc->rsa_keypair.n, &bc->rsa_keypair.e, &bc->c, &bc->hm);
SPEW(0, rc, dig); SPEW(0, rc, dig);
return rc; return rc;
} }
static static
int rpmbcSignRSA(/*@unused@*/pgpDig dig) int rpmbcSignRSA(/*@unused@*/pgpDig dig)
/*@*/ /*@*/
{ {
rpmbc bc = dig->impl; rpmbc bc = (rpmbc) dig->impl;
int rc = 0; /* Assume failure. */ int rc = 0; /* Assume failure. */
int failures = 0; int failures = 0;
int xx; int xx;
mpnzero(&bc->c); mpnzero(&bc->c);
#ifdef SLOWER #ifdef SLOWER
xx = rsapri(&bc->rsa_keypair.n, &bc->rsa_keypair.d, &bc->hm, &bc->c); xx = rsapri(&bc->rsa_keypair.n, &bc->rsa_keypair.d, &bc->hm, &bc->c);
#else #else
/* XXX RSA w CRT is ~3x-4x 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, xx = rsapricrt(&bc->rsa_keypair.n, &bc->rsa_keypair.p, &bc->rsa_keypair .q,
skipping to change at line 224 skipping to change at line 224
rc = (failures == 0); rc = (failures == 0);
SPEW(!rc, rc, dig); SPEW(!rc, rc, dig);
return rc; return rc;
} }
static static
int rpmbcGenerateRSA(/*@unused@*/pgpDig dig) int rpmbcGenerateRSA(/*@unused@*/pgpDig dig)
/*@*/ /*@*/
{ {
rpmbc bc = dig->impl; rpmbc bc = (rpmbc) dig->impl;
int rc = 0; /* Assume failure. */ int rc = 0; /* Assume failure. */
int failures = 0; int failures = 0;
int xx; int xx;
if (bc->nbits == 0) bc->nbits = 1024; /* XXX FIXME */ if (bc->nbits == 0) bc->nbits = 1024; /* XXX FIXME */
xx = randomGeneratorContextInit(&bc->rngc, randomGeneratorDefault()); xx = randomGeneratorContextInit(&bc->rngc, randomGeneratorDefault());
rsakpFree(&bc->rsa_keypair); rsakpFree(&bc->rsa_keypair);
xx = rsakpMake(&bc->rsa_keypair, &bc->rngc, bc->nbits); xx = rsakpMake(&bc->rsa_keypair, &bc->rngc, bc->nbits);
skipping to change at line 251 skipping to change at line 251
rc = (failures == 0); rc = (failures == 0);
SPEW(!rc, rc, dig); SPEW(!rc, rc, dig);
return rc; return rc;
} }
static static
int rpmbcSetDSA(/*@only@*/ DIGEST_CTX ctx, pgpDig dig, pgpDigParams sigp) int rpmbcSetDSA(/*@only@*/ DIGEST_CTX ctx, pgpDig dig, pgpDigParams sigp)
/*@modifies dig @*/ /*@modifies dig @*/
{ {
rpmbc bc = dig->impl; rpmbc bc = (rpmbc) dig->impl;
int rc; int rc;
pgpDigParams pubp = pgpGetPubkey(dig); pgpDigParams pubp = pgpGetPubkey(dig);
dig->pubkey_algoN = _pgpPubkeyAlgo2Name(pubp->pubkey_algo); dig->pubkey_algoN = _pgpPubkeyAlgo2Name(pubp->pubkey_algo);
dig->hash_algoN = _pgpHashAlgo2Name(sigp->hash_algo); dig->hash_algoN = _pgpHashAlgo2Name(sigp->hash_algo);
assert(sigp->hash_algo == rpmDigestAlgo(ctx)); assert(sigp->hash_algo == rpmDigestAlgo(ctx));
bc->digest = _free(bc->digest); bc->digest = _free(bc->digest);
bc->digestlen = 0; bc->digestlen = 0;
rc = rpmDigestFinal(ctx, (void **)&bc->digest, &bc->digestlen, 0); rc = rpmDigestFinal(ctx, (void **)&bc->digest, &bc->digestlen, 0);
/* XXX Truncate to 160bits. */ /* XXX Truncate to 160bits. */
rc = mpnsetbin(&bc->hm, bc->digest, rc = mpnsetbin(&bc->hm, (byte *) bc->digest,
(bc->digestlen > 160/8 ? 160/8 : bc->digestlen)); (bc->digestlen > 160/8 ? 160/8 : bc->digestlen));
rc = memcmp(bc->digest, sigp->signhash16, sizeof(sigp->signhash16)); rc = memcmp(bc->digest, sigp->signhash16, sizeof(sigp->signhash16));
SPEW(0, !rc, dig); SPEW(0, !rc, dig);
return rc; return rc;
} }
static static
int rpmbcVerifyDSA(pgpDig dig) int rpmbcVerifyDSA(pgpDig dig)
/*@*/ /*@*/
{ {
rpmbc bc = dig->impl; rpmbc bc = (rpmbc) dig->impl;
int rc = 0; /* Assume failure. */ int rc = 0; /* Assume failure. */
int failures = 0; int failures = 0;
int xx; int xx;
xx = dsavrfy(&bc->dsa_keypair.param.p, &bc->dsa_keypair.param.q, xx = dsavrfy(&bc->dsa_keypair.param.p, &bc->dsa_keypair.param.q,
&bc->dsa_keypair.param.g, &bc->hm, &bc->dsa_keypair.y, &bc->dsa_keypair.param.g, &bc->hm, &bc->dsa_keypair.y,
&bc->r, &bc->s); &bc->r, &bc->s);
if (!xx) failures++; if (!xx) failures++;
rc = (failures == 0); rc = (failures == 0);
SPEW(0, rc, dig); SPEW(0, rc, dig);
return rc; return rc;
} }
static static
int rpmbcSignDSA(pgpDig dig) int rpmbcSignDSA(pgpDig dig)
/*@*/ /*@*/
{ {
rpmbc bc = dig->impl; rpmbc bc = (rpmbc) dig->impl;
int rc = 0; /* Assume failure. */ int rc = 0; /* Assume failure. */
int failures = 0; int failures = 0;
int xx; int xx;
mpnzero(&bc->r); mpnzero(&bc->r);
mpnzero(&bc->s); mpnzero(&bc->s);
xx = dsasign(&bc->dsa_keypair.param.p, &bc->dsa_keypair.param.q, xx = dsasign(&bc->dsa_keypair.param.p, &bc->dsa_keypair.param.q,
&bc->dsa_keypair.param.g, &bc->rngc, &bc->hm, &bc->dsa_keypair.param.g, &bc->rngc, &bc->hm,
&bc->dsa_keypair.x, &bc->r, &bc->s); &bc->dsa_keypair.x, &bc->r, &bc->s);
if (xx) failures++; if (xx) failures++;
skipping to change at line 317 skipping to change at line 317
rc = (failures == 0); rc = (failures == 0);
SPEW(!rc, rc, dig); SPEW(!rc, rc, dig);
return rc; return rc;
} }
static static
int rpmbcGenerateDSA(pgpDig dig) int rpmbcGenerateDSA(pgpDig dig)
/*@*/ /*@*/
{ {
rpmbc bc = dig->impl; rpmbc bc = (rpmbc) dig->impl;
int rc = 0; /* Assume failure. */ int rc = 0; /* Assume failure. */
int failures = 0; int failures = 0;
int xx; int xx;
if (bc->nbits == 0) bc->nbits = 1024; /* XXX FIXME */ if (bc->nbits == 0) bc->nbits = 1024; /* XXX FIXME */
xx = randomGeneratorContextInit(&bc->rngc, randomGeneratorDefault()); xx = randomGeneratorContextInit(&bc->rngc, randomGeneratorDefault());
xx = dlkp_pInit(&bc->dsa_keypair); xx = dlkp_pInit(&bc->dsa_keypair);
if (xx) failures++; if (xx) failures++;
skipping to change at line 365 skipping to change at line 365
SPEW(rc, !rc, dig); SPEW(rc, !rc, dig);
return rc; return rc;
} }
#ifdef NOTYET #ifdef NOTYET
static static
int rpmbcVerifyELG(pgpDig dig) int rpmbcVerifyELG(pgpDig dig)
/*@*/ /*@*/
{ {
rpmbc bc = dig->impl; rpmbc bc = (rpmbc) dig->impl;
int rc = 0; /* Assume failure. */ int rc = 0; /* Assume failure. */
int failures = 0; int failures = 0;
int xx; int xx;
xx = elgv1vrfy(&bc->elg_keypair.param.p, &bc->elg_keypair.param.n, xx = elgv1vrfy(&bc->elg_keypair.param.p, &bc->elg_keypair.param.n,
&bc->elg_keypair.param.g, &bc->hm, &bc->elg_keypair.y, &bc->elg_keypair.param.g, &bc->hm, &bc->elg_keypair.y,
&bc->r, &bc->s); &bc->r, &bc->s);
if (xx) failures++; if (xx) failures++;
rc = (failures == 0); rc = (failures == 0);
SPEW(!rc, rc, dig); SPEW(!rc, rc, dig);
return rc; return rc;
} }
static static
int rpmbcSignELG(/*@unused@*/pgpDig dig) int rpmbcSignELG(/*@unused@*/pgpDig dig)
/*@*/ /*@*/
{ {
rpmbc bc = dig->impl; rpmbc bc = (rpmbc) dig->impl;
int rc = 0; /* Assume failure. */ int rc = 0; /* Assume failure. */
int failures = 0; int failures = 0;
int xx; int xx;
mpnzero(&bc->r); mpnzero(&bc->r);
mpnzero(&bc->s); mpnzero(&bc->s);
xx = elgv1sign(&bc->elg_keypair.param.p, &bc->elg_keypair.param.n, xx = elgv1sign(&bc->elg_keypair.param.p, &bc->elg_keypair.param.n,
&bc->elg_keypair.param.g, &bc->rngc, &bc->hm, &bc->elg_keypair.param.g, &bc->rngc, &bc->hm,
&bc->elg_keypair.x, &bc->r, &bc->s); &bc->elg_keypair.x, &bc->r, &bc->s);
if (xx) failures++; if (xx) failures++;
skipping to change at line 410 skipping to change at line 410
return rc; return rc;
} }
static static
int rpmbcGenerateELG(/*@unused@*/pgpDig dig) int rpmbcGenerateELG(/*@unused@*/pgpDig dig)
/*@*/ /*@*/
{ {
static const char P_2048[] = "fd12e8b7e096a28a00fb548035953cf0eba64ceb5dff0 f5672d376d59c196da729f6b5586f18e6f3f1a86c73c5b15662f59439613b309e52aa257488 619e5f76a7c4c3f7a426bdeac66bf88343482941413cef06256b39c62744dcb97e7b78e36ec 6b885b143f6f3ad0a1cd8a5713e338916613892a264d4a47e72b583fbdaf5bce2bbb0097f7e 65cbc86d684882e5bb8196d522dcacd6ad00dfbcd8d21613bdb59c485a65a58325d792272c0 9ad1173e12c98d865adb4c4d676ada79830c58c37c42dff8536e28f148a23f296513816d3df ed0397a3d4d6e1fa24f07e1b01643a68b4274646a3b876e810206eddacea2b9ef7636a1da58 80ef654288b857ea3"; static const char P_2048[] = "fd12e8b7e096a28a00fb548035953cf0eba64ceb5dff0 f5672d376d59c196da729f6b5586f18e6f3f1a86c73c5b15662f59439613b309e52aa257488 619e5f76a7c4c3f7a426bdeac66bf88343482941413cef06256b39c62744dcb97e7b78e36ec 6b885b143f6f3ad0a1cd8a5713e338916613892a264d4a47e72b583fbdaf5bce2bbb0097f7e 65cbc86d684882e5bb8196d522dcacd6ad00dfbcd8d21613bdb59c485a65a58325d792272c0 9ad1173e12c98d865adb4c4d676ada79830c58c37c42dff8536e28f148a23f296513816d3df ed0397a3d4d6e1fa24f07e1b01643a68b4274646a3b876e810206eddacea2b9ef7636a1da58 80ef654288b857ea3";
static const char P_1024[] = "e64a3deeddb723e2e4db54c2b09567d196367a86b3b30 2be07e43ffd7f2e016f866de5135e375bdd2fba6ea9b4299010fafa36dc6b02ba3853cceea0 7ee94bfe30e0cc82a69c73163be26e0c4012dfa0b2839c97d6cd71eee59a303d6177c6a6740 ca63bd04c1ba084d6c369dc2fbfaeebe951d58a4824de52b580442d8cae77"; static const char P_1024[] = "e64a3deeddb723e2e4db54c2b09567d196367a86b3b30 2be07e43ffd7f2e016f866de5135e375bdd2fba6ea9b4299010fafa36dc6b02ba3853cceea0 7ee94bfe30e0cc82a69c73163be26e0c4012dfa0b2839c97d6cd71eee59a303d6177c6a6740 ca63bd04c1ba084d6c369dc2fbfaeebe951d58a4824de52b580442d8cae77";
rpmbc bc = dig->impl; rpmbc bc = (rpmbc) dig->impl;
int rc = 0; /* Assume failure. */ int rc = 0; /* Assume failure. */
int failures = 0; int failures = 0;
int xx; int xx;
xx = randomGeneratorContextInit(&bc->rngc, randomGeneratorDefault()); xx = randomGeneratorContextInit(&bc->rngc, randomGeneratorDefault());
xx = 0; xx = 0;
xx = dlkp_pInit(&bc->elg_keypair); xx = dlkp_pInit(&bc->elg_keypair);
if (xx) failures++; if (xx) failures++;
skipping to change at line 529 skipping to change at line 529
assert(bc->hm); /* XXX FIXME: make sure bc->hm is set */ assert(bc->hm); /* XXX FIXME: make sure bc->hm is set */
SPEW(!rc, rc, dig); SPEW(!rc, rc, dig);
return rc; return rc;
} }
static static
int rpmbcGenerateECDSA(/*@unused@*/pgpDig dig) int rpmbcGenerateECDSA(/*@unused@*/pgpDig dig)
/*@*/ /*@*/
{ {
rpmbc bc = dig->impl; rpmbc bc = (rpmbc) dig->impl;
int rc = 0; /* Assume failure. */ int rc = 0; /* Assume failure. */
int failures = 0; int failures = 0;
int xx; int xx;
if (bc->rngc == NULL) if (bc->rngc == NULL)
xx = randomGeneratorContextInit(&bc->rngc, randomGeneratorDefault()) ; xx = randomGeneratorContextInit(&bc->rngc, randomGeneratorDefault()) ;
rc = (failures == 0); rc = (failures == 0);
SPEW(!rc, rc, dig); SPEW(!rc, rc, dig);
skipping to change at line 685 skipping to change at line 685
return rc; return rc;
} }
/** /**
*/ */
static /*@only@*/ static /*@only@*/
char * pgpMpiHex(const rpmuint8_t *p) char * pgpMpiHex(const rpmuint8_t *p)
/*@*/ /*@*/
{ {
size_t nb = pgpMpiLen(p); size_t nb = pgpMpiLen(p);
char * t = xmalloc(2*nb + 1); char * t = (char *) xmalloc(2*nb + 1);
(void) pgpHexCvt(t, p+2, nb-2); (void) pgpHexCvt(t, p+2, nb-2);
return t; return t;
} }
/** /**
* @return 0 on success * @return 0 on success
*/ */
static static
int pgpMpiSet(const char * pre, unsigned int lbits, int pgpMpiSet(const char * pre, unsigned int lbits,
/*@out@*/ void * dest, const rpmuint8_t * p, /*@out@*/ void * dest, const rpmuint8_t * p,
/*@null@*/ const rpmuint8_t * pend) /*@null@*/ const rpmuint8_t * pend)
/*@globals fileSystem @*/ /*@globals fileSystem @*/
/*@modifies fileSystem @*/ /*@modifies fileSystem @*/
{ {
mpnumber * mpn = dest; mpnumber * mpn = (mpnumber *) dest;
unsigned int mbits = pgpMpiBits(p); unsigned int mbits = pgpMpiBits(p);
unsigned int nbits; unsigned int nbits;
unsigned int nbytes; unsigned int nbytes;
char * t; char * t;
unsigned int ix; unsigned int ix;
if (pend != NULL && (p + ((mbits+7) >> 3)) > pend) if (pend != NULL && (p + ((mbits+7) >> 3)) > pend)
return 1; return 1;
if (mbits > lbits) if (mbits > lbits)
return 1; return 1;
nbits = (lbits > mbits ? lbits : mbits); nbits = (lbits > mbits ? lbits : mbits);
nbytes = ((nbits + 7) >> 3); nbytes = ((nbits + 7) >> 3);
t = xmalloc(2*nbytes+1); t = (char *) xmalloc(2*nbytes+1);
ix = 2 * ((nbits - mbits) >> 3); ix = 2 * ((nbits - mbits) >> 3);
if (_pgp_debug) if (_pgp_debug)
fprintf(stderr, "*** mbits %u nbits %u nbytes %u t %p[%d] ix %u\n", mbits, nbits, nbytes, t, (2*nbytes+1), ix); fprintf(stderr, "*** mbits %u nbits %u nbytes %u t %p[%d] ix %u\n", mbits, nbits, nbytes, t, (2*nbytes+1), ix);
if (ix > 0) memset(t, (int)'0', ix); if (ix > 0) memset(t, (int)'0', ix);
{ const char * s = pgpMpiHex(p); { const char * s = pgpMpiHex(p);
strcpy(t+ix, s); strcpy(t+ix, s);
s = _free(s); s = _free(s);
} }
if (_pgp_debug) if (_pgp_debug)
skipping to change at line 738 skipping to change at line 738
t = _free(t); t = _free(t);
return 0; return 0;
} }
static static
int rpmbcMpiItem(const char * pre, pgpDig dig, int itemno, int rpmbcMpiItem(const char * pre, pgpDig dig, int itemno,
const rpmuint8_t * p, /*@null@*/ const rpmuint8_t * pend) const rpmuint8_t * p, /*@null@*/ const rpmuint8_t * pend)
/*@globals fileSystem @*/ /*@globals fileSystem @*/
/*@modifies fileSystem @*/ /*@modifies fileSystem @*/
{ {
rpmbc bc = dig->impl; rpmbc bc = (rpmbc) dig->impl;
const char * s = NULL; const char * s = NULL;
int rc = 0; int rc = 0;
switch (itemno) { switch (itemno) {
default: default:
assert(0); assert(0);
case 50: /* ECDSA r */ case 50: /* ECDSA r */
case 51: /* ECDSA s */ case 51: /* ECDSA s */
case 60: /* ECDSA curve OID */ case 60: /* ECDSA curve OID */
case 61: /* ECDSA Q */ case 61: /* ECDSA Q */
skipping to change at line 805 skipping to change at line 805
} }
s = _free(s); s = _free(s);
return rc; return rc;
} }
/*@-mustmod@*/ /*@-mustmod@*/
static static
void rpmbcClean(void * impl) void rpmbcClean(void * impl)
/*@modifies impl @*/ /*@modifies impl @*/
{ {
rpmbc bc = impl; rpmbc bc = (rpmbc) impl;
if (bc != NULL) { if (bc != NULL) {
bc->nbits = 0; bc->nbits = 0;
bc->err = 0; bc->err = 0;
bc->badok = 0; bc->badok = 0;
bc->digest = _free(bc->digest); bc->digest = _free(bc->digest);
bc->digestlen = 0; bc->digestlen = 0;
randomGeneratorContextFree(&bc->rngc); randomGeneratorContextFree(&bc->rngc);
rsakpFree(&bc->rsa_keypair); rsakpFree(&bc->rsa_keypair);
skipping to change at line 846 skipping to change at line 846
{ {
rpmbcClean(impl); rpmbcClean(impl);
impl = _free(impl); impl = _free(impl);
return NULL; return NULL;
} }
static static
void * rpmbcInit(void) void * rpmbcInit(void)
/*@*/ /*@*/
{ {
rpmbc bc = xcalloc(1, sizeof(*bc)); rpmbc bc = (rpmbc) xcalloc(1, sizeof(*bc));
return (void *) bc; return (void *) bc;
} }
struct pgpImplVecs_s rpmbcImplVecs = { struct pgpImplVecs_s rpmbcImplVecs = {
rpmbcSetRSA, rpmbcSetRSA,
rpmbcSetDSA, rpmbcSetDSA,
rpmbcSetELG, rpmbcSetELG,
rpmbcSetECDSA, rpmbcSetECDSA,
rpmbcErrChk, rpmbcErrChk,
skipping to change at line 873 skipping to change at line 873
int rpmbcExportPubkey(pgpDig dig) int rpmbcExportPubkey(pgpDig dig)
{ {
uint8_t pkt[8192]; uint8_t pkt[8192];
uint8_t * be = pkt; uint8_t * be = pkt;
size_t pktlen; size_t pktlen;
time_t now = time(NULL); time_t now = time(NULL);
uint32_t bt = now; uint32_t bt = now;
uint16_t bn; uint16_t bn;
pgpDigParams pubp = pgpGetPubkey(dig); pgpDigParams pubp = pgpGetPubkey(dig);
rpmbc bc = dig->impl; rpmbc bc = (rpmbc) dig->impl;
int xx; int xx;
*be++ = 0x80 | (PGPTAG_PUBLIC_KEY << 2) | 0x01; *be++ = 0x80 | (PGPTAG_PUBLIC_KEY << 2) | 0x01;
be += 2; be += 2;
*be++ = 0x04; *be++ = 0x04;
*be++ = (bt >> 24); *be++ = (bt >> 24);
*be++ = (bt >> 16); *be++ = (bt >> 16);
*be++ = (bt >> 8); *be++ = (bt >> 8);
*be++ = (bt ); *be++ = (bt );
skipping to change at line 934 skipping to change at line 934
{ {
uint8_t pkt[8192]; uint8_t pkt[8192];
uint8_t * be = pkt; uint8_t * be = pkt;
uint8_t * h; uint8_t * h;
size_t pktlen; size_t pktlen;
time_t now = time(NULL); time_t now = time(NULL);
uint32_t bt; uint32_t bt;
uint16_t bn; uint16_t bn;
pgpDigParams pubp = pgpGetPubkey(dig); pgpDigParams pubp = pgpGetPubkey(dig);
pgpDigParams sigp = pgpGetSignature(dig); pgpDigParams sigp = pgpGetSignature(dig);
rpmbc bc = dig->impl; rpmbc bc = (rpmbc) dig->impl;
int xx; int xx;
sigp->tag = PGPTAG_SIGNATURE; sigp->tag = PGPTAG_SIGNATURE;
*be++ = 0x80 | (sigp->tag << 2) | 0x01; *be++ = 0x80 | (sigp->tag << 2) | 0x01;
be += 2; /* pktlen */ be += 2; /* pktlen */
sigp->hash = be; sigp->hash = be;
*be++ = sigp->version = 0x04; /* version */ *be++ = sigp->version = 0x04; /* version */
*be++ = sigp->sigtype = PGPSIGTYPE_BINARY; /* sigtype */ *be++ = sigp->sigtype = PGPSIGTYPE_BINARY; /* sigtype */
*be++ = sigp->pubkey_algo = pubp->pubkey_algo; /* pubkey_algo */ *be++ = sigp->pubkey_algo = pubp->pubkey_algo; /* pubkey_algo */
skipping to change at line 1000 skipping to change at line 1000
trailer[2] = (sigp->hashlen >> 24); trailer[2] = (sigp->hashlen >> 24);
trailer[3] = (sigp->hashlen >> 16); trailer[3] = (sigp->hashlen >> 16);
trailer[4] = (sigp->hashlen >> 8); trailer[4] = (sigp->hashlen >> 8);
trailer[5] = (sigp->hashlen ); trailer[5] = (sigp->hashlen );
xx = rpmDigestUpdate(ctx, trailer, sizeof(trailer)); xx = rpmDigestUpdate(ctx, trailer, sizeof(trailer));
} }
sigp->signhash16[0] = 0x00; sigp->signhash16[0] = 0x00;
sigp->signhash16[1] = 0x00; sigp->signhash16[1] = 0x00;
xx = pgpImplSetDSA(ctx, dig, sigp); /* XXX signhash16 check alwa ys fails */ xx = pgpImplSetDSA(ctx, dig, sigp); /* XXX signhash16 check alwa ys fails */
h = bc->digest; h = (uint8_t *) bc->digest;
sigp->signhash16[0] = h[0]; sigp->signhash16[0] = h[0];
sigp->signhash16[1] = h[1]; sigp->signhash16[1] = h[1];
xx = pgpImplSign(dig); xx = pgpImplSign(dig);
assert(xx == 1); assert(xx == 1);
be += 2; /* skip unhashed length. */ be += 2; /* skip unhashed length. */
h = be; h = be;
*be++ = 1 + 8; /* issuer key ID */ *be++ = 1 + 8; /* issuer key ID */
 End of changes. 26 change blocks. 
26 lines changed or deleted 26 lines changed or added

This html diff was produced by rfcdiff 1.41. The latest version is available from http://tools.ietf.org/tools/rfcdiff/