Имеется С-библиотека для RSA_REF. Небольшую часть сделать с Go

5 000 руб. за проект
30 мая 2020, 07:25 • 2 отклика • 43 просмотра
Имеется библиотека, написанная на С с незначительными вкраплениями С++.

Исходники этой библиотеки
https://github.com/lumpov/cyberplat

Интересует реализация крайне небольшой части функционала этой библиотеки.

В API библиотеки описана функция Crypt_Sign.

Исходная написанная на С библиотека реализует работу с несколькими криптосредствами (engine). Интересует реализация только одного-единственного - eng = IPRIV_ENGINE_RSAREF = 0.

Предположительно, криптографические алгоритмы RSA_REF - это ранняя реализация RSA с короткими ключами. Но нет уверенности, исполнителю следует выяснить что там в реальности за криптография реализована.

Необходимо реализовать создание подписи (то, чем занимается Crypt_Sign).

При этом не нужно формировать пакет с данными (функция Crypt_Sign кроме создания самой подписи дополнительно оформляет выходные данные добавляя служебный заголовок и строки BEGIN END и т.п.). Не нужно также реализовывать разбор формата пакета данных в формате исходной библиотеки. Интересует только формирование подписи, то есть того, что функция Crypt_Sign отдает в выходных данных между строк BEGIN SIGNATURE и END SIGNATURE.

Интересует реализация алгоритма создания только самой подписи.

Важно! Категорически не нужно реализовывать криптографические алгоритмы самостоятельно.

Для решения задачи следует использовать только уже существующие готовые криптографические библиотеки.

Требования к этим библиотеками - реализация на чистом Go, без биндингов к С, без использования cgo; допускается использование в этих библиотеках встроенного в Go ассемблера. Ваш собственный код должен быть только на чистом Go.

Фактически задача сводится:
  1. К поиску пакета на чистом Go, реализующего алгоритм эквивалентный IPRIV_ENGINE_RSAREF
  2. И написанию кода для вызова функций из найденной реализации, для демонстрации того, что пакет выдает верный результат.

Возможно даже, что это самый обычный алгоритм RSA и можно будет воспользоваться стандартным пакетом Go crypto/rsa, вызвав функции из него с какими-то нестандартными параметрами, соответствующими RSA_REF.

Решение должно компилироваться в Win64, Linux64 с использованием чистого Go, без биндингов, без cgo.

В упомянутой библиотеке имеются тесты (реализованные на разных языках программирования).
Формируемая вами подпись должна соответствовать формируемой тестами подписи.

Обратите внимание, что тесты реализуют не только формирование подписи, а еще и дополнительно оформляют пакет данных в неком формате, добавляя некоторую информацию. От вашего кода этого не требуется, от вашего кода требуется только создания непосредственной самой подписи.

Прошу понять, что множество людей откликаются даже не прочитав задачу, поэтому, пожалуйста включите в свой отзыв текст "лошади существуют" просто для проверки что вы прочитали задачу.

Проверяться будет только соответствие вашей подписи, тому, что формируется между BEGIN SIGNATURE и END SIGNATURE в упомянутых выше тестах.

Предполагается решение в течение недели. Через неделю при неполучении решения в оплате будет отказано и задача будет перевыставлена для выбора другого исполнителя.