1) Необходима реализация на c# механизма распределённой генерации ключей с пороговой схемой K из N (аналогично схеме Шамира) на стандартных эллиптических кривых seсp256k1, но с возможностью выбора других при необходимости, например, Ed25519.
2) Так же необходимо тестовое приложение (в одном или раздельные), демонстрирующее работу протокола в составе мастер-узла и нескольких узлов-участников. Общедоступные данные можно публиковать в БД или на своё усмотрение.
Примерные этапы: 0. Определение общедоступных параметры и порядковых номеров от 1 до N. 1. Создание открытого ключа. 2. Генерация полиномов и раздача теней. 3. Проверка коэффициентов полиномов. 4. Подпись сообщения. 5. Распределенное дешифрование сообщения.
Должно быть продемонстрирована условно два состояния, успешный раунд генерации и не успешный, когда на этапе проверки, после обмена коммитментами, участники проверяют правильность коммитментов других участников и в случае обнаружения несоответствия, участник может быть исключен из процесса. В этом случае раунд генерации должен начаться сначала.
Есть небольшой тестовый проект на C#, который выступает в качестве так называемой обёртки для взаимодействия с другой библиотекой, которая скомпилирована из go (исходники прилагаются).
Выяснилось, что при компиляции dll под windows x64, в библиотеке отсутствуют некоторые экспортируемые функции, что в свою очередь в c# проекте приводит к ожидаемой ошибке такого содержания: Unable to find an entry point named 'cmix_dm_set_router'. При этом, если библиотеку скомпилировать для работы под системами linux или mac и запустить c# проект в них, то проблем не наблюдается, т.е. необходимые функции присутствуют в библиотеке.
Я пробовал компилировать win64 dll из-под linux командой ниже: CGO_ENABLED=1 GOOS=windows GOARCH=amd64 CC=x86_64-w64-mingw32-gcc go build -buildmode=c-shared -o libxxdk-win-x64.dll ./sharedcgo Так же в самой винде (предварительно установив gcc/g++ и тп) командой: go build -buildmode=c-shared -o libxxdk-win-x64.dll ./sharedcgo В обоих случаях получалась dll, в которой не было экспортируемой функции cmix_dm_set_router (и некоторых других, но я указываю именно эту в качестве ориентира), что подтверждала утилита dumpbin /EXPORTS libxxdk-win-x64.dll
Необходимо найти решение, которое добавит "потерянные" функции, и при этом, должна сохранится работоспособность под linux и mac. Это могут быть какие-то хитрые параметры компиляции под винду и другие манипуляции о которых я не знаю, либо внести необходимые изменения в код go или c#.
Код проекта в архиве или по ссылке github.com/NarayanaSupram... В папке sharedcgo собственно go код для компиляции dll. В папке xxdk.NET пример, который должен работать с полученной dll. На картинках: – результат выполнения с ошибкой; – вывод dumpbin для dll скомпиленных под win64 в линукс и под виндой, со списком функций, где отсутствует cmix_dm_set_router и некоторые другие. Так же мог бы предоставить vps с linux при необходимости.