.. | ||
cipher.go | ||
cipher_test.go | ||
README.md |
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.