shad-go/blowfish
2023-10-03 20:25:41 +03:00
..
blowfish.go WIP 2023-02-22 17:02:34 +04:00
blowfish_test.go update mod && fix links 2023-10-03 20:25:41 +03:00
README.md solution with pkg-config and update readme 2022-04-28 02:57:39 +03:00

blowfish

Реализуйте cgo wrapper для шифра blowfish из библиотеки openssl.

  • Вам нужно использовать две функции:

    // BF_set_key инициализирует BF_KEY
    void BF_set_key(BF_KEY *key, int len, const unsigned char *data);
    
    // BF_ecb_encrypt шифрует или дешифрует блок размером в 8 байт.
    void BF_ecb_encrypt(const unsigned char *in, unsigned char *out, BF_KEY *key, int enc);
    
  • Реализация не должна делать динамического выделения памяти.

  • Для сборки этой задачи, на вашей системе должен быть установлен dev пакет openssl. На ubuntu установить пакет можно командой sudo apt-get install libssl-dev. Сборка под другие платформы не гарантируется.

Установка openssl на Mac OS через Homebrew
$ brew install openssl@3

После установки Homebrew предупредит вас о том, что для корректной работы библиотеки может понадобиться выставить несколько переменных окружения, нас интересует последняя:
$ export PKG_CONFIG_PATH="/usr/local/opt/openssl@3/lib/pkgconfig"

Важно: на вашем компьютере путь может быть другим, а именно, начинаться с префикса /opt/homebrew вместо /usr/local. Если у вас уже стоит openssl, для правильного экспорта переменной вы можете узнать этот префикс через команду:
$ brew --prefix

Вы также можете выставить переменную окружения в самом GoLand: Run -> Edit Configurations -> Environment:
PKG_CONFIG_PATH="/usr/local/opt/openssl@3/lib/pkgconfig"

Disclaimer: Эта задача дана в учебных целях. Помните, что (1) нельзя реализовывать собственную криптографию, (2) шифр blowfish устарел, (3) в стандартной библиотеке есть pure go реализация для большинства криптографических примитивов.

Ссылки

  1. openssl
  2. cgo