RTDECL(PCRTCRCERTCTX) RTCrStoreCertByIssuerAndSerialNo(RTCRSTORE hStore, PCRTCRX509NAME pIssuer, PCRTASN1INTEGER pSerialNo) { PRTCRSTOREINT pThis = (PRTCRSTOREINT)hStore; AssertPtrReturn(pThis, NULL); AssertReturn(pThis->u32Magic == RTCRSTOREINT_MAGIC, NULL); AssertPtrReturn(pIssuer, NULL); int rc; RTCRSTORECERTSEARCH Search; if (pThis->pProvider->pfnCertFindByIssuerAndSerialNo) rc = pThis->pProvider->pfnCertFindByIssuerAndSerialNo(pThis->pvProvider, pIssuer, pSerialNo, &Search); else rc = pThis->pProvider->pfnCertFindAll(pThis->pvProvider, &Search); PCRTCRCERTCTX pCertCtx = NULL; if (RT_SUCCESS(rc)) { for (;;) { pCertCtx = pThis->pProvider->pfnCertSearchNext(pThis->pvProvider, &Search); if (!pCertCtx) break; if ( pCertCtx->pCert && RTCrX509Certificate_MatchIssuerAndSerialNumber(pCertCtx->pCert, pIssuer, pSerialNo)) break; RTCrCertCtxRelease(pCertCtx); } pThis->pProvider->pfnCertSearchDestroy(pThis->pvProvider, &Search); } else AssertMsg(rc == VERR_NOT_FOUND, ("%Rrc\n", rc)); return pCertCtx; }
RTCrPkcs7SetOfCerts_FindX509ByIssuerAndSerialNumber(PCRTCRPKCS7SETOFCERTS pCertificates, PCRTCRX509NAME pIssuer, PCRTASN1INTEGER pSerialNumber) { for (uint32_t i = 0; i < pCertificates->cItems; i++) if ( pCertificates->paItems[i].enmChoice == RTCRPKCS7CERTCHOICE_X509 && RTCrX509Certificate_MatchIssuerAndSerialNumber(pCertificates->paItems[i].u.pX509Cert, pIssuer, pSerialNumber)) return pCertificates->paItems[i].u.pX509Cert; return NULL; }