Скорость работы плагина для браузера
Добрый день. Я занимался тестированием скорости работы РуТокен 2.0 ЭЦП и в своей программе получил следующие результаты:
Инициализация библиотеки: 2 ms
C_GetSlotList: 0 ms
C_OpenSession: 305 ms
C_Login: 38 ms
C_GetTokenInfo: 64 ms
C_GetMechanismList: 26 ms
C_FindObjects: 160 ms (CKO_PRIVATE_KEY)
C_Digest: 685 ms (length = 63)
C_Sign: 323 ms
C_Digest: 907 ms (length = 126)
C_Sign: 325 ms
C_Digest: 1124 ms (length = 189)
C_Sign: 327 ms
После этого я использовал библиотеку для анализа librtpkcs11-spy.so.2.0.0 (отдельное спасибо за неё). И в процессе подписи документа на одном из проектов я получил следующий набор запросов к токену:
{0x16B1,0x16B1}: 0: C_GetFunctionList
{0x16B1,0x16B1}: 1: C_Initialize
{0x16B1,0x16B1}: 2: C_EX_GetFunctionListExtended
{0x16B1,0x16B1}: 3: C_GetSlotList
{0x16B1,0x16B1}: 4: C_GetSlotList
{0x16B1,0x16B1}: 5: C_GetSlotInfo
{0x16B1,0x16B1}: 6: C_GetSlotList
{0x16B1,0x16B1}: 7: C_GetSlotList
{0x16B1,0x16B1}: 8: C_GetSlotInfo
{0x16B1,0x16B1}: 9: C_EX_SlotManage
{0x16B1,0x16B1}: 10: C_OpenSession
{0x16B1,0x16B1}: 11: C_GetTokenInfo
{0x16B1,0x16B1}: 12: C_EX_GetTokenInfoExtended
{0x16B1,0x16B1}: 13: C_GetMechanismList
{0x16B1,0x16B1}: 14: C_GetMechanismList
{0x16B1,0x16B1}: 15: C_GetTokenInfo
{0x16B1,0x16B1}: 16: C_EX_GetTokenInfoExtended
{0x16B1,0x16B1}: 17: C_FindObjectsInit
{0x16B1,0x16B1}: 18: C_FindObjects
{0x16B1,0x16B1}: 19: C_FindObjectsFinal
{0x16B1,0x16B1}: 20: C_GetAttributeValue
{0x16B1,0x16B1}: 21: C_GetAttributeValue
{0x16B1,0x16B1}: 22: C_FindObjectsInit
{0x16B1,0x16B1}: 23: C_FindObjects
{0x16B1,0x16B1}: 24: C_FindObjectsFinal
{0x16B1,0x16B1}: 25: C_GetAttributeValue
{0x16B1,0x16B1}: 26: C_GetAttributeValue
{0x16B1,0x16B1}: 27: C_GetAttributeValue
{0x16B1,0x16B1}: 28: C_GetAttributeValue
{0x16B1,0x16B1}: 29: C_GetSessionInfo
{0x16B1,0x16B1}: 30: C_GetTokenInfo
{0x16B1,0x16B1}: 31: C_EX_GetTokenInfoExtended
{0x16B1,0x16B1}: 32: C_GetSessionInfo
{0x16B1,0x16B1}: 33: C_GetTokenInfo
{0x16B1,0x16B1}: 34: C_EX_GetTokenInfoExtended
{0x16B1,0x16B1}: 35: C_GetSessionInfo
{0x16B1,0x16B1}: 36: C_GetTokenInfo
{0x16B1,0x16B1}: 37: C_EX_GetTokenInfoExtended
{0x16B1,0x16B1}: 38: C_FindObjectsInit
{0x16B1,0x16B1}: 39: C_FindObjects
{0x16B1,0x16B1}: 40: C_FindObjectsFinal
{0x16B1,0x16B1}: 41: C_GetAttributeValue
{0x16B1,0x16B1}: 42: C_GetAttributeValue
{0x16B1,0x16B1}: 43: C_FindObjectsInit
{0x16B1,0x16B1}: 44: C_FindObjects
{0x16B1,0x16B1}: 45: C_FindObjectsFinal
{0x16B1,0x16B1}: 46: C_GetAttributeValue
{0x16B1,0x16B1}: 47: C_GetAttributeValue
{0x16B1,0x16B1}: 48: C_GetAttributeValue
{0x16B1,0x16B1}: 49: C_GetAttributeValue
{0x16B1,0x16B1}: 50: C_FindObjectsInit
{0x16B1,0x16B1}: 51: C_FindObjects
{0x16B1,0x16B1}: 52: C_FindObjectsFinal
{0x16B1,0x16B1}: 53: C_FindObjectsInit
{0x16B1,0x16B1}: 54: C_FindObjects
{0x16B1,0x16B1}: 55: C_FindObjectsFinal
{0x16B1,0x16B1}: 56: C_GetAttributeValue
{0x16B1,0x16B1}: 57: C_GetAttributeValue
{0x16B1,0x16B1}: 58: C_GetSessionInfo
{0x16B1,0x16B1}: 59: C_GetTokenInfo
{0x16B1,0x16B1}: 60: C_EX_GetTokenInfoExtended
{0x16B1,0x16B1}: 61: C_Logout
{0x16B1,0x16B1}: 62: C_Login
{0x16B1,0x16B1}: 63: C_FindObjectsInit
{0x16B1,0x16B1}: 64: C_FindObjects
{0x16B1,0x16B1}: 65: C_FindObjectsFinal
{0x16B1,0x16B1}: 66: C_SignInit
{0x16B1,0x16B1}: 67: C_Sign
{0x16B1,0x16B1}: 68: C_Sign
{0x16B1,0x16B1}: 69: C_CloseSession
Моя цель была определить с какой максимальной скоростью можно осуществлять подписи документов. Моя программа показала около 500 мс инициализации и 325 мс подписи хеша. Итого 825 мс.
Реальная же картина работы плагина в браузере показывает большое количество повторяющихся запросов, по итогу дающих вот такой печальный результат - 6 секунд времени на 1 подпись хеша:
0: C_GetFunctionList: 15:02:32.590
<много-премного всего>
69: C_CloseSession: 15:02:38.398
Хотелось бы узнать, это нормально для плагина? Можно ли как-нибудь ускорить работу плагина без вызова лишних запросов?
Открыл сессию - Залогинился - Нашел ключ - Подписал