GreyGoblin Опубликовано 28 Августа 2018 Жалоба Поделиться Опубликовано 28 Августа 2018 Добрый день. Обнаружил некорректную работу CryptGetKeyParam при получении размера сгенерированного эфемерного ключа по алгоритму с идентификатором CALG_DH_EL_EPHEM. Пример кода: HCRYPTPROV hProvResponder = 0; if (!CryptAcquireContextA(&hProvResponder, NULL, NULL, 2, CRYPT_VERIFYCONTEXT)) { std::cout << std::hex << GetLastError() << std::endl; return -1; } HCRYPTKEY phKey = 0; if (!CryptGenKey(hProvResponder, CALG_DH_EL_EPHEM, AT_KEYEXCHANGE, &phKey)) { std::cout << std::hex << GetLastError() << std::endl; return -2; } DWORD data_len = 0; if (!CryptGetKeyParam(phKey, KP_KEYLEN, NULL, &data_len, 0)) { std::cout << std::hex << GetLastError() << std::endl; return -3; } DWORD dwData = 0; if (!CryptGetKeyParam(phKey, KP_KEYLEN, (BYTE*)(&dwData), &data_len, 0)) { std::cout << std::hex << GetLastError() << std::endl; return -4; } std:cout << dwData; Результат: 0, а должно быть 512. Это ошибка или я что-то не так делаю? Кроме этого вопрос по документации: В ViPNet_CSP_Developer_Guide_Ru.pdf в разделе "Формирование ключа" сказано: AlgId [in] — идентификатор алгоритма шифрования или электронной подписи, для которого должен быть произведен ключ. Допустима передача любого из поддерживаемых алгоритмов (см. Идентификаторы алгоритмов (на стр. 13)). Кроме этого могут быть использованы следующие значения: CSP_2012_256_EXCHANGE_ID_EPHEM Создание эфемерной пары ключей по алгоритму ГОСТ Р 34.10-2012 с длиной секретного ключа 256 бит. CSP_2012_512_EXCHANGE_ID_EPHEM Создание эфемерной пары ключей по алгоритму ГОСТ Р 34.10-2012 с длиной секретного ключа 512 бит. Вопрос, откуда брать значения этих констант? Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Рекомендуемые сообщения
Присоединиться к обсуждению
Вы можете ответить сейчас, а зарегистрироваться позже. Если у вас уже есть аккаунт, войдите, чтобы ответить от своего имени.