27.11.2003 0:09:31Error 87 during CryptImportPublicKey! Ответов: 3
Ivan
При выполнении кода:
while (TRUE) {
if (!(pRcpCert = CertEnumCertificatesInStore(hFile_Store, pRcpCert))) {
printf("Error %d during CertFindCertificateInStore!\n", GetLastError());
goto done;
}

if(strcmp(pRcpCert->pCertInfo->SignatureAlgorithm.pszObjId ,
szOID_CP_GOST_R3411_R3410)) {
printf("Wrong algorithm\n");
}
else {
printf("Algorithm GOST\n");
break;
}

if (!CryptImportPublicKeyInfoEx(hProv, X509_ASN_ENCODING | PKCS_7_ASN_ENCODING,
&pRcpCert->pCertInfo->SubjectPublicKeyInfo, CALG_GR3410, 0, NULL, &hPublicKey))

возникает ошибка:
Error 87 during CryptImportPublicKey!
т.е. ERROR_INVALID_PARAMETER.
Подскажите, что неверно задано?
 
Ответы:
27.11.2003 16:45:01Русев Андрей
Вы не забыли открыть контекст?
Если самом в начале выполнить строку ниже, то ваш код работает.

CryptAcquireContext(&hProv, NULL, NULL, 71, CRYPT_VERIFYCONTEXT);
18.12.2003 1:12:08Ivan
Провайдер был уже проинициализирован, правда с флагом 0, а не CRYPT_VERIFYCONTEXT, так как необходимо работать с закрытым ключем.
Так подскажите, где ошибка?
18.12.2003 9:20:05Василий
А как получаете hFile_Store ?
Если есть возможность, приведите полный исходник примера, вызывающего ошибку.