Jump to content
Sign in to follow this  
vl2019

Cryptgetprovparam Не Возвращает Спискок Контейнеров В Linux

Recommended Posts

VipNet CSP 4.2 для Linux.

С помощью функции CryptGetProvParam пытаюсь получить список установленных контейнеров.

Но она ничего не находит, хотя в систему с помощью certmgr-gui были импортированы 2 контейнера.

В CryptAcquireContext пробовал добавлять флаг CRYPT_MACHINE_KEYSET.

Ошибок тоже никаких не выходит.

Share this post


Link to post
Share on other sites

Добрый день!

Можете уточнить, где расположены контейнеры? Наши стандартные каталоги: ~/.itcs/vipnet-csp/containers или /var/opt/itcs/vipnet-csp/containers

Если искомые контейнеры находятся в других местах, то найти их не удастся.

Share this post


Link to post
Share on other sites

Переместил в /var/opt/itcs/vipnet-csp/containers

Видит только один контейнер

Перебор происходит следующим образом:


flag = CRYPT_FIRST | CRYPT_UNIQUE;
while(TRUE) {
if(CryptGetProvParam(hProv, PP_ENUMCONTAINERS, NULL, &buffer_len, flag)){
buffer = (BYTE*)emalloc(buffer_len);
if(!CryptGetProvParam(hProv, PP_ENUMCONTAINERS, buffer, &buffer_len, flag)){
if(ERROR_NO_MORE_ITEMS == GetLastError()) {
break;
} else {

goto cleanup;
break;
}
}
printf("%s",buffer);
flag = CRYPT_NEXT | CRYPT_UNIQUE;
} else {
if(ERROR_NO_MORE_ITEMS != GetLastError()) {

goto cleanup;
}
break;
}
}

Share this post


Link to post
Share on other sites

Утро доброе!

Есть небольшая ошибка в коде. Внимательно прочитайте описание функции CryptGetProvParam в MSDN(https://msdn.microsoft.com/en-us/library/windows/desktop/aa380196%28v=vs.85%29.aspx).

Обратите внимание на следующее замечание:

"If PP_ENUMCONTAINERS is set, the first call to the function returns the size of the maximum key-container allowed by the current provider. This is in contrast to other possible behaviors, like returning the length of the longest existing container, or the length of the current container. Subsequent enumerating calls will not change the dwLen parameter. For each enumerated container, the caller can determine the length of the null-terminated string programmatically, if desired. If one of the enumeration values is read and the pbData parameter is NULL, the CRYPT_FIRST flag must be specified for the size information to be correctly retrieved."

Пример перечисления контейнеров есть в SDK ViPNet CSP Linux, так и называется enum_containers.

Код из него:


DWORD dwMaxContainerLen = 0;
if( CryptGetProvParam( provider, PP_ENUMCONTAINERS, NULL, &dwMaxContainerLen, dwFlags ) )
{
std::vector<char> bufContainer( dwMaxContainerLen + 1, 0 );
while( true )
{
DWORD dwContainerLen = dwMaxContainerLen;

if( !CryptGetProvParam( provider, PP_ENUMCONTAINERS, ( BYTE* ) &bufContainer[0], &dwContainerLen, dwFlags ) )
{
if( ERROR_NO_MORE_ITEMS == GetLastError() )
{
isSuccess = true;
}
break;
}
std::cout << " " << index << ". "<< &bufContainer[0] << std::endl;
memset( &bufContainer[0], 0, bufContainer.size() );
dwFlags = CRYPT_NEXT | CRYPT_UNIQUE;
++index;
}
}
else
{
if( ERROR_NO_MORE_ITEMS == GetLastError() )
{
isSuccess = true;
}
}

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

×
×
  • Create New...

Important Information

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