Я хочу получить алгоритм фактической подписи (а не алгоритм дайджеста сертификата), который использовался для подписи файла установщика Windows (msi).
Используя API шифрования Microsoft, я смог легко получить то, что хочу для exe.Сначала получая HCRYPTMSG, затем получая размер информации подписавшего, затем информацию подписывающего PCMSG_SIGNER_INFO и, наконец, получая сам алгоритм:
pSignerInfo-> HashAlgorithm.pszObjId
BOOL bIsOk;
DWORD dwEncoding=0, dwContentType = 0, dwFormatType = 0, dwSignerInfo = 0;
std::string szFileName= "pathtothefile";
//Get message handle and store handle from the signed file.
HCERTSTORE hStore = NULL;
HCRYPTMSG hMsg = NULL;
bIsOk = CryptQueryObject(CERT_QUERY_OBJECT_FILE, szFileName.c_str(), CERT_QUERY_CONTENT_FLAG_ALL, CERT_QUERY_FORMAT_FLAG_ALL,
0, &dwEncoding, &dwContentType, &dwFormatType, &hStore, &hMsg, NULL);
По какой-то причине выполнение моего кода в файлах установщика msi всегда возвращает
CRYPT_E_NO_MATCH 0x80092009 Не удается найти запрошенный объект.
Конечно, я проверил пути и всевозможные флаги для функции CryptQueryObject, но я чувствую, что ошибка может вводить в заблуждение.
Мне интересно, не совместим ли API шифрования с файлами MSI для начала.
Все темы вышлипохоже, это относится только к алгоритму дайджеста сертификата.
Заранее спасибо