shad-go/otp/README.md

2.1 KiB
Raw Permalink Blame History

otp

Напишите код, который реализует схему шифрования stream cipher.

Потоковый шифр обрабатывает поток по одному байту за раз. Каждый байт входного потока xor-ится с байтом из prng и записывается в выходной поток.

Вам нужно реализовать две версии api.

func NewReader(r io.Reader, prng io.Reader) io.Reader
func NewWriter(w io.Writer, prng io.Reader) io.Writer
  • NewReader принимает входной поток r и генератор случайных чисел prng. NewReader возвращает io.Reader, который читает поток из r и расшифровывает его с помощью prng.
  • NewWriter принимает выходной поток w и генератор случайных чисел prng. NewWriter возвращает io.Writer, который шифрует поток с помощью prng и пишет его в w.

Вы можете считать, что prng никогда не может вернуть ошибку.

Замечания

  • Прочитайте контракт io.Reader и io.Writer в документации.
  • То что шифр работает с одним байтом, не значит что нужно передавать в Read() слайс размера 1.
  • Функция NewReader не должна ничего читать из r и prgn.
  • Подумайте, почему потоковый шифр в стандартной библиотеке имеет интерфейс cipher.Stream, а не io.Reader как у нас.
  • Для отладки вы можете использовать iotest.NewReadLogger и iotest.NewWriteLogger из пакета iotest.