shad-go/blowfish
2022-04-21 21:48:12 +03:00
..
blowfish.go go fix old build tags. 2022-03-15 23:49:56 +03:00
blowfish_test.go Enable goimports. 2022-04-17 18:28:33 +03:00
README.md [blowfish] Fix typo. 2022-04-21 21:48:12 +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. Сборка под другие платформы не гарантируется. На macOS должна сработать следующая последовательность действий:

Установка openssl через Homebrew

$ brew install openssl

Далее нужно указать путь до библиотеки одним из способов:

1. Установка переменной окружения через GoLand: Run -> Edit Configurations -> Environment:
CGO_LDFLAGS=-L/usr/local/opt/openssl/lib

2. Установка переменной окружения через консоль и запуск тестов:
$ CGO_LDFLAGS=-L/usr/local/opt/openssl/lib go test -v ./blowfish/…

3. Добавить флаг прямо в коде:
// #cgo LDFLAGS: -lcrypto -L/usr/local/opt/openssl/lib

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

Ссылки

  1. openssl
  2. cgo