| ||||
| ||||
При выполнении кода: 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. Подскажите, что неверно задано? | ||||
Ответы: | ||||
| ||||
Вы не забыли открыть контекст? Если самом в начале выполнить строку ниже, то ваш код работает. CryptAcquireContext(&hProv, NULL, NULL, 71, CRYPT_VERIFYCONTEXT); | ||||
| ||||
Провайдер был уже проинициализирован, правда с флагом 0, а не CRYPT_VERIFYCONTEXT, так как необходимо работать с закрытым ключем. Так подскажите, где ошибка? | ||||
| ||||
А как получаете hFile_Store ? Если есть возможность, приведите полный исходник примера, вызывающего ошибку. | ||||