Статус: Активный участник
Группы: Участники
Зарегистрирован: 26.10.2011(UTC) Сообщений: 61
Сказал(а) «Спасибо»: 2 раз
|
Что-то не получается ничего ( Код:HCRYPTPROV hProv = 0;
if(!CryptAcquireContext(
&hProv,
CONTAINER,
VPN_DEF_PROV,
VPN_PROV_TYPE,
CRYPT_SILENT))
{
printf("%x",GetLastError());
}
HCRYPTKEY hKey = 0;
if(!CryptGetUserKey(
hProv,
AT_KEYEXCHANGE,
&hKey))
{
printf("%x",GetLastError());
}
BYTE *pbData;
DWORD pdwDataLen = 0;
if(!CryptGetKeyParam(
hKey,
KP_CERTIFICATE,
NULL,
&pdwDataLen,
0))
{
printf("%x",GetLastError());
return;
}
pbData = new BYTE[pdwDataLen];
if(!CryptGetKeyParam(
hKey,
KP_CERTIFICATE,
pbData,
&pdwDataLen,
0))
{
printf("%x",GetLastError());
}
PCCERT_CONTEXT pCert;
if( ! (pCert = CertCreateCertificateContext(
MY_TYPE,
pbData,
pdwDataLen)))
{
printf("%x",GetLastError());
return;
}
BYTE *pbProvParam = (BYTE*)"123123";
if(!CryptSetProvParam(
hProv,
PP_SIGNATURE_PIN,
pbProvParam,
0))
{
printf("%x",GetLastError());
return;
}
if(!CertSetCertificateContextProperty(
pCert,
CERT_KEY_PROV_HANDLE_PROP_ID,
0,
&hProv))
{
printf("%x",GetLastError());
}
Затем заполняю структуру CRYPT_SIGN_MESSAGE_PARA и подписываю: Код:if(CryptSignMessage(
&SigParams,
TRUE,
1,
MessageArray,
MessageSizeArray,
NULL,
&cbSignedMessageBlob))
{
printf("Sign size: %d.\n", cbSignedMessageBlob);
}
else
{
HandleError("CryptSignMessage");
}
В итоге ошибка 57 (нет доступа получается). Пробовал CryptSetProvParam с PP_SIGNATURE_PIN и PP_KEYEXCHANGE_PIN.
|