Parallel brute force: Difference between revisions

Content added Content deleted
Line 756: Line 756:
<lang haskell>import Control.Concurrent (setNumCapabilities)
<lang haskell>import Control.Concurrent (setNumCapabilities)
import Crypto.Hash (hashWith, SHA256 (..), Digest)
import Crypto.Hash (hashWith, SHA256 (..), Digest)
import Control.Monad (replicateM, join)
import Control.Monad (replicateM, join, (>=>))
import Control.Monad.Par (runPar, get, spawnP)
import Control.Monad.Par (runPar, get, spawnP)
import Data.ByteString (pack)
import Data.ByteString (pack)
Line 770: Line 770:


bruteForce :: Int -> [(String, String)]
bruteForce :: Int -> [(String, String)]
bruteForce n = runPar $ join <$> (mapM get =<< mapM (spawnP . foldr findMatch []) chunks)
bruteForce n = runPar $ join <$>
(mapM (spawnP . foldr findMatch []) >=> mapM get) chunks
where
where
chunks = chunksOf (26^5 `div` n) $ replicateM 5 [97..122]
chunks = chunksOf (26^5 `div` n) $ replicateM 5 [97..122]