История изменений
Исправление hateyoufeel, (текущая версия) :
А как можно сделать xor блоками? Я знаю только про функцию Word8 -> Word8 -> Word8, а встроенной для блоков не знаю,
Встроенной и нет, но есть из пакета largeword. Word256
оттуда – это похоже на то, что ты хочешь.
https://hackage.haskell.org/package/largeword-1.2.5/docs/Data-LargeWord.html
Навскидку, алгоритм у тебя примерно такой вырисовывается: считываешь из файлы блок данных (Vector Word256), делаешь над ним xor, пишешь в другой файл, повторяешь пока данные не кончатся. Размер вектора меняй по вкусу, пока не подберёшь оптимальную производительность. Я бы начал с размера сектора на диске (4kb, т.е. 32 x Word256). В принципе, можешь и без pipes/conduit это сделать. Должно быть не слишком сложно.
В качестве бонуса, когда сделаешь всё выше, можешь попробовать параллельную работу с элементами вектора приделать через parallel (https://hackage.haskell.org/package/parallel). Не факт, что сильно ускорит, но попытаться можно.
P.S. есть ещё пакет Crypto с реализацией AES, и там аналогично LargeWord используется. Можешь туда в код подсмотреть.
Исправление hateyoufeel, :
А как можно сделать xor блоками? Я знаю только про функцию Word8 -> Word8 -> Word8, а встроенной для блоков не знаю,
Встроенной и нет, но есть из пакета largeword. Word256
оттуда – это похоже на то, что ты хочешь.
https://hackage.haskell.org/package/largeword-1.2.5/docs/Data-LargeWord.html
Навскидку, алгоритм у тебя примерно такой вырисовывается: считываешь из файлы блок данных (Vector Word256), делаешь над ним xor, пишешь в другой файл, повторяешь пока данные не кончатся. Размер вектора меняй по вкусу, пока не подберёшь оптимальную производительность. Я бы начал с размера сектора на диске (4kb, т.е. 32 x Word256). В принципе, можешь и без pipes/conduit это сделать. Должно быть не слишком сложно.
В качестве бонуса, когда сделаешь всё выше, можешь попробовать параллельную работу с элементами вектора приделать через parallel (https://hackage.haskell.org/package/parallel). Не факт, что сильно ускорит, но попытаться можно.
Исправление hateyoufeel, :
А как можно сделать xor блоками? Я знаю только про функцию Word8 -> Word8 -> Word8, а встроенной для блоков не знаю,
Встроенной и нет, но есть из пакета Crypto. Word256
оттуда – это похоже на то, что ты хочешь.
https://hackage.haskell.org/package/Crypto-4.2.5.1/docs/Data-LargeWord.html
Навскидку, алгоритм у тебя примерно такой вырисовывается: считываешь из файлы блок данных (Vector Word256), делаешь над ним xor, пишешь в другой файл, повторяешь пока данные не кончатся. Размер вектора меняй по вкусу, пока не подберёшь оптимальную производительность. Я бы начал с размера сектора на диске (4kb, т.е. 32 x Word256). В принципе, можешь и без pipes/conduit это сделать. Должно быть не слишком сложно.
В качестве бонуса, когда сделаешь всё выше, можешь попробовать параллельную работу с элементами вектора приделать через parallel (https://hackage.haskell.org/package/parallel). Не факт, что сильно ускорит, но попытаться можно.
Исходная версия hateyoufeel, :
А как можно сделать xor блоками? Я знаю только про функцию Word8 -> Word8 -> Word8, а встроенной для блоков не знаю,
Встроенной и нет, но есть из пакета Crypto. Word256
оттуда – это похоже на то, что ты хочешь.
https://hackage.haskell.org/package/Crypto-4.2.5.1/docs/Data-LargeWord.html
Навскидку, алгоритм у тебя примерно такой вырисовывается: считываешь из файлы блок данных (Vector Word256), делаешь над ним xor, пишешь в другой файл, повторяешь пока данные не кончатся. Размер вектора меняй по вкусу, пока не подберёшь оптимальную производительность. Я бы начал с размера сектора на диске (4kb). В принципе, можешь и без pipes/conduit это сделать. Должно быть не слишком сложно.
В качестве бонуса, когда сделаешь всё выше, можешь попробовать параллельную работу с элементами вектора приделать через parallel (https://hackage.haskell.org/package/parallel). Не факт, что сильно ускорит, но попытаться можно.