fdSetCpioPos(fsm->cfd, 0);
}
fsm->iter = mapInitIterator(ts, fi);
+ fsm->digestalgo = fi->digestalgo;
if (fsm->goal == FSM_PKGINSTALL || fsm->goal == FSM_PKGBUILD) {
void * ptr;
{ rpmts ts = fsmGetTs(fsm);
/*
- * Set file md5 (if not disabled).
+ * Set file checksum (if not disabled).
*/
if (ts != NULL && !(rpmtsFlags(ts) & RPMTRANS_FLAG_NOMD5)) {
+ size_t diglen = rpmDigestLength(fsm->digestalgo);
fsm->fdigest = (fi->fdigests ? fi->fdigests[i] : NULL);
- fsm->digest = (char *)(fi->digests ? (fi->digests + (16 * i)) : NULL);
+ fsm->digest = (char *)(fi->digests ? (fi->digests + (diglen * i)) : NULL);
} else {
fsm->fdigest = NULL;
fsm->digest = NULL;
goto exit;
if (st->st_size > 0 && (fsm->fdigest != NULL || fsm->digest != NULL))
- fdInitDigest(fsm->wfd, PGPHASHALGO_MD5, 0);
+ fdInitDigest(fsm->wfd, fsm->digestalgo, 0);
while (left) {
int asAscii = (fsm->digest == NULL ? 1 : 0);
(void) Fflush(fsm->wfd);
- fdFiniDigest(fsm->wfd, PGPHASHALGO_MD5, &digest, NULL, asAscii);
+ fdFiniDigest(fsm->wfd, fsm->digestalgo, &digest, NULL, asAscii);
if (digest == NULL) {
rc = CPIOERR_MD5SUM_MISMATCH;
}
if (fsm->digest != NULL) {
- if (memcmp(digest, fsm->digest, 16))
+ size_t diglen = rpmDigestLength(fsm->digestalgo);
+ if (memcmp(digest, fsm->digest, diglen))
rc = CPIOERR_MD5SUM_MISMATCH;
} else {
if (strcmp(digest, fsm->fdigest))
const char * fdigest; /*!< Hex checksum (NULL disables). */
const char * digest; /*!< Binary checksum (NULL disables). */
const char * fcontext; /*!< File security context (NULL disables). */
+ pgpHashAlgo digestalgo; /*!< File checksum algorithm */
unsigned fflags; /*!< File flags. */
rpmFileAction action; /*!< File disposition. */