#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
Ответ №1:
Я вижу там две проблемы:
-
Вы используете текущую версию для разработки Pkcs11Interop (master branch), которая содержит несколько критических изменений API и сильно изменится, прежде чем станет стабильной версией.
-
Вы напрямую ссылаетесь на типы из
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. Упс. Это означает довольно много времени 🙂