Некооректная работа функций rtPKCS11.dll
У меня возникла проблема с библиотекой rtPKCS11.dll в новых версиях ruToken 2.85, 2.86 (в старых - 2.25, ее не было).
Суть проблемы в том что функция CK_C_Sign работает нестабильно. Например, запрос длинны буфера может возвращать 0, а может корректное значение, при одних и тех же входных параметрах.
Проблема судя по всему связана с тем, что вы запоминаете ссылку на переданные в функцию CK_C_SignInit параметры, вместо того чтобы их полностью скопировать к себе.
Вот простой пример, как можно получить ошибку:
....
Mech.mechanism := CKM_RSA_PKCS;
LastRV := CK_C_SignInit(hSession, @Mech, Obj.FHandle);
...
Mech.mechanism := 0;
LastRV := CK_C_Sign(hSession, pData, ulDataLen, nil, @pulSignatureLen);
Т.е. если между вызовами CK_C_SignInit и CK_C_Sign я очищу параметры инициализации (в частности mechanism), то CK_C_Sign сработает некорректно.