Jump to content
GreyGoblin

Некорректная работа CryptGetKeyParam

Recommended Posts

Добрый день. 

Обнаружил некорректную работу 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 бит.

Вопрос, откуда брать значения этих констант?

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×

Important Information

By using this site, you agree to our Terms of Use.