LINUX.ORG.RU

История изменений

Исправление 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). Не факт, что сильно ускорит, но попытаться можно.