Softhsm2 с ошибкой pkcs11interop. Значение было либо слишком большим, либо слишком маленьким для UInt32

#c# #.net-4.5 #pkcs#11 #pkcs11interop #softhsm

#c# #.net-4.5 #pkcs #11 #pkcs11interop #softhsm

Вопрос:

У меня есть следующий код для тестирования softhsm2 через библиотеку pkcs11interop

 using Net.Pkcs11Interop.Common;
using Net.Pkcs11Interop.HighLevelAPI;
using Net.Pkcs11Interop.HighLevelAPI80;
using System;
using System.Collections.Generic;
namespace ExportTest
{
    public class Softhsmtest
    {
        public static Pkcs11InteropFactories Factories = new Pkcs11InteropFactories();
        public static void Test()
        {

            using (Pkcs11 pkcs11 = new Pkcs11(Factories, @"C:SoftHSM2libsofthsm2.dll",AppType.MultiThreaded))
            {
                ISlot slot = pkcs11.GetSlotList(SlotsType.WithTokenPresent)[0];
                using (ISession session = slot.OpenSession(SessionType.ReadWrite))
                {
                    session.Login(CKU.CKU_USER, "1111");                    
                    session.Logout();
                }
            }
        }
    }
}
  

Ошибка отслеживания стека, которую я получаю, является

    at System.Convert.ToUInt32(UInt64 value)
   at Net.Pkcs11Interop.Common.ConvertUtils.UInt64ToCKR(UInt64 value)
   at Net.Pkcs11Interop.LowLevelAPI80.Delegates.InitializeWithGetFunctionList(IntPtr libraryHandle)
   at Net.Pkcs11Interop.LowLevelAPI80.Delegates..ctor(IntPtr libraryHandle, Boolean useGetFunctionList)
   at Net.Pkcs11Interop.LowLevelAPI80.Pkcs11..ctor(String libraryPath)
   at Net.Pkcs11Interop.HighLevelAPI80.Pkcs11..ctor(Pkcs11InteropFactories factories, String libraryPath, AppType appType)
   at ExportTest.Softhsmtest.Test() in C:UserskashahidDownloads
  

Pkcs11Interop-masterPkcs11Interop-mastersrc PkcsTestWindowsAppClass1.cs: строка 15
в PkcsTestWindowsApp.Form1.button1_Click (отправитель объекта, EventArgs e) в C:UserskashahidDownloadsPkcs11Interop-masterPkcs11Interop-mastersrcPkcsTestWindowsAppForm1.cs:line 27
в системе.Windows.Формы.Элемент управления.OnClick(EventArgs e)
в системе.Windows.Формы.Кнопка.OnClick(EventArgs e)
в системе.Windows.Формы.Кнопка.OnMouseUp(MouseEventArgs mevent)
в системе.Windows.Формы.Элемент управления.WmMouseUp (сообщение и m, кнопка MouseButtons, щелчки Int32)
в системе.Windows.Формы.Элемент управления.WndProc(сообщение и m)
в системе.Windows.Формы.База кнопок.WndProc(сообщение и m)
в системе.Windows.Формы.Кнопка.WndProc(сообщение и m)
в системе.Windows.Формы.Элемент управления.ControlNativeWindow.onMessage (сообщение и m)
в системе.Windows.Формы.Элемент управления.ControlNativeWindow.WndProc(сообщение и m)
в системе.Windows.Формы.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
в системе.Windows.Формы.Небезопасные методы.DispatchMessageW(сообщение об ошибке amp; msg)
в системе.Windows.Формы.Приложения.ComponentManager.Системы.Windows.Формы.Небезопасные методы.IMsoComponentManager.FPushMessageLoop(IntPtr dwComponentID, Int32 reason, Int32 pvLoopData)
в системе.Windows.Формы.Приложения.ThreadContext.RunMessageLoopInner (причина Int32, контекст ApplicationContext)
в системе.Windows.Формы.Приложения.ThreadContext.RunMessageLoop (причина Int32, контекст ApplicationContext)
в системе.Windows.Формы.Application.Run(форма MainForm)
в PkcsTestWindowsApp.Program.Main() в C:UserskashahidDownloadsPkcs11Interop-masterPkcs11Interop-mastersrcPkcsTestWindowsAppProgram.cs:line 19

https://github.com/Pkcs11Interop/Pkcs11Interop

Ответ №1:

Я вижу там две проблемы:

  1. Вы используете текущую версию для разработки Pkcs11Interop (master branch), которая содержит несколько критических изменений API и сильно изменится, прежде чем станет стабильной версией.

  2. Вы напрямую ссылаетесь на типы из Net.Pkcs11Interop.HighLevelAPI80 пространства имен, которые должны использоваться только в системах Unix.

Решение:

Вам следует использовать текущую стабильную версию — Pkcs11Interop 4.1.0 — со следующим кодом:

 using Net.Pkcs11Interop.Common;
using Net.Pkcs11Interop.HighLevelAPI;

namespace ExportTest
{
    public class Softhsmtest
    {
        public static void Test()
        {
            using (Pkcs11 pkcs11 = new Pkcs11(@"C:SoftHSM2libsofthsm2.dll", AppType.MultiThreaded))
            {
                Slot slot = pkcs11.GetSlotList(SlotsType.WithTokenPresent)[0];
                using (Session session = slot.OpenSession(SessionType.ReadWrite))
                {
                    session.Login(CKU.CKU_USER, "1111");
                    session.Logout();
                }
            }
        }
    }
}
  

Комментарии:

1. Спасибо Ярославу. Есть идеи, сколько времени требуется для объединения текущей версии разработки в master?

2. По крайней мере, несколько месяцев.

3. Упс. Это означает довольно много времени 🙂