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.
- Подумайте, почему потоковый шифр в стандартной библиотеке имеет интерфейс cipher.Stream, а не
io.Reader
как у нас.
- Для отладки вы можете использовать
iotest.NewReadLogger
и iotest.NewWriteLogger
из пакета iotest.