| ||||
| ||||
Я знаю имя контейнера на смарткарте (посмотрел утилитой). Как получить ссылку на криптопровайдера функцией CryptAcquireContext(hProv, contName, nil, PROV_RSA_FULL, fFlag)? Какой поставить fFlag? CRYPT_VERIFYCONTEXT - нельзя, т.к. явно задан контейнер CRYPT_NEWKEYSET - ошибка, уже есть такой CRYPT_MACHINE_KEYSET - ошибка = NTE_BAD_KEYSET CRYPT_DELETEKEYSET - вроде не стоит CRYPT_SILENT - не получается, т.к. последующий вызов функции CryptGetUserKey(hProv, AT_KEYEXCHANGE, key) говорит 'NTE_NO_KEY', хотя ключевая пара там точно есть. Что делать? Начальные установки: WinXP, CSP 2.0 (2100), OmniKey. | ||||
Ответы: | ||||
| ||||
0 пробовали? // dwFlags definitions for CryptAcquireContext #define CRYPT_VERIFYCONTEXT 0xF0000000 #define CRYPT_NEWKEYSET 0x00000008 #define CRYPT_DELETEKEYSET 0x00000010 #define CRYPT_MACHINE_KEYSET 0x00000020 #define CRYPT_SILENT 0x00000040 | ||||
| ||||
Не понял, что попробовать? Да, есть такие константы. | ||||
| ||||
0 == ноль == ZERO | ||||
| ||||
Если поставить fFlag=0, то последующий вызов функции CryptGetUserKey(hProv, AT_KEYEXCHANGE, key) говорит 'NTE_NO_KEY', хотя ключевая пара там точно есть. Я про ключевую пару так утверждаю, т.к. с помощью неявного определения провайдера через контекст (CryptAcquireCertificatePrivateKey) все работает (ну почти все :)), а мне надо бы через явное определение (т.к. решается задача http://www.cryptopro.ru/cryptopro/forum/view.asp?q=3315) | ||||