Re: CryptoAPI: Как программно установить PIN-код

Нет, такой возможности нет.

А зачем Вам использовать неактуальную версию драйверов? Мы правим ошибки, расширяем функционал. Какой смысл расчитывать на старую версию? при том условии, что мы выполняем требования по обязательной обратной совместимости.

Re: CryptoAPI: Как программно установить PIN-код

Установили драйвера (rtDrivers.x86.v.2.23.07.0247.exe), бета версию - кэширование пин кода так и не работает.
Дата изменения файлов в директории C:\WINDOWS\system32\Aktiv Co\rtUSB - 2008 года, так и должно быть?
И в утилите управление драйверов -  версия - "SetupDrv 1.31"

Re: CryptoAPI: Как программно установить PIN-код

Утилита SetupDrv больше не используется.
Удалите драйвера из апплета панели управления, и установите заново.
Если потребуется перезагрузка - дистрибутив об этом уведомит.

Re: CryptoAPI: Как программно установить PIN-код

Я так и сделал, удалил через панель управления старые драйвера, перегрузил компьютер, поставил новыую бета версию, и снова перегрузил.
Дата изменения файлов в директории C:\WINDOWS\system32\Aktiv Co\rtUSB - 2008 года, так и должно быть?

Re: CryptoAPI: Как программно установить PIN-код

Да, так и должно быть.
Дата сборки текущей релизной версии драйверов 16.04.2008. Подписан драйвер был 01.07.2008.
Драйвер долгое время не требовал изменений. Очередная версия будет выпущена скоро, всвязи с выходом Windows 7.

Re: CryptoAPI: Как программно установить PIN-код

А как проверить кэшируется PIN код или нет?
В OUTLOOK когда я подписываю несколько писем поочереди у меня на каждом письме запрашивает PIN код.
При этом я приложение не закрываю. Должно ли кэшироваться в данном случае?

(2009-08-13 11:25:35 отредактировано MKurskiy)

Re: CryptoAPI: Как программно установить PIN-код

Нет, в данном случае кэширование происходить стандартными средствами не должно.
Т.е. Outlook не вызывает функцию CryptSetProvParam с флагом PP_SIGNATURE_PIN или PP_KEYEXCHANGE_PIN, алгоритм работы предусматривает, что пользователь будет вводить PIN при подписании каждого письма.

Однако можно сделать кэширование пин-кода на уровне нашего API, которое используется Aktiv Rutoken CSP. Это предмет будущих разработок. Этот функционал обязательно будет реализован.

Сейчас кэширование реализовано только в CSP.
Алгоритм работы такой:
1. Для кэширования пин-кода приложение должно вызвать CryptSetProvParam с флагом PP_SIGNATURE_PIN или PP_KEYEXCHANGE_PIN, и в pbData передать пин-код.
2. Сброс закэшированного пин-кода осуществляется вызовом той же функции с pbData == NULL, либо по отключению Rutoken.

До сброса пин-кода можно вызывать CryptReleaseContext, CryptAcquireContext и любые другие функции. До явного сброса пин-кода, он не будет запрашиваться у пользователя, и будет использован закэшированный.

Re: CryptoAPI: Как программно установить PIN-код

А когда примерно будет реализован этот функционал на уровне вашего API?

Re: CryptoAPI: Как программно установить PIN-код

К сожалению, не могу ответить на этот ворпос.

Re: CryptoAPI: Как программно установить PIN-код

А существует ли техническая документация с описанием всех процедур/функций, вы можете её предоставить?

Re: CryptoAPI: Как программно установить PIN-код

Какую техническую документацию Вы имеете в виду?
Описание функций CSP есть в MSDN, это криптографический интерфейс CryptoAPI 2.0.
Aktiv Rutoken CSP соответствует этому интерфейсу.

Re: CryptoAPI: Как программно установить PIN-код

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

По этой ссылке https://forum.rutoken.ru/post/3582/#p3582 вы пишете:
На нашем сайте выложена новая версия драйверов Рутокен  v. 2.81.00.0424
Доработан криптопровайдер. Реализована возможность работы без отображения пользовательского интерфейса.

Имею:
RuToken S с драйверами 2.100.00.0542,
Windows 2008 R2.


Вызываю:

#define MYPROV TEXT("Aktiv Rutoken CSP v1.0")
const BYTE pin[] = {0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x00};
DWORD dwError = 0;
HCRYPTPROV hCryptProv = NULL;

if( !CryptAcquireContext(    &hCryptProv, NULL, MYPROV, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT | CRYPT_SILENT))
{
    dwError = GetLastError();
        return;
}

if( !CryptSetProvParam(hCryptProv, PP_KEYEXCHANGE_PIN, pin, NULL))
{
       dwError = GetLastError() ; //Ошибка с кодом 13
}

Почему возникает ошибка?

Re: CryptoAPI: Как программно установить PIN-код

Spok пишет:

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

По этой ссылке https://forum.rutoken.ru/post/3582/#p3582 вы пишете:
На нашем сайте выложена новая версия драйверов Рутокен  v. 2.81.00.0424
Доработан криптопровайдер. Реализована возможность работы без отображения пользовательского интерфейса.

Имею:
RuToken S с драйверами 2.100.00.0542,
Windows 2008 R2.


Вызываю:

#define MYPROV TEXT("Aktiv Rutoken CSP v1.0")
const BYTE pin[] = {0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x00};
DWORD dwError = 0;
HCRYPTPROV hCryptProv = NULL;

if( !CryptAcquireContext(    &hCryptProv, NULL, MYPROV, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT | CRYPT_SILENT))
{
    dwError = GetLastError();
        return;
}

if( !CryptSetProvParam(hCryptProv, PP_KEYEXCHANGE_PIN, pin, NULL))
{
       dwError = GetLastError() ; //Ошибка с кодом 13
}

Почему возникает ошибка?

Перед вызовом CryptSetProvParam(hCryptProv, PP_KEYEXCHANGE_PIN, pin, NULL) надо вызвать CryptSetProvParam с параметром PP_RTCSP_CURRENT_READER или PP_SMARTCARD_READER, указав имя ридера, на который надо залогиниться.

(2015-04-28 12:40:53 отредактировано Spok)

Re: CryptoAPI: Как программно установить PIN-код

Добрый день.

1. В каком файле объявлен PP_RTCSP_CURRENT_READER и как можно получить этот файл?

2. Правильно ли я задал имя ридера? Если да, то почему возникает ошибка?
if( !CryptSetProvParam(hCryptProv, PP_SMARTCARD_READER, (const BYTE*)"Activ Co. ruToken 0", NULL))
{
    dwError = GetLastError() ; //Ошибка с кодом 0x80100017
    return;
}
P.S в панели управления мой RuToken виден именно с этим именем ридера.

Re: CryptoAPI: Как программно установить PIN-код

Spok пишет:

if( !CryptSetProvParam(hCryptProv, PP_SMARTCARD_READER, (const BYTE*)"Activ Co. ruToken 0", NULL))

неправильно скопировали имя :)
"Aktiv Co. ruToken 0" - через букву К