|
|
//+-------------------------------------------------------------------------
//
// Microsoft Windows
//
// Copyright (C) Microsoft Corporation, 1996 - 1999
//
// File: sphelper.cpp
//
// Contents: Microsoft Internet Security Authenticode Policy Provider
//
// Functions: spGetAgencyNameOfCert
// spGetAgencyNameOfCert
// spGetPublisherNameOfCert
// spGetCommonNameExtension
// spGetAgencyName
// spGetRDNAttrWStr
//
// History: 05-Oct-1997 pberkman created
//
//--------------------------------------------------------------------------
#include "global.hxx"
WCHAR *spGetAgencyNameOfCert(PCCERT_CONTEXT pCert) { LPWSTR pwsz;
if (pwsz = spGetCommonNameExtension(pCert)) { return(pwsz); } return(spGetAgencyName(&pCert->pCertInfo->Subject)); }
WCHAR *spGetPublisherNameOfCert(IN PCCERT_CONTEXT pCert) { LPWSTR pwsz;
if (pwsz = spGetCommonNameExtension(pCert)) { return(pwsz); }
return(spGetRDNAttrWStr(szOID_COMMON_NAME, &pCert->pCertInfo->Subject)); }
WCHAR *spGetCommonNameExtension(PCCERT_CONTEXT pCert) { LPWSTR pwsz = NULL; PCERT_NAME_VALUE pNameValue = NULL; PCERT_EXTENSION pExt;
pwsz = NULL; pNameValue = NULL;
pExt = CertFindExtension(SPC_COMMON_NAME_OBJID, pCert->pCertInfo->cExtension, pCert->pCertInfo->rgExtension); if (pExt) { DWORD cbInfo; PCERT_RDN_VALUE_BLOB pValue; DWORD dwValueType; DWORD cwsz;
cbInfo = 0;
CryptDecodeObject( X509_ASN_ENCODING, X509_NAME_VALUE, pExt->Value.pbData, pExt->Value.cbData, 0, NULL, &cbInfo);
if (cbInfo == 0) { return(NULL); }
if (!(pNameValue = (PCERT_NAME_VALUE)new BYTE[cbInfo])) { return(NULL); }
if (!(CryptDecodeObject(X509_ASN_ENCODING, X509_NAME_VALUE, pExt->Value.pbData, pExt->Value.cbData, 0, pNameValue, &cbInfo))) { delete pNameValue; return(NULL); }
dwValueType = pNameValue->dwValueType; pValue = &pNameValue->Value;
cwsz = CertRDNValueToStrW(dwValueType, pValue, NULL, 0); if (cwsz > 1) { pwsz = new WCHAR[cwsz]; if (pwsz) { CertRDNValueToStrW(dwValueType, pValue, pwsz, cwsz); } } }
delete pNameValue;
return(pwsz); }
WCHAR *spGetAgencyName(IN PCERT_NAME_BLOB pNameBlob) { LPWSTR pwsz;
if (pwsz = spGetRDNAttrWStr(szOID_ORGANIZATIONAL_UNIT_NAME, pNameBlob)) { return(pwsz); }
if (pwsz = spGetRDNAttrWStr(szOID_ORGANIZATION_NAME, pNameBlob)) { return(pwsz); }
return(spGetRDNAttrWStr(szOID_COMMON_NAME, pNameBlob)); }
WCHAR *spGetRDNAttrWStr(IN LPCSTR pszObjId, IN PCERT_NAME_BLOB pNameBlob) { LPWSTR pwsz; PCERT_NAME_INFO pNameInfo; PCERT_RDN_ATTR pRDNAttr; DWORD cbInfo;
pwsz = NULL; pNameInfo = NULL;
cbInfo = 0;
CryptDecodeObject( X509_ASN_ENCODING, X509_NAME, pNameBlob->pbData, pNameBlob->cbData, 0, NULL, &cbInfo); if (cbInfo == 0) { return(NULL); }
if (!(pNameInfo = (PCERT_NAME_INFO)new BYTE[cbInfo])) { return(NULL); }
if (!(CryptDecodeObject(X509_ASN_ENCODING, X509_NAME, pNameBlob->pbData, pNameBlob->cbData, 0, pNameInfo, &cbInfo))) { delete pNameInfo; return(NULL); }
pRDNAttr = CertFindRDNAttr(pszObjId, pNameInfo);
if (pRDNAttr) { PCERT_RDN_VALUE_BLOB pValue = &pRDNAttr->Value; DWORD dwValueType = pRDNAttr->dwValueType; DWORD cwsz;
pValue = &pRDNAttr->Value; dwValueType = pRDNAttr->dwValueType;
cwsz = CertRDNValueToStrW(dwValueType, pValue, NULL, 0);
if (cwsz > 1) { pwsz = new WCHAR[cwsz]; if (pwsz) { CertRDNValueToStrW(dwValueType, pValue, pwsz, cwsz); } } }
delete pNameInfo;
return(pwsz); }
|