Статус: Участник
Группы: Участники
Зарегистрирован: 27.10.2017(UTC) Сообщений: 12
Сказал(а) «Спасибо»: 3 раз
|
спасибо большое, простите, но не могли бы вы пояснить немного замену функций [CryptAcquireContext()] на [CryptAcquireCertificatePrivateKey()] у меня просто есть во такая сигнатура ф-ии подписания: [ BOOL do_low_sign_hash(BYTE * pbContent, DWORD cbContent, std::string certName, std::string password, BYTE_ARRAY * result) ] Код:BOOL do_low_sign_hash(BYTE * pbContent, DWORD cbContent, std::string certName, std::string password, BYTE_ARRAY * result)
{
HCRYPTHASH hHash = 0;
BYTE_ARRAY data = { pbContent, cbContent };
DWORD keySpec = AT_KEYEXCHANGE;
HCRYPTPROV hProv;
try {
HCRYPTPROV hProv = 0;
if (!CryptAcquireContext(
&hProv,
name.c_str(),
NULL,
PROV_GOST_2001_DH,
0)){
printf("JNI: getSignContext break on CryptAcquireContext [%d] for [%s]\n", GetLastErrorLocal(), name.c_str());
return 0;
}
if (!CryptSetProvParam(hProv, PP_SIGNATURE_PIN, (BYTE*)password.c_str(), 0)){
printf("JNI: do_low_sign_hash break on CryptSetProvParam [%d]\n", GetLastErrorLocal());
// cleanUp(hHash, data);
return 0;
}
if (!hProv){
printf("JNI: do_low_sign_hash break on acquiring signing context \n");
cleanUp(hHash, data);
return 0;
}
if (!CryptCreateHash(hProv, CALG_GR3411, 0, 0, &hHash)){
printf("JNI: do_low_sign_hash break on CryptCreateHash [%d]\n", GetLastErrorLocal());
cleanUp(hHash, data, hProv);
return 0;
}
if (!CryptSetHashParam(hHash, HP_OID, (BYTE*)OID_HashVerbaO, 0)){
printf("JNI: do_low_sign_hash break on CryptSetHashParam [%d]\n", GetLastErrorLocal());
cleanUp(hHash, data, hProv);
return 0;
}
if (!CryptHashData(hHash, pbContent, cbContent, 0)){
printf("JNI: do_low_sign_hash break on CryptHashData [%d]\n", GetLastErrorLocal());
cleanUp(hHash, data, hProv);
return 0;
}
result->size = 0;
if (!CryptSignHash(hHash, keySpec, NULL, 0, NULL, &(result->size))){
flipKeySpec(keySpec);
if (!CryptSignHash(hHash, keySpec, NULL, 0, NULL, &(result->size))){
printf("JNI: do_low_sign_hash break on CryptSignHash [%d]\n", GetLastErrorLocal());
cleanUp(hHash, data, hProv);
return 0;
}
}
result->blob = new BYTE[result->size];
BOOL isSuccessful = 1;
if (!CryptSignHash(hHash, keySpec, NULL, 0, result->blob, &result->size)){
isSuccessful = 0;
printf("JNI: do_low_sign_hash break on CryptSignHash final [%d]\n", GetLastErrorLocal());
}
CryptDestroyHash(hHash);
//CryptReleaseContext(hProv, 0);
return isSuccessful;
} catch (std::exception *e) {
printf((*e).what());
cleanUp(hHash, data, hProv);
return 0;
}
}
(*) ВОПРОС: могу ли я не меняя сигнатуру функции [do_low_sign_hash] осуществить замену [CryptAcquireContext()] на [CryptAcquireCertificatePrivateKey()]? P.S я так понимаю мне надо в функцию добавить передачу сертификата, в моем случае ввиде массива байт? чтобы потом получить [PCCERT_CONTEXT] [ PCCERT_CONTEXT cert = (PCCERT_CONTEXT) (CertCreateCertificateContext(TYPE_DER, certBlob.blob, certBlob.size) ); ] проооооостите что напрягаю, чет не клеется у меня с этим кодом(((( помогите плиз.
|