57 cryptgetprovparam ошибка

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?


Offline

iErroRi

 


#1
Оставлено
:

24 июля 2017 г. 11:36:31(UTC)

iErroRi

Статус: Участник

Группы: Участники

Зарегистрирован: 18.07.2017(UTC)
Сообщений: 13
Российская Федерация
Откуда: Краснодар

Сказал(а) «Спасибо»: 2 раз
Поблагодарили: 2 раз в 2 постах

Проверяю открепленную подпись, (созданную через браузер плагин реальным сертификатом) утилитой командной строки cryptcp, выводит ошибку Error: The parameter is incorrect.

Код:


user@pc:/$/opt/cprocsp/bin/amd64/cryptcp -verify -norev -f /home/user/test_file/tst.txt.sgn /home/user/test_file/tst.txt.sgn

CryptCP 4.0 (c) "Crypto-Pro", 2002-2015.
Command prompt Utility for file signature and encryption.

The following certificate will be used:
RDN:0000, 0000, "..."
Valid from 23.12.2016 10:25:00 to 23.03.2018 10:25:00

Certificate chain is not checked for this certificate:
RDN:0000, 0000, "..."
Valid from 23.12.2016 10:25:00 to 23.03.2018 10:25:00

The certificate or certificate chain is based on an untrusted root.
Do you want to use this certificate ([Y]es, [N]o, [C]ancel)?y

Certificate chains are checked.
Folder '/home/user/test_file/':
/home/user/test_file/tst.txt.sgn... Signature verifying...     
Error: The parameter is incorrect./dailybuildsbranches/CSP_4_0/CSPbuild/CSP/samples/CPCrypt/DSign.cpp:1495: 0x57
[ErrorCode: 0x00000057]

Подпись создается через плагин браузера. Путем подписания хеша файла сгенерированного так:

Код:


hash('gost-crypto', file_get_contents($filePath)),

При создании подписи на тестовом урл (https://www.cryptopro.ru/sites/default/files/products/cades/demopage/cades_xlong_sample.html) и подписании тестовым сертификатом проверка проходит успешно:

Код:


гыук@c:~$ /opt/cprocsp/bin/amd64/cryptcp -verify -norev -f /home/user/test_file/tst2.txt.sgn /home/user/test_file/tst2.txt.sgn
CryptCP 4.0 (c) "Crypto-Pro", 2002-2015.
Command prompt Utility for file signature and encryption.

Certificates found: 2
Certificate chains are checked.
Folder '/home/user/test_file/':
/home/error/test_file/tst.txt.sgn... Signature verifying...     
Signer: testcompany, localhost, RU, email@ya.ru
 Signature's verified.
[ReturnCode: 0]

В чем может быть проблема куда комать? Как починить?

ОС Ubuntu

Код:


user@pc:~$ uname -a
Linux pc 4.4.0-83-generic #106-Ubuntu SMP Mon Jun 26 17:54:43 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux

Установленные пакеты

Код:


user@pc:~$ dpkg -l | grep csp
ii  cprocsp-curl-64                            4.0.0-4                                                  amd64        CryptoPro Curl shared library and binaris. Build 9842.
ii  cprocsp-pki-cades                          2.0.0-1                                                  amd64        CryptoPro PKI
ii  cprocsp-pki-plugin                         2.0.0-1                                                  amd64        CryptoPro PKI
ii  cprocsp-rdr-gui-gtk-64                     4.0.0-4                                                  amd64        GUI components for CryptoPro CSP readers. Build 9842.
ii  lsb-cprocsp-base                           4.0.0-4                                                  all          CryptoPro CSP library. Build 9842.
ii  lsb-cprocsp-capilite-64                    4.0.0-4                                                  amd64        CryptoAPI lite. Build 9842.
ii  lsb-cprocsp-devel                          4.0.0-4                                                  all          CryptoPro CSP static libraries and headers. Build 9859.
ii  lsb-cprocsp-kc1-64                         4.0.0-4                                                  amd64        CryptoPro CSP library. Build 9842.
ii  lsb-cprocsp-kc2-64                         4.0.0-4                                                  amd64        CryptoPro CSP KC2. Build 9842.
ii  lsb-cprocsp-rdr-64                         4.0.0-4                                                  amd64        CryptoPro CSP readers. Build 9842.

Вверх


Offline

Андрей Емельянов

 


#2
Оставлено
:

24 июля 2017 г. 14:59:38(UTC)

Андрей Емельянов

Статус: Сотрудник

Группы: Участники

Зарегистрирован: 11.03.2013(UTC)
Сообщений: 805
Мужчина
Российская Федерация
Откуда: Оттуда

Сказал «Спасибо»: 4 раз
Поблагодарили: 148 раз в 144 постах

Добрый день.
Возможно, дело в этом http://cpdn.cryptopro.ru…nt/cades/plugin-faq.html

Техническую поддержку оказываем тут
Наша база знаний
Наша страничка в Instagram


Вверх


Offline

iErroRi

 


#3
Оставлено
:

25 июля 2017 г. 11:00:48(UTC)

iErroRi

Статус: Участник

Группы: Участники

Зарегистрирован: 18.07.2017(UTC)
Сообщений: 13
Российская Федерация
Откуда: Краснодар

Сказал(а) «Спасибо»: 2 раз
Поблагодарили: 2 раз в 2 постах

Спасибо за ответ, но не совсем понятнятно на каком этапе это может влиять?

Подписывается хеш файла генерируемый на сервере. Клиенту при подписании прилетает такой:

Код:


0d37103b97481975dc272caacfa58f00f9cb0b19277fdbcd79418372c96532e8

После чего он подписывается следующим кодом

Код:


// Создаем объект CAdESCOM.CadesSignedData
var oSignedData = yield cadesplugin.CreateObjectAsync("CAdESCOM.CadesSignedData");
//yield oSignedData.propset_ContentEncoding(cadesplugin.CADESCOM_BASE64_TO_BINARY)

//создадим результат запроса
var result = new Array();
for (var i = 0; i < data.length; i++) {
    var item = data[i];
    var oHashedData = yield cadesplugin.CreateObjectAsync("CAdESCOM.HashedData");

    // Инициализируем объект заранее вычисленным хэш-значением
    // Алгоритм хэширования нужно указать до того, как будет передано хэш-значение
    oHashedData.Algorithm = CADESCOM_HASH_ALGORITHM_CP_GOST_3411;
    yield  oHashedData.SetHashValue(item.hash);

    var sSignedMessage = yield oSignedData.SignHash(oHashedData, oSigner, CADESCOM_CADES_BES);

    var newItem = new Object();
    newItem[csrfParam] = csrfToken;
    newItem.chank_id = item.chank_id;
    newItem.id = item.id;
    newItem.sign = sSignedMessage;

    result.push(newItem);

}

И на сервер отправляется сгенерированная подпись(сократил —):

Код:


MIIF3gYJKoZIhvcNAQcCoIIFzzCCBcsCAQExDDAKBgYqhQMCAgkFADALBgkqhkiG9w0BBwGgggNF
MIIDQTCCAvCgAwIBAgITEgAedQpjw7uCqGhTgQAAAB51CjAIBgYqhQMCAgMwfzEjMCEGCSqGSIb3
DQEJARYUc3VwcG9ydEBjcnlwdG9wcm8ucnUxCzAJBgNVBAYTAlJVMQ8wDQYDVQQHEwZNb3Njb3cx
FzAVBgNVBAoTDkNSWVBUTy1QUk8gTExDMSEwHwYDVQQDExhDUllQVE8tUFJPIFRlc3QgQ2VudGVy
IDIwHhcNMTc ----------- kBgsqhkiG9w0BCRACLzGB
1DCB0TCBzjCByzAIBgYqhQMCAgkEIM4O99h/3u6s6MWSqEzp6SL5xSBcy96NV4c8Vo/mRUKIMIGc
MIGEpIGBMH8xIzAhBgkqhkiG9w0BCQEWFHN1cHBvcnRAY3J5cHRvcHJvLnJ1MQswCQYDVQQGEwJS
VTEPMA0GA1UEBxMGTW9zY293MRcwFQYDVQQKEw5DUllQVE8tUFJPIExMQzEhMB8GA1UEAxMYQ1JZ
UFRPLVBSTyBUZXN0IENlbnRlciAyAhMSAB51CmPDu4KoaFOBAAAAHnUKMBwGBiqFAwICEzASBgcq
hQMCAiQABgcqhQMCAh4BBEDfzDL7LH3H/RrmJY/lasJGFr6oeEagUtZ39MLJTjIqP7CnKu/crcSM
grLonaRCg8edHBOCGT+pBQpNNvJFHad/

Пробовал как с указанием кодировки так и без результат один и тот же примерно, различия в полученных хешах минимальны и cryptcp не проверяются оба.

Код:


yield oSignedData.propset_ContentEncoding(cadesplugin.CADESCOM_BASE64_TO_BINARY)

Подпись же открепленная и командой

Код:

cryptcp -verify -norev -f /home/user/test_file/tst.txt.sgn /home/user/test_file/tst.txt.sgn

Проверяется валидность самой подписи без проверки соответствия исходного файла к которому считался хеш?


Вверх


Offline

Андрей Емельянов

 


#4
Оставлено
:

26 июля 2017 г. 18:26:27(UTC)

Андрей Емельянов

Статус: Сотрудник

Группы: Участники

Зарегистрирован: 11.03.2013(UTC)
Сообщений: 805
Мужчина
Российская Федерация
Откуда: Оттуда

Сказал «Спасибо»: 4 раз
Поблагодарили: 148 раз в 144 постах

Если открепленная подпись, то в cryptcp используйте флаг -vsignf для проверки.
Не очень понятна мысль использовать флаг -verify, он служит для проверки совмещенной подписи.

Техническую поддержку оказываем тут
Наша база знаний
Наша страничка в Instagram


Вверх

thanks 1 пользователь поблагодарил Андрей Емельянов за этот пост.

iErroRi

оставлено 28.07.2017(UTC)


Offline

iErroRi

 


#5
Оставлено
:

27 июля 2017 г. 11:29:32(UTC)

iErroRi

Статус: Участник

Группы: Участники

Зарегистрирован: 18.07.2017(UTC)
Сообщений: 13
Российская Федерация
Откуда: Краснодар

Сказал(а) «Спасибо»: 2 раз
Поблагодарили: 2 раз в 2 постах

Спасибо помогло, но выдется ошибка Error: Certificate chain is not checked for this certificate (error code 10000)
Как я понимаю, не проверяется цепочка потому что не установлены корневые сертификаты.
В этой теме https://www.cryptopro.ru…aspx?g=posts&m=67962 описано что необходимо установить пакет cprocsp-curl для автоматического скачивания и проверки. Пакет установлен но ошибка все равно выходит. Есть необходимость дополнительной настройки или включения?

Утановленные пакеты

Код:


user@pc:~/test_file$ dpkg -l | grep csp
ii  [b]cprocsp-curl-64[/b]                            4.0.0-4                                                  amd64        CryptoPro Curl shared library and binaris. Build 9842.
ii  cprocsp-pki-cades                          2.0.0-1                                                  amd64        CryptoPro PKI
ii  cprocsp-pki-plugin                         2.0.0-1                                                  amd64        CryptoPro PKI
ii  cprocsp-rdr-gui-gtk-64                     4.0.0-4                                                  amd64        GUI components for CryptoPro CSP readers. Build 9842.
ii  lsb-cprocsp-base                           4.0.0-4                                                  all          CryptoPro CSP library. Build 9842.
ii  lsb-cprocsp-capilite-64                    4.0.0-4                                                  amd64        CryptoAPI lite. Build 9842.
ii  lsb-cprocsp-devel                          4.0.0-4                                                  all          CryptoPro CSP static libraries and headers. Build 9859.
ii  lsb-cprocsp-kc1-64                         4.0.0-4                                                  amd64        CryptoPro CSP library. Build 9842.
ii  lsb-cprocsp-kc2-64                         4.0.0-4                                                  amd64        CryptoPro CSP KC2. Build 9842.
ii  lsb-cprocsp-rdr-64                         4.0.0-4                                                  amd64        CryptoPro CSP readers. Build 9842.

Проверка подписи

Код:


user@pc:~/test_file$ /opt/cprocsp/bin/amd64/cryptcp -vsignf -dir /home/user/test_file/ 732.pdf -f 732.pdf.sgn
CryptCP 4.0 (c) "Crypto-Pro", 2002-2015.
Command prompt Utility for file signature and encryption.

Certificates found: 3
Certificate chain is not checked for this certificate:
RDN:04400008827, Сергей .... 102240000
Valid from 12.04.2017 04:53:32 to 12.04.2018 04:53:32

Error: Certificate chain is not checked for this certificate (error code 10000):
/dailybuildsbranches/CSP_4_0/CSPbuild/CSP/samples/CPCrypt/Certs.cpp:357: 0x20000133
Do you want to use this certificate ([Y]es, [N]o, [C]ancel)?y

Certificate chain is not checked for this certificate:
RDN:ЗАО Калуга Астрал (УЦ 889), "ЗАО ""Калуга Астрал""", ca@astralnalog.ru, 40 Калужская область, Калуга, RU, 004029017981, 1024001434049, Улица Циолковского дом 4
Valid from 09.08.2016 08:25:00 to 09.08.2026 08:35:00

Error: Certificate chain is not checked for this certificate (error code 10000):
/dailybuildsbranches/CSP_4_0/CSPbuild/CSP/samples/CPCrypt/Certs.cpp:357: 0x20000133
Do you want to use this certificate ([Y]es, [N]o, [C]ancel)?y

Certificate chain is not checked for this certificate:
RDN:УЦ 1 ИС ГУЦ, RU, 77 г. Москва, Москва, Минкомсвязь России, 125375 г. Москва ул. Тверская д.7, dit@minsvyaz.ru, 1047702026701, 007710474375
Valid from 16.03.2016 12:02:51 to 12.07.2027 12:02:51

Error: Certificate chain is not checked for this certificate (error code 10000):
/dailybuildsbranches/CSP_4_0/CSPbuild/CSP/samples/CPCrypt/Certs.cpp:357: 0x20000133
Do you want to use this certificate ([Y]es, [N]o, [C]ancel)?y

Certificate chains are checked.
Folder './':
732.pdf... Signature verifying...     
    
Signer: 0440353000, Сергей ..., 102240115000
Error: Certificate chain is not checked for this certificate (error code 10000):
/dailybuildsbranches/CSP_4_0/CSPbuild/CSP/samples/CPCrypt/Certs.cpp:357: 0x20000133
Do you want to use this certificate ([Y]es, [N]o, [C]ancel)?y

 Signature's verified.
[ReturnCode: 0]

Вверх


Offline

Андрей Писарев

 


#6
Оставлено
:

27 июля 2017 г. 11:50:12(UTC)

Андрей *

Статус: Сотрудник

Группы: Участники

Зарегистрирован: 26.07.2011(UTC)
Сообщений: 11,985
Мужчина
Российская Федерация

Сказал «Спасибо»: 457 раз
Поблагодарили: 1902 раз в 1472 постах

Здравствуйте.

Сертификат(ы) необходимо установить самостоятельно.

Техническую поддержку оказываем тут
Наша база знаний


Вверх

WWW


Offline

Андрей Писарев

 


#7
Оставлено
:

27 июля 2017 г. 11:51:45(UTC)

Андрей *

Статус: Сотрудник

Группы: Участники

Зарегистрирован: 26.07.2011(UTC)
Сообщений: 11,985
Мужчина
Российская Федерация

Сказал «Спасибо»: 457 раз
Поблагодарили: 1902 раз в 1472 постах

Как в Linux/Unix установить сертификаты?

Цитата:

Установка корневого сертификата

Техническую поддержку оказываем тут
Наша база знаний


Вверх

WWW


Offline

iErroRi

 


#8
Оставлено
:

27 июля 2017 г. 12:26:23(UTC)

iErroRi

Статус: Участник

Группы: Участники

Зарегистрирован: 18.07.2017(UTC)
Сообщений: 13
Российская Федерация
Откуда: Краснодар

Сказал(а) «Спасибо»: 2 раз
Поблагодарили: 2 раз в 2 постах

То есть для автоматической проверки подписей необходимо установить все сертификаты удостоверяющих цетров России?
Если да то где их все взять?

Сейчас у меня установлены:


Вверх


Offline

Андрей Писарев

 


#9
Оставлено
:

27 июля 2017 г. 14:11:17(UTC)

Андрей *

Статус: Сотрудник

Группы: Участники

Зарегистрирован: 26.07.2011(UTC)
Сообщений: 11,985
Мужчина
Российская Федерация

Сказал «Спасибо»: 457 раз
Поблагодарили: 1902 раз в 1472 постах

Варианты:
а) отключить проверку сертификатов
б) установить необходимые сертификаты

Если необходимы сертификаты с цепочкой до ГУЦ:
http://www.cryptopro.ru/…ts&m=82022#post82022

Техническую поддержку оказываем тут
Наша база знаний


Вверх

WWW

thanks 1 пользователь поблагодарил Андрей * за этот пост.

iErroRi

оставлено 28.07.2017(UTC)


Offline

iErroRi

 


#10
Оставлено
:

28 июля 2017 г. 9:37:58(UTC)

iErroRi

Статус: Участник

Группы: Участники

Зарегистрирован: 18.07.2017(UTC)
Сообщений: 13
Российская Федерация
Откуда: Краснодар

Сказал(а) «Спасибо»: 2 раз
Поблагодарили: 2 раз в 2 постах

Добрый день

А списки отзыва тоже необходимо от каждого УЦ грузить или есть одно место или в сертификате есть ссылка и подгружается автоматом?

Отредактировано пользователем 28 июля 2017 г. 14:41:32(UTC)
 | Причина: Не указана


Вверх

Пользователи, просматривающие эту тему

Guest

Быстрый переход
 

Вы не можете создавать новые темы в этом форуме.

Вы не можете отвечать в этом форуме.

Вы не можете удалять Ваши сообщения в этом форуме.

Вы не можете редактировать Ваши сообщения в этом форуме.

Вы не можете создавать опросы в этом форуме.

Вы не можете голосовать в этом форуме.

EgorOkhotin

Статус: Активный участник

Группы: Участники

Зарегистрирован: 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;

Понравилась статья? Поделить с друзьями:
  • 56с5 ошибка бмв е90
  • 56с5 ошибка акпп бмв
  • 56c5 ошибка бмв
  • 56c5 ошибка акпп bmw e90
  • 56bf ошибка бмв