Когда я получение подписи кода из исполняемого файла в Windows, CERT_CONTEXT
сертификата указывает на CERT_INFO
, который имеет CRYPT_ALGORITHM_IDENTIFIER SignatureAlgorithm
член, содержащий алгоритм, используемый для подписи.
Как мне преобразовать это в удобочитаемую форму?
Например, SignatureAlgorithm.pszObjId
может быть установлен на "1.2.840.113549.1.1.11"
строка, которая szOID_RSA_SHA256RSA
в соответствии с этот длинный список. Я думаю, что могу сделать очень длинное заявление о переключении и связать его с "sha256"
, но я бы предпочел этого избежать, так как я не знаю, каковы большинство из этих значений. Есть ли API, который может сделать все это для меня?
использование CryptFindOIDInfo
чтобы получить информацию об OID, включая отображаемое имя и строку идентификатора алгоритма CNG:
void PrintSigAlgoName(CRYPT_ALGORITHM_IDENTIFIER* pSigAlgo)
{
if(pSigAlgo && pSigAlgo->pszObjId)
{
PCCRYPT_OID_INFO pCOI = CryptFindOIDInfo(CRYPT_OID_INFO_OID_KEY, pSigAlgo->pszObjId, 0);
if(pCOI && pCOI->pwszName)
{
_tprintf(_T("%ls"), pCOI->pwszName);
}
else
{
_tprintf(_T("%hs"), pSigAlgo->pszObjId);
}
}
}
Других решений пока нет …