-- Copyright (c) 2010 Jon Slenk. -- this source is released to the public domain. module Main where import Directory import System import Random import Data.Char import qualified Data.ByteString as DBStr import GHC.Word main = do fnames <- getArgs core (head fnames) core fname = do body <- load fname mungeWriteN overwriteCount body fname removeFile fname return () where overwriteCount = 6 -- DoD spec. mungeWriteN 0 body fname = do return () mungeWriteN n body fname = do body' <- mungeBody body write fname body' mungeWriteN (n-1) body fname mungeBody body = do off <- getOffset let glyphs = DBStr.unpack body let body' = DBStr.pack $ munge (fromIntegral off) glyphs return body' where munge :: Word8 -> [Word8] -> [Word8] munge off = map (\g -> g + off) getOffset = do gen <- getStdGen let off = head $ take 1 (randoms gen :: [Int]) return (off+1) load fname = do body <- DBStr.readFile fname return body write fname body = do DBStr.writeFile fname body return ()