RutokenWeb+rtPKCS11ECP.dll(v.1.0.41.0)+C_DigestUpdate = bug

CK_RV ckResult;
CK_SESSION_HANDLE hSession;

C_Initialize(NULL_PTR);

CK_ULONG ulSlotCount = 0;
ckResult = C_GetSlotList( CK_TRUE, NULL_PTR, &ulSlotCount );

std::vector<CK_SLOT_ID> ConnectedSlots( ulSlotCount, CK_SLOT_ID() );
ckResult = C_GetSlotList( CK_TRUE, &ConnectedSlots[0], &ulSlotCount );

CK_SLOT_ID slotID = ConnectedSlots[0];

ckResult = C_OpenSession( slotID, CKF_SERIAL_SESSION|CKF_RW_SESSION, NULL_PTR, NULL_PTR, &hSession );

ckResult = C_Login( hSession, CKU_USER, ((CK_UTF8CHAR_PTR)"111111"), 6 );

CK_MECHANISM ckmEncMech = {CKM_SHA_1, NULL_PTR , 0};

ckResult = C_DigestInit( hSession, &ckmEncMech );

int k=0;
ckResult = C_DigestUpdate( hSession, (CK_BYTE_PTR)&k, sizeof(k) );

в момент вызова C_DigestUpdate получаем исключение 0xC0000005 (Access violation) (по стеку вызова - внутри CryptGetHashParam).

могу выслать проект для студии с вышеуказанным кодом.

Re: RutokenWeb+rtPKCS11ECP.dll(v.1.0.41.0)+C_DigestUpdate = bug

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

Функции C_DigestUpdate, а также C_SignUpdate, C_VerifyUpdate, C_EncryptUpdate и C_DecryptUpdate не поддерживаются.

Используйте, пожалуйста, C_Digest, C_Sign, C_Verify, C_Encrypt и C_Decrypt.

Re: RutokenWeb+rtPKCS11ECP.dll(v.1.0.41.0)+C_DigestUpdate = bug

Кирилл Мещеряков пишет:

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

Функции C_DigestUpdate, а также C_SignUpdate, C_VerifyUpdate, C_EncryptUpdate и C_DecryptUpdate не поддерживаются.

Используйте, пожалуйста, C_Digest, C_Sign, C_Verify, C_Encrypt и C_Decrypt.

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

тем не менее (ИМХО):
а) не должно валится с исключением;
б) должно выдавать CKR_FUNCTION_NOT_SUPPORTED;

В любом случае спасибо за ответ.

P.S. а хэширование пришлось переделать на CryptoAPI...

Re: RutokenWeb+rtPKCS11ECP.dll(v.1.0.41.0)+C_DigestUpdate = bug

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

Насколько большие файлы вы хотите хешировать?
Функция C_Digest может принимать довольно большой буфер на вход.

Re: RutokenWeb+rtPKCS11ECP.dll(v.1.0.41.0)+C_DigestUpdate = bug

Кирилл Мещеряков пишет:

Насколько большие файлы вы хотите хешировать?
Функция C_Digest может принимать довольно большой буфер на вход.

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

Re: RutokenWeb+rtPKCS11ECP.dll(v.1.0.41.0)+C_DigestUpdate = bug

Лучше, конечно, запускать такие вещи с недетерминированным временем выполнения не в цикле, а в отдельном потоке..

Re: RutokenWeb+rtPKCS11ECP.dll(v.1.0.41.0)+C_DigestUpdate = bug

Кирилл Мещеряков пишет:

Лучше, конечно, запускать такие вещи с недетерминированным временем выполнения не в цикле, а в отдельном потоке..

дело не в цикле, а в том что не существует возможности загрузить, например, файл в 4 гигабайта в память в 32 разрядном приложении, и как следствие вычислить хэш за одну итерацию...

а насчет отдельной нити - именно так и сделано :)

кстати, вы мне подкинули интересную идею на будущее - можно же воспользоваться memory mapped file (хотя это конечно же не решает проблемы в 2гб в x86).

Re: RutokenWeb+rtPKCS11ECP.dll(v.1.0.41.0)+C_DigestUpdate = bug

хешировать гигабайты - это сильно! :)

напишите нам пожалуйста на почту hotline, мы Вам вышлем исправленную версию библиотеки, где изложенная вами проблема должна быть уже поправлена.

Re: RutokenWeb+rtPKCS11ECP.dll(v.1.0.41.0)+C_DigestUpdate = bug

Кирилл Мещеряков пишет:

хешировать гигабайты - это сильно! :)

согласен, но не буду же я ставить пользователю ограничение: 1 мегабайт и ни-ни больше :)

Кирилл Мещеряков пишет:

напишите нам пожалуйста на почту hotline, мы Вам вышлем исправленную версию библиотеки, где изложенная вами проблема должна быть уже поправлена.

уже неактуально, т.к. перевел хэширование на CryptoAPI. Но в любом случае спасибо за содействие.

Re: RutokenWeb+rtPKCS11ECP.dll(v.1.0.41.0)+C_DigestUpdate = bug

929121 пишет:
Кирилл Мещеряков пишет:

хешировать гигабайты - это сильно! :)
согласен, но не буду же я ставить пользователю ограничение: 1 мегабайт и ни-ни больше :)
Гигабайты и мегабайты - большая разница.

Врядли кто-то станет хешировать более чем сотню мегабайт за раз.

929121 пишет:
Кирилл Мещеряков пишет:

напишите нам пожалуйста на почту hotline, мы Вам вышлем исправленную версию библиотеки, где изложенная вами проблема должна быть уже поправлена.

уже неактуально, т.к. перевел хэширование на CryptoAPI. Но в любом случае спасибо за содействие.

CryptoAPI не кроссплатформенно.

Re: RutokenWeb+rtPKCS11ECP.dll(v.1.0.41.0)+C_DigestUpdate = bug

Кирилл Мещеряков пишет:

Врядли кто-то станет хешировать более чем сотню мегабайт за раз.

возможно так оно и есть, но я не готов грузить файлы более 1 мегабайта в память целиком. Видимо дают себя знать "640kb которых хватит всем"...

Кирилл Мещеряков пишет:

CryptoAPI не кроссплатформенно.

хм... А вот это хороший довод! Я совсем забыл об этом... Соответственно вопрос, Mac версия подвержена подобным проблемам?

Re: RutokenWeb+rtPKCS11ECP.dll(v.1.0.41.0)+C_DigestUpdate = bug

929121 пишет:
Кирилл Мещеряков пишет:

Врядли кто-то станет хешировать более чем сотню мегабайт за раз.

возможно так оно и есть, но я не готов грузить файлы более 1 мегабайта в память целиком. Видимо дают себя знать "640kb которых хватит всем"...

Разумно, именно поэтому лучше все-таки попробуйте исправленную версию.

929121 пишет:
Кирилл Мещеряков пишет:

CryptoAPI не кроссплатформенно.

хм... А вот это хороший довод! Я совсем забыл об этом... Соответственно вопрос, Mac версия подвержена подобным проблемам?

Не должна.

Re: RutokenWeb+rtPKCS11ECP.dll(v.1.0.41.0)+C_DigestUpdate = bug

Кирилл Мещеряков пишет:

Разумно, именно поэтому лучше все-таки попробуйте исправленную версию.

Да, убедили. Куда писать? Что писать?

Re: RutokenWeb+rtPKCS11ECP.dll(v.1.0.41.0)+C_DigestUpdate = bug

пишите на hotline (собака) rutoken.ru,
скажите что Вам требуется новая библиотека

Re: RutokenWeb+rtPKCS11ECP.dll(v.1.0.41.0)+C_DigestUpdate = bug

Добрый день.
Совсем забыл отписаться по поводу работы новой версии dll, но лучше поздно чем никогда.

В новой версии dll обнаружилась одна новая бага которой не было в предыдущих версиях, проблема в том что при инициировании генерации нового ключа на токене функция генерации возвращает управление сразу, не дожидаясь завершения генерации, соответственно все последующие функции завершаются с ошибками т.к. токен занят (а генерация ключа может длиться до нескольких минут, в зависимости от размера)