21.03.2013 Views

Problem - Kevin Tafuro

Problem - Kevin Tafuro

Problem - Kevin Tafuro

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

LocalFree(wstr);<br />

return 0;<br />

}<br />

return wstr;<br />

}<br />

static LPWSTR make_wide(LPCTSTR str) {<br />

#ifndef UNICODE<br />

int len;<br />

LPWSTR wstr;<br />

if (!(len = MultiByteToWideChar(CP_UTF8, 0, str, -1, 0, 0)))<br />

return 0;<br />

if (!(wstr = (LPWSTR)LocalAlloc(LMEM_FIXED, len * sizeof(WCHAR))))<br />

return 0;<br />

if (!MultiByteToWideChar(CP_UTF8, 0, str, -1, wstr, len)) {<br />

LocalFree(wstr);<br />

return 0;<br />

}<br />

return wstr;<br />

#else<br />

return fold_wide(str);<br />

#endif<br />

}<br />

BOOL SpcVerifyCertHostName(PCCERT_CONTEXT pCertContext, LPCTSTR hostname) {<br />

BOOL bResult = FALSE;<br />

DWORD cbStructInfo, dwCommonNameLength, i;<br />

LPSTR szOID;<br />

LPVOID pvStructInfo;<br />

LPWSTR lpszCommonName, lpszDNSName, lpszHostName, lpszTemp;<br />

CERT_EXTENSION *pExtension;<br />

CERT_ALT_NAME_INFO *pNameInfo;<br />

if (!(lpszHostName = make_wide(hostname))) return FALSE;<br />

/* Try SUBJECT_ALT_NAME2 first - it supercedes SUBJECT_ALT_NAME */<br />

szOID = szOID_SUBJECT_ALT_NAME2;<br />

pExtension = CertFindExtension(szOID, pCertContext->pCertInfo->cExtension,<br />

pCertContext->pCertInfo->rgExtension);<br />

if (!pExtension) {<br />

szOID = szOID_SUBJECT_ALT_NAME;<br />

pExtension = CertFindExtension(szOID, pCertContext->pCertInfo->cExtension,<br />

pCertContext->pCertInfo->rgExtension);<br />

}<br />

if (pExtension && CryptDecodeObject(X509_ASN_ENCODING, szOID,<br />

pExtension->Value.pbData, pExtension->Value.cbData, 0, 0, &cbStructInfo)) {<br />

if ((pvStructInfo = LocalAlloc(LMEM_FIXED, cbStructInfo)) != 0) {<br />

CryptDecodeObject(X509_ASN_ENCODING, szOID, pExtension->Value.pbData,<br />

pExtension->Value.cbData, 0, pvStructInfo, &cbStructInfo);<br />

pNameInfo = (CERT_ALT_NAME_INFO *)pvStructInfo;<br />

542 | Chapter 10: Public Key Infrastructure<br />

This is the Title of the Book, eMatter Edition<br />

Copyright © 2007 O’Reilly & Associates, Inc. All rights reserved.

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!