From 823ebff934cf2e23afae199c24cc599983209438 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Fri, 23 Sep 2016 17:42:45 -0400 Subject: Added --chaff-max-delay option for slower chaffing. This commit was sponsored by Jeff Goeke-Smith on Patreon. --- Storage.hs | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) (limited to 'Storage.hs') diff --git a/Storage.hs b/Storage.hs index b5d847f..b5d07f5 100644 --- a/Storage.hs +++ b/Storage.hs @@ -10,6 +10,7 @@ module Storage (module Storage, module Types.Storage) where import Types import Types.Storage import Types.Server +import Types.Cost import Share import Storage.Local import Storage.Network @@ -22,6 +23,8 @@ import System.IO import System.FilePath import Control.Monad import Crypto.Random +import System.Random +import Control.Concurrent.Thread.Delay import Control.Concurrent.Async import qualified Data.Set as S import Network.Wai.Handler.Warp (Port) @@ -134,8 +137,8 @@ tryUploadQueued d = do processresults (StoreAlreadyExists:rs) c = processresults rs ("Unable to upload a share to a server due to a name conflict.":c) -storeChaff :: HostName -> Port -> IO () -storeChaff hn port = forever $ do +storeChaff :: HostName -> Port -> Maybe Seconds -> IO () +storeChaff hn port delayseconds = forever $ do putStrLn $ "Sending chaff to " ++ hn ++ " (press ctrl-c to stop)" putStrLn "Legend: + = successful upload, ! = upload failure" rng <- (cprgCreate <$> createEntropyPool) :: IO SystemRNG @@ -151,6 +154,7 @@ storeChaff hn port = forever $ do server = networkStorage Nothing $ Server (ServerName hn) Untrusted [ServerAddress hn port] objsize = objectSize defaultTunables * shareOverhead defaultTunables + maxmsdelay = ceiling $ 1000000 * fromMaybe 0 delayseconds go sis rng n = do let (b, rng') = cprgGenerate objsize rng let share = Share 0 (StorableObject b) @@ -161,4 +165,6 @@ storeChaff hn port = forever $ do StoreSuccess -> putStr "+" _ -> putStr "!" hFlush stdout + msdelay <- getStdRandom (randomR (0, maxmsdelay)) + delay msdelay go sis' rng' n -- cgit v1.2.3