MKurskiy пишет:Пока не за что.
"Насильственно" - это игнорируя ошибку при получении свойств ключевой пары контейнера (которая проявляется у Вас), и игнорируя тот факт что открытые ключи в сертификате и в контейнере не совпадают https://forum.rutoken.ru/viewtopic.php?id=22
Михаил, мне необходимо насильственно поместить сертификат в контейнер (контейнер удален по ошибке), не получается. Что в коде не так. Писал на основе исходников Cert2Cont
Рутокен L 64K080Z
Мне необходимо положить в контейнер с ключами обмена сертификат.
Сертификат не соответствует паре, экспортирован из контейнера, затем контейнер (по ошибке ) удален и создана ключевая пара обмена ключей в контейнере с тем же именем.
все процедуры генерации, экспорта, подписи, верификации работают.
помогите кто может
CryptSetKeyParam
возвращает
System Error. Code: -2146893819.
Плохие данные
0000047E
function ImportCert(cont, path: string): Boolean;
var
hProv: HCRYPTPROV;
SignKey: HCRYPTKEY;
cert: TMemoryStream;
db: TStringList;
l: Cardinal;
begin
cert := TMemoryStream.Create;
cert.LoadFromFile(path);//загружаю сохраненный сертификат *.cer
Result := False;
try
if not CryptAcquireContext(@hProv, PChar(cont), prov, PROV_GOST_2001_DH, 0)
then
Exit;
if not CryptGetUserKey(hProv, AT_KEYEXCHANGE, @SignKey) then
Exit;
if not CryptSetKeyParam(SignKey, KP_CERTIFICATE, cert.Memory, 0) then
Exit;
Result := true;
finally
// уничтожаем ключ
CryptDestroyKey(SignKey);
// освобождает дескриптор криптопровайдера
CryptReleaseContext(hProv, 0);
cert.Free;
end;
end;