Hi,
I got this error while testing my CSP program.
xxxx.dll — GetProviderFunction
void TestGetProvider()
{
HCRYPTPROV hCryptProv = 0;
HCRYPTKEY hKey = 0;
BYTE pbData[1000];
DWORD cbData ;
PROV_ENUMALGS EnumAlgs;
PROV_ENUMALGS_EX EnumAlgsEx;
DWORD dFlag = CRYPT_FIRST;
printf(«before : «);
TestCryptAcquireContext(hCryptProv, «SMART CARD», «CSP», 0);
printf(«CryptGetProvParam — «);
cbData = 100;
//———————————————————————
// Read the name of the CSP.
if(!(CryptGetProvParam(hCryptProv, PP_NAME, pbData, &cbData, 0)))
printf(«CryptGetProvPara returned error %xnn», GetLastError());
else
printf(«ntPP_NAME: %s», pbData);
// PP_PROVTYPE
cbData = 1000;
if(!(CryptGetProvParam(hCryptProv, PP_PROVTYPE, pbData, &cbData, 0)))
printf(«CryptGetProvPara returned error %xnn», GetLastError());
else
printf(«ntPP_PROVTYPE: %s», pbData);
cbData = 1000;
int count = 0;
while( CryptGetProvParam(
hCryptProv, // handle to an open cryptographic provider
PP_ENUMALGS,
(BYTE *)&EnumAlgs, // information on the next algorithm
&cbData, // number of bytes in the PROV_ENUMALGS_
dFlag)) // flag to indicate whether this is a first or
// subsequent algorithm supported by the
// CSP.
{
count++;
// Determine algorithm type.
CHAR *pszAlgType = NULL;
switch(GET_ALG_CLASS(EnumAlgs.aiAlgid)) {
case ALG_CLASS_DATA_ENCRYPT: pszAlgType = «Encrypt «;
break;
case ALG_CLASS_HASH: pszAlgType = «Hash «;
break;
case ALG_CLASS_KEY_EXCHANGE: pszAlgType = «Exchange «;
break;
case ALG_CLASS_SIGNATURE: pszAlgType = «Signature»;
break;
default: pszAlgType = «Unknown «;
}
printf(«n%d) t%s tType %s», count, EnumAlgs.szName, pszAlgType);
dFlag = 0;
}
int icount = 0;
while( CryptGetProvParam(
hCryptProv, // handle to an open cryptographic provider
PP_ENUMALGS_EX,
(BYTE *)&EnumAlgsEx, // information on the next algorithm
&cbData, // number of bytes in the PROV_ENUMALGS_EX
dFlag)) // flag to indicate whether this is a first or
// subsequent algorithm supported by the
// CSP.
{
icount++;
// Determine algorithm type.
CHAR *pszAlgType = NULL;
switch(GET_ALG_CLASS(EnumAlgsEx.aiAlgid)) {
case ALG_CLASS_DATA_ENCRYPT: pszAlgType = «Encrypt «;
break;
case ALG_CLASS_HASH: pszAlgType = «Hash «;
break;
case ALG_CLASS_KEY_EXCHANGE: pszAlgType = «Exchange «;
break;
case ALG_CLASS_SIGNATURE: pszAlgType = «Signature»;
break;
default: pszAlgType = «Unknown «;
}
printf(«n%d) t%s tType %s», icount, EnumAlgsEx.szName, pszAlgType);
dFlag = 0;
}
error msg:
before : Calling CryptAcquireContext — CryptAcquireContext returned error 57
CryptGetProvParam — CryptGetProvPara returned error 57
CryptGetProvPara returned error 57
Done
the registry already created in hkey_user_local_machine
any idea?
iErroRi |
|
Статус: Участник Группы: Участники Сказал(а) «Спасибо»: 2 раз |
Проверяю открепленную подпись, (созданную через браузер плагин реальным сертификатом) утилитой командной строки cryptcp, выводит ошибку Error: The parameter is incorrect. Код:
Подпись создается через плагин браузера. Путем подписания хеша файла сгенерированного так: Код:
При создании подписи на тестовом урл (https://www.cryptopro.ru/sites/default/files/products/cades/demopage/cades_xlong_sample.html) и подписании тестовым сертификатом проверка проходит успешно: Код:
В чем может быть проблема куда комать? Как починить? ОС Ubuntu Код:
Установленные пакеты Код:
|
|
|
Андрей Емельянов |
|
Статус: Сотрудник Группы: Участники Сказал «Спасибо»: 4 раз |
Добрый день. |
Техническую поддержку оказываем тут |
|
|
|
iErroRi |
|
Статус: Участник Группы: Участники Сказал(а) «Спасибо»: 2 раз |
Спасибо за ответ, но не совсем понятнятно на каком этапе это может влиять? Подписывается хеш файла генерируемый на сервере. Клиенту при подписании прилетает такой: Код:
После чего он подписывается следующим кодом Код:
И на сервер отправляется сгенерированная подпись(сократил —): Код:
Пробовал как с указанием кодировки так и без результат один и тот же примерно, различия в полученных хешах минимальны и cryptcp не проверяются оба. Код:
Подпись же открепленная и командой Код:
Проверяется валидность самой подписи без проверки соответствия исходного файла к которому считался хеш? |
|
|
Андрей Емельянов |
|
Статус: Сотрудник Группы: Участники Сказал «Спасибо»: 4 раз |
Если открепленная подпись, то в cryptcp используйте флаг -vsignf для проверки. |
Техническую поддержку оказываем тут |
|
|
|
1 пользователь поблагодарил Андрей Емельянов за этот пост. |
iErroRi
оставлено 28.07.2017(UTC) |
iErroRi |
|
Статус: Участник Группы: Участники Сказал(а) «Спасибо»: 2 раз |
Спасибо помогло, но выдется ошибка Error: Certificate chain is not checked for this certificate (error code 10000) Утановленные пакеты Код:
Проверка подписи Код:
|
|
|
Андрей Писарев |
|
Статус: Сотрудник Группы: Участники Сказал «Спасибо»: 457 раз |
Здравствуйте. Сертификат(ы) необходимо установить самостоятельно. |
Техническую поддержку оказываем тут |
|
|
WWW |
Андрей Писарев |
|
Статус: Сотрудник Группы: Участники Сказал «Спасибо»: 457 раз |
Как в Linux/Unix установить сертификаты? Цитата: Установка корневого сертификата |
Техническую поддержку оказываем тут |
|
|
WWW |
iErroRi |
|
Статус: Участник Группы: Участники Сказал(а) «Спасибо»: 2 раз |
То есть для автоматической проверки подписей необходимо установить все сертификаты удостоверяющих цетров России? Сейчас у меня установлены: |
|
|
Андрей Писарев |
|
Статус: Сотрудник Группы: Участники Сказал «Спасибо»: 457 раз |
Варианты: Если необходимы сертификаты с цепочкой до ГУЦ: |
Техническую поддержку оказываем тут |
|
|
WWW |
1 пользователь поблагодарил Андрей * за этот пост. |
iErroRi
оставлено 28.07.2017(UTC) |
iErroRi |
|
Статус: Участник Группы: Участники Сказал(а) «Спасибо»: 2 раз |
Добрый день А списки отзыва тоже необходимо от каждого УЦ грузить или есть одно место или в сертификате есть ссылка и подгружается автоматом? Отредактировано пользователем 28 июля 2017 г. 14:41:32(UTC) |
|
|
Пользователи, просматривающие эту тему |
Guest |
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Статус: Активный участник
Группы: Участники
Зарегистрирован: 13.06.2019(UTC)
Сообщений: 30
Откуда: Самара
Сказал(а) «Спасибо»: 4 раз
Автор: Максим Коллегин
Попробуйте включить подробный лог:
/opt/cprocsp/sbin/amd64/cpconfig -loglevel cpcsp -mask 0x3f
/opt/cprocsp/sbin/amd64/cpconfig -loglevel capi10 -mask 0x3f
Но для получения подробного лога необходимо установить последнюю версию CSP 5R2.
Вот подробный лог
Код:
Jul 13 12:16:15 localhost ConsoleApp[21447]: <capi10>CryptAcquireContextA (Provider = null, Container = null, ProvType = 75, Flags = 0xF0000000, LastError=0x0)
Jul 13 12:16:15 localhost ConsoleApp[21447]: <cpcsp>CreateCSProvider ok
Jul 13 12:16:15 localhost ConsoleApp[21447]: <cpcsp>CPCAcquireContext (pszContainer: null, pszProvName: Crypto-Pro GOST R 34.10-2001 KC1 CSP, dwFlags: 0xf0000000)
Jul 13 12:16:15 localhost ConsoleApp[21447]: <cpcsp>CreateContainer CreateContainer
Jul 13 12:16:15 localhost ConsoleApp[21447]: <cpcsp>CPCAcquireContext (pszContainer=null, dwFlags=0xf0000000). No hCSP. Result=1, Err=0x0. hProv=0xda4000d5.
Jul 13 12:16:15 localhost ConsoleApp[21447]: <capi10>CryptAcquireContextA returned: hProv = 0x161e3e3; LastError = 0x0
Jul 13 12:16:15 localhost ConsoleApp[21447]: <capi10>CryptGetProvParam (hProv = 0x161e3e3, dwParam = 16, dwFlags = 0x0)
Jul 13 12:16:15 localhost ConsoleApp[21447]: <cpcsp>CPCGetProvParam (hProv=0xda4000d5, dwParam=16)
Jul 13 12:16:15 localhost ConsoleApp[21447]: <cpcsp>CPCGetProvParam (hProv=0xda4000d5, dwParam=16). Result=1, Err=0x0.
Jul 13 12:16:15 localhost ConsoleApp[21447]: <capi10>CryptGetProvParam returned: dwDataLen = 0x4, LastError=0x0
Jul 13 12:16:15 localhost ConsoleApp[21447]: <capi10>CryptGetProvParam (hProv = 0x161e3e3, dwParam = 16, dwFlags = 0x0)
Jul 13 12:16:15 localhost ConsoleApp[21447]: <cpcsp>CPCGetProvParam (hProv=0xda4000d5, dwParam=16)
Jul 13 12:16:15 localhost ConsoleApp[21447]: <cpcsp>CPCGetProvParam (hProv=0xda4000d5, dwParam=16). Result=1, Err=0x0.
Jul 13 12:16:15 localhost ConsoleApp[21447]: <capi10>CryptGetProvParam returned: dwDataLen = 0x4, LastError=0x0
Jul 13 12:16:15 localhost ConsoleApp[21447]: <capi10>CryptAcquireContextA (Provider = null, Container = null, ProvType = 81, Flags = 0xF0000000, LastError=0x0)
Jul 13 12:16:15 localhost ConsoleApp[21447]: <cpcsp>CPCAcquireContext (pszContainer: null, pszProvName: Crypto-Pro GOST R 34.10-2012 KC1 Strong CSP, dwFlags: 0xf0000000)
Jul 13 12:16:15 localhost ConsoleApp[21447]: <cpcsp>CreateContainer CreateContainer
Jul 13 12:16:15 localhost ConsoleApp[21447]: <cpcsp>CPCAcquireContext (pszContainer=null, dwFlags=0xf0000000). No hCSP. Result=1, Err=0x0. hProv=0xd2f000b0.
Jul 13 12:16:15 localhost ConsoleApp[21447]: <capi10>CryptAcquireContextA returned: hProv = 0x141e203; LastError = 0x0
Jul 13 12:16:15 localhost ConsoleApp[21447]: <capi10>CryptGetProvParam (hProv = 0x141e203, dwParam = 16, dwFlags = 0x0)
Jul 13 12:16:15 localhost ConsoleApp[21447]: <cpcsp>CPCGetProvParam (hProv=0xd2f000b0, dwParam=16)
Jul 13 12:16:15 localhost ConsoleApp[21447]: <cpcsp>CPCGetProvParam (hProv=0xd2f000b0, dwParam=16). Result=1, Err=0x0.
Jul 13 12:16:15 localhost ConsoleApp[21447]: <capi10>CryptGetProvParam returned: dwDataLen = 0x4, LastError=0x0
Jul 13 12:16:15 localhost ConsoleApp[21447]: <capi10>CryptGetProvParam (hProv = 0x141e203, dwParam = 16, dwFlags = 0x0)
Jul 13 12:16:15 localhost ConsoleApp[21447]: <cpcsp>CPCGetProvParam (hProv=0xd2f000b0, dwParam=16)
Jul 13 12:16:15 localhost ConsoleApp[21447]: <cpcsp>CPCGetProvParam (hProv=0xd2f000b0, dwParam=16). Result=1, Err=0x0.
Jul 13 12:16:15 localhost ConsoleApp[21447]: <capi10>CryptGetProvParam returned: dwDataLen = 0x4, LastError=0x0
Jul 13 12:16:15 localhost ConsoleApp[21447]: <capi10>CryptAcquireContextA (Provider = null, Container = null, ProvType = 80, Flags = 0xF0000000, LastError=0x0)
Jul 13 12:16:15 localhost ConsoleApp[21447]: <cpcsp>CPCAcquireContext (pszContainer: null, pszProvName: Crypto-Pro GOST R 34.10-2012 KC1 CSP, dwFlags: 0xf0000000)
Jul 13 12:16:15 localhost ConsoleApp[21447]: <cpcsp>CreateContainer CreateContainer
Jul 13 12:16:15 localhost ConsoleApp[21447]: <cpcsp>CPCAcquireContext (pszContainer=null, dwFlags=0xf0000000). No hCSP. Result=1, Err=0x0. hProv=0x4040005e.
Jul 13 12:16:15 localhost ConsoleApp[21447]: <capi10>CryptAcquireContextA returned: hProv = 0x141ced3; LastError = 0x0
Jul 13 12:16:15 localhost ConsoleApp[21447]: <capi10>CryptGetProvParam (hProv = 0x141ced3, dwParam = 16, dwFlags = 0x0)
Jul 13 12:16:15 localhost ConsoleApp[21447]: <cpcsp>CPCGetProvParam (hProv=0x4040005e, dwParam=16)
Jul 13 12:16:15 localhost ConsoleApp[21447]: <cpcsp>CPCGetProvParam (hProv=0x4040005e, dwParam=16). Result=1, Err=0x0.
Jul 13 12:16:15 localhost ConsoleApp[21447]: <capi10>CryptGetProvParam returned: dwDataLen = 0x4, LastError=0x0
Jul 13 12:16:15 localhost ConsoleApp[21447]: <capi10>CryptGetProvParam (hProv = 0x141ced3, dwParam = 16, dwFlags = 0x0)
Jul 13 12:16:15 localhost ConsoleApp[21447]: <cpcsp>CPCGetProvParam (hProv=0x4040005e, dwParam=16)
Jul 13 12:16:15 localhost ConsoleApp[21447]: <cpcsp>CPCGetProvParam (hProv=0x4040005e, dwParam=16). Result=1, Err=0x0.
Jul 13 12:16:15 localhost ConsoleApp[21447]: <capi10>CryptGetProvParam returned: dwDataLen = 0x4, LastError=0x0
Jul 13 12:16:15 localhost ConsoleApp[21447]: <capi10>CryptGetProvParam (hProv = 0x141ced3, dwParam = 2, dwFlags = 0x1)
Jul 13 12:16:15 localhost ConsoleApp[21447]: <cpcsp>CPCGetProvParam (hProv=0x4040005e, dwParam=2)
Jul 13 12:16:15 localhost ConsoleApp[21447]: <cpcsp>rdr_lock (...)
Jul 13 12:16:15 localhost ConsoleApp[21447]: <cpcsp>rdr_connect_carrier (...)
Jul 13 12:16:15 localhost ConsoleApp[21447]: <cpcsp>rdr_set_provider_callbacks (...)
Jul 13 12:16:15 localhost ConsoleApp[21447]: <cpcsp>rdr_local_machine (...)
Jul 13 12:16:15 localhost ConsoleApp[21447]: <cpcsp>rdr_select_applet (...)
Jul 13 12:16:15 localhost ConsoleApp[21447]: <cpcsp>rdr_get_support_flag (...)
Jul 13 12:16:15 localhost ConsoleApp[21447]: <cpcsp>rdr_get_universal_flags (...)
Jul 13 12:16:15 localhost ConsoleApp[21447]: <cpcsp>rdr_all_password_flags (...)
Jul 13 12:16:15 localhost ConsoleApp[21447]: <cpcsp>rdr_password_type (...)
Jul 13 12:16:15 localhost ConsoleApp[21447]: <cpcsp>rdr_passwd_term (...)
Jul 13 12:16:15 localhost ConsoleApp[21447]: <cpcsp>rdr_get_support_flag (...)
Jul 13 12:16:15 localhost ConsoleApp[21447]: <cpcsp>rdr_get_support_flag (...)
Jul 13 12:16:15 localhost ConsoleApp[21447]: <cpcsp>rdr_folder_enum_open (...)
Jul 13 12:16:15 localhost ConsoleApp[21447]: <cpcsp>rdr_get_support_flag (...)
Jul 13 12:16:15 localhost ConsoleApp[21447]: <cpcsp>rdr_folder_enum_next (...)
Jul 13 12:16:15 localhost ConsoleApp[21447]: <cpcsp>rdr_folder_open (...)
Jul 13 12:16:15 localhost ConsoleApp[21447]: <cpcsp>rdr_info_carrier_type (...)
Jul 13 12:16:15 localhost ConsoleApp[21447]: <cpcsp>rdr_get_support_flag (...)
Jul 13 12:16:15 localhost ConsoleApp[21447]: <cpcsp>rdr_file_open (...)
Jul 13 12:16:15 localhost ConsoleApp[21447]: <cpcsp>rdr_file_length (...)
Jul 13 12:16:15 localhost ConsoleApp[21447]: <cpcsp>rdr_file_read (...)
Jul 13 12:16:15 localhost ConsoleApp[21447]: <cpcsp>rdr_file_read (...)
Jul 13 12:16:15 localhost ConsoleApp[21447]: <cpcsp>rdr_file_close (...)
Jul 13 12:16:15 localhost ConsoleApp[21447]: <cpcsp>rdr_get_support_flag (...)
Jul 13 12:16:15 localhost ConsoleApp[21447]: <cpcsp>rdr_folder_close (...)
Jul 13 12:16:15 localhost ConsoleApp[21447]: <cpcsp>rdr_get_support_flag (...)
Jul 13 12:16:15 localhost ConsoleApp[21447]: <cpcsp>rdr_unlock (...)
Jul 13 12:16:15 localhost ConsoleApp[21447]: <cpcsp>CPCGetProvParam (hProv=0x4040005e, dwParam=2). Result=1, Err=0x0.
Jul 13 12:16:15 localhost ConsoleApp[21447]: <capi10>CryptGetProvParam returned: dwDataLen = 0x5A, LastError=0x0
Jul 13 12:16:15 localhost ConsoleApp[21447]: <capi10>CryptAcquireContextA (Provider = C, Container = , ProvType = 75, Flags = 0x00000000, LastError=0x0)
Jul 13 12:16:15 localhost ConsoleApp[21447]: <capi10>get_provider_type!() Error while getting provider type!
Jul 13 12:16:15 localhost ConsoleApp[21447]: <capi10>CryptAcquireContextA!failed: LastError = 0x8009001D
Jul 13 12:16:15 localhost ConsoleApp[21447]: <capi10>CryptAcquireContextA (Provider = null, Container = null, ProvType = 75, Flags = 0xF0000000, LastError=0x8009001D)
Jul 13 12:16:15 localhost ConsoleApp[21447]: <cpcsp>CPCAcquireContext (pszContainer: null, pszProvName: Crypto-Pro GOST R 34.10-2001 KC1 CSP, dwFlags: 0xf0000000)
Jul 13 12:16:15 localhost ConsoleApp[21447]: <cpcsp>CreateContainer CreateContainer
Jul 13 12:16:15 localhost ConsoleApp[21447]: <cpcsp>CPCAcquireContext (pszContainer=null, dwFlags=0xf0000000). No hCSP. Result=1, Err=0x0. hProv=0x48f0003b.
Jul 13 12:16:15 localhost ConsoleApp[21447]: <capi10>CryptAcquireContextA returned: hProv = 0x1d13e23; LastError = 0x8009001D
Jul 13 12:16:15 localhost ConsoleApp[21447]: <capi10>CryptGetProvParam (hProv = 0x1d13e23, dwParam = 16, dwFlags = 0x0)
Jul 13 12:16:15 localhost ConsoleApp[21447]: <cpcsp>CPCGetProvParam (hProv=0x48f0003b, dwParam=16)
Jul 13 12:16:15 localhost ConsoleApp[21447]: <cpcsp>CPCGetProvParam (hProv=0x48f0003b, dwParam=16). Result=1, Err=0x0.
Jul 13 12:16:15 localhost ConsoleApp[21447]: <capi10>CryptGetProvParam returned: dwDataLen = 0x4, LastError=0x8009001D
Jul 13 12:16:15 localhost ConsoleApp[21447]: <capi10>CryptGetProvParam (hProv = 0x1d13e23, dwParam = 16, dwFlags = 0x0)
Jul 13 12:16:15 localhost ConsoleApp[21447]: <cpcsp>CPCGetProvParam (hProv=0x48f0003b, dwParam=16)
Jul 13 12:16:15 localhost ConsoleApp[21447]: <cpcsp>CPCGetProvParam (hProv=0x48f0003b, dwParam=16). Result=1, Err=0x0.
Jul 13 12:16:15 localhost ConsoleApp[21447]: <capi10>CryptGetProvParam returned: dwDataLen = 0x4, LastError=0x8009001D
Jul 13 12:16:15 localhost ConsoleApp[21447]: <capi10>CryptAcquireContextA (Provider = null, Container = null, ProvType = 81, Flags = 0xF0000000, LastError=0x8009001D)
Jul 13 12:16:15 localhost ConsoleApp[21447]: <cpcsp>CPCAcquireContext (pszContainer: null, pszProvName: Crypto-Pro GOST R 34.10-2012 KC1 Strong CSP, dwFlags: 0xf0000000)
Jul 13 12:16:15 localhost ConsoleApp[21447]: <cpcsp>CreateContainer CreateContainer
Jul 13 12:16:15 localhost ConsoleApp[21447]: <cpcsp>CPCAcquireContext (pszContainer=null, dwFlags=0xf0000000). No hCSP. Result=1, Err=0x0. hProv=0x65200082.
Jul 13 12:16:15 localhost ConsoleApp[21447]: <capi10>CryptAcquireContextA returned: hProv = 0x1422263; LastError = 0x8009001D
Jul 13 12:16:15 localhost ConsoleApp[21447]: <capi10>CryptGetProvParam (hProv = 0x1422263, dwParam = 16, dwFlags = 0x0)
Jul 13 12:16:15 localhost ConsoleApp[21447]: <cpcsp>CPCGetProvParam (hProv=0x65200082, dwParam=16)
Jul 13 12:16:15 localhost ConsoleApp[21447]: <cpcsp>CPCGetProvParam (hProv=0x65200082, dwParam=16). Result=1, Err=0x0.
Jul 13 12:16:15 localhost ConsoleApp[21447]: <capi10>CryptGetProvParam returned: dwDataLen = 0x4, LastError=0x8009001D
Jul 13 12:16:15 localhost ConsoleApp[21447]: <capi10>CryptGetProvParam (hProv = 0x1422263, dwParam = 16, dwFlags = 0x0)
Jul 13 12:16:15 localhost ConsoleApp[21447]: <cpcsp>CPCGetProvParam (hProv=0x65200082, dwParam=16)
Jul 13 12:16:15 localhost ConsoleApp[21447]: <cpcsp>CPCGetProvParam (hProv=0x65200082, dwParam=16). Result=1, Err=0x0.
Jul 13 12:16:15 localhost ConsoleApp[21447]: <capi10>CryptGetProvParam returned: dwDataLen = 0x4, LastError=0x8009001D
Jul 13 12:16:15 localhost ConsoleApp[21447]: <capi10>CryptAcquireContextA (Provider = null, Container = null, ProvType = 80, Flags = 0xF0000000, LastError=0x8009001D)
Jul 13 12:16:15 localhost ConsoleApp[21447]: <cpcsp>CPCAcquireContext (pszContainer: null, pszProvName: Crypto-Pro GOST R 34.10-2012 KC1 CSP, dwFlags: 0xf0000000)
Jul 13 12:16:15 localhost ConsoleApp[21447]: <cpcsp>CreateContainer CreateContainer
Jul 13 12:16:15 localhost ConsoleApp[21447]: <cpcsp>CPCAcquireContext (pszContainer=null, dwFlags=0xf0000000). No hCSP. Result=1, Err=0x0. hProv=0x6d9000e7.
Jul 13 12:16:15 localhost ConsoleApp[21447]: <capi10>CryptAcquireContextA returned: hProv = 0x1424173; LastError = 0x8009001D
Jul 13 12:16:15 localhost ConsoleApp[21447]: <capi10>CryptGetProvParam (hProv = 0x1424173, dwParam = 16, dwFlags = 0x0)
Jul 13 12:16:15 localhost ConsoleApp[21447]: <cpcsp>CPCGetProvParam (hProv=0x6d9000e7, dwParam=16)
Jul 13 12:16:15 localhost ConsoleApp[21447]: <cpcsp>CPCGetProvParam (hProv=0x6d9000e7, dwParam=16). Result=1, Err=0x0.
Jul 13 12:16:15 localhost ConsoleApp[21447]: <capi10>CryptGetProvParam returned: dwDataLen = 0x4, LastError=0x8009001D
Jul 13 12:16:15 localhost ConsoleApp[21447]: <capi10>CryptGetProvParam (hProv = 0x1424173, dwParam = 16, dwFlags = 0x0)
Jul 13 12:16:15 localhost ConsoleApp[21447]: <cpcsp>CPCGetProvParam (hProv=0x6d9000e7, dwParam=16)
Jul 13 12:16:15 localhost ConsoleApp[21447]: <cpcsp>CPCGetProvParam (hProv=0x6d9000e7, dwParam=16). Result=1, Err=0x0.
Jul 13 12:16:15 localhost ConsoleApp[21447]: <capi10>CryptGetProvParam returned: dwDataLen = 0x4, LastError=0x8009001D
Jul 13 12:16:15 localhost ConsoleApp[21447]: <capi10>CryptGetProvParam (hProv = 0x1424173, dwParam = 2, dwFlags = 0x1)
Jul 13 12:16:15 localhost ConsoleApp[21447]: <cpcsp>CPCGetProvParam (hProv=0x6d9000e7, dwParam=2)
Jul 13 12:16:15 localhost ConsoleApp[21447]: <cpcsp>rdr_lock (...)
Jul 13 12:16:15 localhost ConsoleApp[21447]: <cpcsp>rdr_connect_carrier (...)
Jul 13 12:16:15 localhost ConsoleApp[21447]: <cpcsp>rdr_set_provider_callbacks (...)
Jul 13 12:16:15 localhost ConsoleApp[21447]: <cpcsp>rdr_local_machine (...)
Jul 13 12:16:15 localhost ConsoleApp[21447]: <cpcsp>rdr_select_applet (...)
Jul 13 12:16:15 localhost ConsoleApp[21447]: <cpcsp>rdr_get_support_flag (...)
Jul 13 12:16:15 localhost ConsoleApp[21447]: <cpcsp>rdr_get_universal_flags (...)
Jul 13 12:16:15 localhost ConsoleApp[21447]: <cpcsp>rdr_all_password_flags (...)
Jul 13 12:16:15 localhost ConsoleApp[21447]: <cpcsp>rdr_password_type (...)
Jul 13 12:16:15 localhost ConsoleApp[21447]: <cpcsp>rdr_passwd_term (...)
Jul 13 12:16:15 localhost ConsoleApp[21447]: <cpcsp>rdr_get_support_flag (...)
Jul 13 12:16:15 localhost ConsoleApp[21447]: <cpcsp>rdr_get_support_flag (...)
Jul 13 12:16:15 localhost ConsoleApp[21447]: <cpcsp>rdr_folder_enum_open (...)
Jul 13 12:16:15 localhost ConsoleApp[21447]: <cpcsp>rdr_get_support_flag (...)
Jul 13 12:16:15 localhost ConsoleApp[21447]: <cpcsp>rdr_folder_enum_next (...)
Jul 13 12:16:15 localhost ConsoleApp[21447]: <cpcsp>rdr_folder_open (...)
Jul 13 12:16:15 localhost ConsoleApp[21447]: <cpcsp>rdr_info_carrier_type (...)
Jul 13 12:16:15 localhost ConsoleApp[21447]: <cpcsp>rdr_get_support_flag (...)
Jul 13 12:16:15 localhost ConsoleApp[21447]: <cpcsp>rdr_file_open (...)
Jul 13 12:16:15 localhost ConsoleApp[21447]: <cpcsp>rdr_file_length (...)
Jul 13 12:16:15 localhost ConsoleApp[21447]: <cpcsp>rdr_file_read (...)
Jul 13 12:16:15 localhost ConsoleApp[21447]: <cpcsp>rdr_file_read (...)
Jul 13 12:16:15 localhost ConsoleApp[21447]: <cpcsp>rdr_file_close (...)
Jul 13 12:16:15 localhost ConsoleApp[21447]: <cpcsp>rdr_get_support_flag (...)
Jul 13 12:16:15 localhost ConsoleApp[21447]: <cpcsp>rdr_folder_close (...)
Jul 13 12:16:15 localhost ConsoleApp[21447]: <cpcsp>rdr_get_support_flag (...)
Jul 13 12:16:15 localhost ConsoleApp[21447]: <cpcsp>rdr_unlock (...)
Jul 13 12:16:15 localhost ConsoleApp[21447]: <cpcsp>CPCGetProvParam (hProv=0x6d9000e7, dwParam=2). Result=1, Err=0x0.
Jul 13 12:16:15 localhost ConsoleApp[21447]: <capi10>CryptGetProvParam returned: dwDataLen = 0x5A, LastError=0x8009001D
Jul 13 12:16:15 localhost ConsoleApp[21447]: <capi10>CryptAcquireContextA (Provider = C, Container = , ProvType = 75, Flags = 0x00000000, LastError=0x8009001D)
Jul 13 12:16:15 localhost ConsoleApp[21447]: <capi10>get_provider_type!() Error while getting provider type!
Jul 13 12:16:15 localhost ConsoleApp[21447]: <capi10>CryptAcquireContextA!failed: LastError = 0x8009001D
Jul 13 12:16:15 localhost ConsoleApp[21447]: <capi10>CryptReleaseContext (hProv = 0x1d13e23, dwFlags = 0x0)
Jul 13 12:16:15 localhost ConsoleApp[21447]: <cpcsp>CPCReleaseContext (hProv=0x48f0003b)
Jul 13 12:16:15 localhost ConsoleApp[21447]: <cpcsp>CPCReleaseContext (dwFlags=0x0). Result=1, Err=0x80090020.
Jul 13 12:16:15 localhost ConsoleApp[21447]: <capi10>CryptReleaseContext returned
Jul 13 12:16:15 localhost ConsoleApp[21447]: <capi10>CryptReleaseContext (hProv = 0x161e3e3, dwFlags = 0x0)
Jul 13 12:16:15 localhost ConsoleApp[21447]: <cpcsp>CPCReleaseContext (hProv=0xda4000d5)
Jul 13 12:16:15 localhost ConsoleApp[21447]: <cpcsp>CPCReleaseContext (dwFlags=0x0). Result=1, Err=0x80090020.
Jul 13 12:16:15 localhost ConsoleApp[21447]: <capi10>CryptReleaseContext returned
Jul 13 12:16:15 localhost ConsoleApp[21447]: <capi10>CryptReleaseContext (hProv = 0x1424173, dwFlags = 0x0)
Jul 13 12:16:15 localhost ConsoleApp[21447]: <cpcsp>CPCReleaseContext (hProv=0x6d9000e7)
Jul 13 12:16:15 localhost ConsoleApp[21447]: <cpcsp>rdr_get_support_flag (...)
Jul 13 12:16:15 localhost ConsoleApp[21447]: <cpcsp>rdr_folder_enum_close (...)
Jul 13 12:16:15 localhost ConsoleApp[21447]: <cpcsp>rdr_lock (...)
Jul 13 12:16:15 localhost ConsoleApp[21447]: <cpcsp>rdr_disconnect_carrier (...)
Jul 13 12:16:15 localhost ConsoleApp[21447]: <cpcsp>rdr_unlock (...)
Jul 13 12:16:15 localhost ConsoleApp[21447]: <cpcsp>CPCReleaseContext (dwFlags=0x0). Result=1, Err=0x80090020.
Jul 13 12:16:15 localhost ConsoleApp[21447]: <capi10>CryptReleaseContext returned
Jul 13 12:16:15 localhost ConsoleApp[21447]: <capi10>CryptReleaseContext (hProv = 0x141ced3, dwFlags = 0x0)
Jul 13 12:16:15 localhost ConsoleApp[21447]: <cpcsp>CPCReleaseContext (hProv=0x4040005e)
Jul 13 12:16:15 localhost ConsoleApp[21447]: <cpcsp>rdr_get_support_flag (...)
Jul 13 12:16:15 localhost ConsoleApp[21447]: <cpcsp>rdr_folder_enum_close (...)
Jul 13 12:16:15 localhost ConsoleApp[21447]: <cpcsp>rdr_lock (...)
Jul 13 12:16:15 localhost ConsoleApp[21447]: <cpcsp>rdr_disconnect_carrier (...)
Jul 13 12:16:15 localhost ConsoleApp[21447]: <cpcsp>rdr_unlock (...)
Jul 13 12:16:15 localhost ConsoleApp[21447]: <cpcsp>CPCReleaseContext (dwFlags=0x0). Result=1, Err=0x80090020.
Jul 13 12:16:15 localhost ConsoleApp[21447]: <capi10>CryptReleaseContext returned
Jul 13 12:16:15 localhost ConsoleApp[21447]: <capi10>CryptReleaseContext (hProv = 0x141e203, dwFlags = 0x0)
Jul 13 12:16:15 localhost ConsoleApp[21447]: <cpcsp>CPCReleaseContext (hProv=0xd2f000b0)
Jul 13 12:16:15 localhost ConsoleApp[21447]: <cpcsp>CPCReleaseContext (dwFlags=0x0). Result=1, Err=0x80090020.
Jul 13 12:16:15 localhost ConsoleApp[21447]: <capi10>CryptReleaseContext returned
Jul 13 12:16:15 localhost ConsoleApp[21447]: <capi10>CryptReleaseContext (hProv = 0x1422263, dwFlags = 0x0)
Jul 13 12:16:15 localhost ConsoleApp[21447]: <cpcsp>CPCReleaseContext (hProv=0x65200082)
Jul 13 12:16:15 localhost ConsoleApp[21447]: <cpcsp>CPCReleaseContext (dwFlags=0x0). Result=1, Err=0x80090020.
Jul 13 12:16:15 localhost ConsoleApp[21447]: <capi10>CryptReleaseContext returned
Утро доброе!
Есть небольшая ошибка в коде. Внимательно прочитайте описание функции 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;
}
}
При попытке получить список контейнеров в криптопровайдере «Код безопасности CSP» (dwProvType = 90), функция CryptGetProvParam постоянно возвращает True при dwFlag:= CRYPT_NEXT. Тем самым получается бесконечный цикл. Хотя в документации сказано, что при возвращении False и GetLastError == ERROR_NO_MORE_ITEMS, в списке нет больше элементов для перечисления. По факту криптопровайдер возвращает всегда только первый элемент, игнорируя флаг CRYPT_NEXT. Провайдер КриптоПро при этом отрабатывает как положено.
procedure getContainers(const dwProvType, dwFlags: DWORD; var containers: TList<string>);
var
hCryptProv: Winapi.NCrypt.HCRYPTPROV;
dwFlag: DWORD;
pdwDataLen: DWORD;
pbData: PByte;
begin
if not Assigned(containers) then Exit;
containers.Clear;
if (CryptAcquireContext(hCryptProv,
nil,
nil,
dwProvType,
CRYPT_VERIFYCONTEXT)) then begin
if (hCryptProv <> 0) then try
dwFlag:= CRYPT_FIRST;
pdwDataLen:= 0;
if (CryptGetProvParam(hCryptProv, PP_ENUMCONTAINERS, nil, pdwDataLen, dwFlags or dwFlag)) then begin
GetMem(pbData, pdwDataLen); try
while True do begin
if Assigned(pbData) then
if CryptGetProvParam(hCryptProv,
PP_ENUMCONTAINERS,
pbData,
pdwDataLen,
dwFlags or dwFlag) then begin
dwFlag:= CRYPT_NEXT;
containers.Add(String(PAnsiChar(pbData)));
end else Break;
end;
finally
FreeMem(pbData, pdwDataLen);
end;
end;
finally
CryptReleaseContext(hCryptProv, 0);
end;
end;
end;