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

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

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

Михаил Курский
Руководитель отдела разработки прикладного ПО Rutoken, Компания "Актив"

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 больше не используется.
Удалите драйвера из апплета панели управления, и установите заново.
Если потребуется перезагрузка - дистрибутив об этом уведомит.

Михаил Курский
Руководитель отдела разработки прикладного ПО Rutoken, Компания "Актив"

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

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

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

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

Михаил Курский
Руководитель отдела разработки прикладного ПО Rutoken, Компания "Актив"

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 и любые другие функции. До явного сброса пин-кода, он не будет запрашиваться у пользователя, и будет использован закэшированный.

Михаил Курский
Руководитель отдела разработки прикладного ПО Rutoken, Компания "Актив"

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

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

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

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

Михаил Курский
Руководитель отдела разработки прикладного ПО Rutoken, Компания "Актив"

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

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

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

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

Михаил Курский
Руководитель отдела разработки прикладного ПО Rutoken, Компания "Актив"

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" - через букву К