static DWORD WINTRUST_VerifySigner(CRYPT_PROVIDER_DATA *data, DWORD signerIdx) { DWORD err; CERT_INFO *certInfo = WINTRUST_GetSignerCertInfo(data, signerIdx); if (certInfo) { PCCERT_CONTEXT subject = CertGetSubjectCertificateFromStore( data->pahStores[0], data->dwEncoding, certInfo); if (subject) { CMSG_CTRL_VERIFY_SIGNATURE_EX_PARA para = { sizeof(para), 0, signerIdx, CMSG_VERIFY_SIGNER_CERT, (LPVOID)subject }; if (!CryptMsgControl(data->hMsg, 0, CMSG_CTRL_VERIFY_SIGNATURE_EX, ¶)) err = TRUST_E_CERT_SIGNATURE; else { data->psPfns->pfnAddCert2Chain(data, signerIdx, FALSE, 0, subject); err = ERROR_SUCCESS; } CertFreeCertificateContext(subject); } else err = TRUST_E_NO_SIGNER_CERT; data->psPfns->pfnFree(certInfo); } else err = GetLastError(); return err; }
static BOOL WINTRUST_VerifySigner(CRYPT_PROVIDER_DATA *data, DWORD signerIdx) { BOOL ret; CERT_INFO *certInfo = WINTRUST_GetSignerCertInfo(data, signerIdx); if (certInfo) { PCCERT_CONTEXT subject = CertGetSubjectCertificateFromStore( data->pahStores[0], data->dwEncoding, certInfo); if (subject) { CMSG_CTRL_VERIFY_SIGNATURE_EX_PARA para = { sizeof(para), 0, signerIdx, CMSG_VERIFY_SIGNER_CERT, (LPVOID)subject }; ret = CryptMsgControl(data->hMsg, 0, CMSG_CTRL_VERIFY_SIGNATURE_EX, ¶); if (!ret) SetLastError(TRUST_E_CERT_SIGNATURE); else data->psPfns->pfnAddCert2Chain(data, signerIdx, FALSE, 0, subject); CertFreeCertificateContext(subject); } else { SetLastError(TRUST_E_NO_SIGNER_CERT); ret = FALSE; } data->psPfns->pfnFree(certInfo); } else ret = FALSE; return ret; }