.net core порядок подключения библиотек под Linux

Здравствуйте! Я разрабатываю сервис для подписания с помощью ЭЦП на .net core (C#), который будет хоститься на Linux машине. Подскажите в каком порядке мне нужно подключить библиотеки.
Как я понимаю мне нужны нативные библиотеки с расширением .so (в SDK есть примеры, но там на C и PHP ).

Добрый день!

Каким образом клиенты будут передавать ключи на Ваш сервис?

Нужно сделать 2 варианта
1 вариант. Клиент передаст мне уже готовую подпись в формате CMS. Мне нужно ее провалидировать.
2 вариант. Сгенерировать подпись с помощью своего ключа.

Вся проблема в том, что мой сервис будет хостится на Linux Ubuntu в котором у меня мало опыта и я не знаю как подключить библиотеки к проекту.

Для того, чтобы клиент передал Вам CMS-подпись, он ее должен сначала сформировать.
Вот парочка способов:

  1. он формирует CMS на отдельных сервисах(например ezsigner.kz), затем передает сформированный CMS к вам на сервис и там уже вы осуществляете проверку.
  2. клиент осуществляет подпись CMS на фронте вашего сервиса. Т.е. подгружает на фронт свой ключ. А чтобы на фронт подтянуть ключ, необходимо использовать NCALayer.

На бэке(C#) Вы уже осуществить валидацию документа. Для этого уже надо подтягивать С-библиотеку libkalkancryptwr-64.so.
А по реализации на Ubuntu - мы не помогаем. Будут проблемы в реализации проверки/подписи/авторизации можете смело обращаться :slight_smile:

Это уже как пожелаете. Можете сделать и на фронте, и на бэке…
Т.е. либо с помощью NCALayer или с помощью библиотеки libkalkancryptwr-64.so.

Как можно решить проблему, чтобы параметр errorString выдавал какое либо сообщение об ошибке?
KC_GetLastErrorString(char *errorString, int *bufSize) , возвращает код ‘0x08F00005’ что в документации трактуется как ‘Размер буфера слишком мал’ параметр errorString всегда null , но параметр bufSize выдает число 185.

моя реализация этого метода
[DllImport(“kalkancryptwr-64”,CharSet=CharSet.Auto, CallingConvention=CallingConvention.StdCall)]
public static extern ulong KC_GetLastErrorString(out string errorString,out int bufSize);

Необходимо указать размер bufSize.
Если Вы посмотрите пример на С - test.cpp, то в нем как раз есть вызов метода KC_GetLastErrorString(&err_str[0], &errLen) и устанавливается максимальный размер errLen. В примере указан 65534, на самом же деле можно указать и 1024… Вполне должно быть достаточно.

Спасибо, за ответ!
1.Нужно указать размер bufSize.

2.В библиотеке kalkancryptwr-64 определен метод: unsigned long(*KC_GetLastErrorString)(char *errorString, int *bufSize);
И так как я пишу на C# нужно использовать byte так как он 8 разрядный, потому что char в kalkancryptwr-64 также 8 разрядный, чтобы совместить unmanaged code and managed code.
[DllImport(“kalkancryptwr-64”,CharSet=CharSet.Ansi, CallingConvention=CallingConvention.StdCall)]
public static extern ulong KC_GetLastErrorString( ref byte errorString,ref int bufSize);