23.09.2007 21:50:33Удаленная разблокировка eToken Ответов: 4
Morda
Доброго времени суток, уважаемые...

Вопрос не касается КриптоПро, но, думаю, это актуально для администраторов систем, где используются Aladdin eToken.

Требуется с использованием eToken SDK_3.60 написать программу, которая бы позволяла удаленно разблокировать токен. Для этого в составе SDK имеется специальная функция SAPI_Server_Unblock, которой передаются административный пин-код и последовательность символов, полученная от клиента (если я правильно понял, то нужно использовать ту последовательность, которая генерируется утилитой eToken Properties). На выходе имеем ещё одну последовательность байт, которую следует сообщить клиенту и которую он введет в соответствующее окошко.

Однако не выходит каменный цветок... :( При выполнении следующего кода, и вводе сгенерированной последовательности символов имеем ошибку "Аутентификация выполнена неудачно":


//============================================

typedef CK_RV (*t_SAPI_Server_Unblock)(CK_CHAR_PTR pPin,
CK_ULONG ulPinLen,
CK_VOID_PTR pChallenge,
CK_VOID_PTR pResponse);
t_SAPI_Server_Unblock f_SAPI_Server_Unblock = NULL;

HINSTANCE hLib = LoadLibrary("etsapi.dll");

if (!hLib) leave("Cannot load etsapi.dll");

(FARPROC&)f_SAPI_Server_Unblock = GetProcAddress(hLib, "SAPI_Server_Unblock");
if (!f_SAPI_Server_Unblock) leave("SAPI_Server_Unblock not found");

CK_CHAR SO_Pass[] = {"123456"};
CK_VOID_PTR pChallengeStr;
char * ChallengeStr[] = {"2E0C207017D0AA2D"}; //это последовательность символов, сгенерированная eToken Properties
pChallengeStr = ChallengeStr;
unsigned char pResponseStr[9] = {0};

f_SAPI_Server_Unblock(SO_Pass,
sizeof(SO_Pass),
pChallengeStr,
&pResponseStr);
std::cout << std::hex;
for(size_t i = 0; i < 9; ++i)
{
std::cout << "0x" << (unsigned int)pResponseStr[i] << " ";
}
std::cout << std::endl;


Подскажите, плиз, вариант решения или ткните носом в ошибки в коде, так как С знаю не очень хорошо...
 
Ответы:
24.09.2007 11:40:47Morda
up
24.09.2007 17:08:07Салават
Блин, столкнулся с такой же проблемой, а TMS покупать неохота. Неужели никто не пробовал этот функционал?
24.09.2007 18:12:41Александр
попробуйте задать так:
BYTE ChallengeStr[] = {0x2E, 0x0C, 0x20, 0x70, 0x17, 0xD0, 0xAA, 0x2D };
25.09.2007 0:23:01Morda
Спасибо большое! Работает.