Статус: Активный участник
Группы: Участники
Зарегистрирован: 23.05.2014(UTC) Сообщений: 35  Откуда: Москва Сказал(а) «Спасибо»: 2 раз
|
Код:
Проверка завершена успешно ошибок не обнаружено
Контейнер закрытого ключа пользователя
имя CONTAINER
уникальное имя REGISTRY\\CONTAINER
FQCN \\.\REGISTRY\CONTAINER
проверка целостности контейнера успешно
Ключ обмена доступен
длина ключа 1024 бит
экспорт открытого ключа успешно
вычисление открытого ключа успешно
импорт открытого ключа успешно
подпись успешно
проверка успешно
создание ключа обмена успешно
экспорт ключа разрешен
алгоритм ГОСТ Р 34.10-2012 DH 512 бит
ГОСТ Р 34.10-2012 512 бит, параметры по умолчанию
ГОСТ Р 34.11-2012 512 бит
ГОСТ 28147-89, параметры шифрования ТК26 Z
сертификат в контейнере отсутствует
Срок действия закрытого ключа 24 июля 2021 г. 10:25:11
Использование ключа обмена разрешено до окончания срока действия закрытого ключа.
Ключ подписи отсутствует
загрузка ключей успешно
Версия контейнера 2
Расширения контейнера
некритическое Расширение контейнера КриптоПро CSP. Срок действия ключа обмена
действителен по 24 июля 2021 г. 10:25:11
пытаюсь его скопировать программно на токен Этот код выполняется без ошибок (код не компилируемый, это пример) Код:
// контейнер назначения
CryptAcquireContext(out cryptoProviderDestination, token.FullPathToContainer, CSPProviderName, (uint) CSPProviderType, WNewkeyset | WSilent)
// контейнер получатель
CryptAcquireContext(out cryptoProviderSource, sourceContainer, CSPProviderName, (uint) CSPProviderType, 0)
//копирования параметров (функции хеширования) контейнера источника в контейнер получения
CryptGetProvParam(source, HashId, buffer, ref dataLen, 0)
CryptSetProvParam(dest, HashId, buffer, 0);
CryptGetProvParam(source, Cipherid, buffer, ref dataLen, 0)
CryptSetProvParam(dest, Cipherid, buffer, 0);
//Получение дескриптора закрытого ключа, который будет скопирован
CryptGetUserKey(cryptoProviderSource, AT_KEYEXCHANGE, out hSenderKey)
//Генерация эфемерного ключа в контейнере-отправителе и в контейнере-получателе
CryptGenKey(cryptoProviderSource, CALG_DH_EL_EPHEM, CRYPT_EXPORTABLE, out hSenderEphemKey)
// Генерация эфемерного ключа в контейнере-получателе.
CryptGenKey(cryptoProviderDestination, CALG_DH_EL_EPHEM, CRYPT_EXPORTABLE | CRYPT_PREGEN, out hResponderEphemKey)
//копирования параметров (эфемерного ключа) контейнера источника в контейнер получения
CryptGetKeyParam(hSenderEphemKey, KP_DHOID, pbKeyBlob, ref dataLen, 0)
CryptSetKeyParam(hResponderEphemKey, KP_DHOID, pbKeyBlob, 0)
//установки параметра ключа в контейнера получения
CryptSetKeyParam(hResponderEphemKey, KP_X, null, 0)
//Получение ключа согласования в контейнере - получателя
ExportKey(hSenderEphemKey, PUBLICKEYBLOB)
CryptImportKey(cryptoProviderDestination, buffer, (uint) buffer.Length, hResponderEphemKey, 0, out hResponderAgreeKey)
// Экспортирование эфемерного ключа получателя в BLOB.
var pbKeyBlob = ExportKey(hResponderEphemKey, PUBLICKEYBLOB);
CryptImportKey(cryptoProviderDestination, pbKeyBlob, (uint) pbKeyBlob.Length, hSenderEphemKey, 0, out hSenderAgreeKey)
//Конвертирование ключа согласования в сессионный в контейнере - отправителе
CryptSetKeyParam(hSenderAgreeKey, KP_ALGID, BitConverter.GetBytes((uint) CALG_PRO_EXPORT), 0)
CryptSetKeyParam(hResponderAgreeKey, KP_ALGID, BitConverter.GetBytes((uint) CALG_PRO_EXPORT), 0)
Код:
uint dwBlobLen = 0;
CryptExportKey(hSenderEphemKey, hExkKey, PRIVATEKEYBLOB, 0, null, ref dwBlobLen)
Функция возвращает размер буфера = 0 GetLastError возвращает ошибку либо -2146893813 либо 1008 Не могу понять что я делаю не так
|