hs-tls/core/Benchmarks/Benchmarks.hs
Vincent Hanquez 4e5ff7f53d Change the way parameters are created.
This is still WIP and this commit is truly horrific. Sadly, it's just
too much effort to do clean commit with this, and it doesn't mix with
experimentation either.
2014-01-25 16:51:51 +00:00

64 lines
2.4 KiB
Haskell

{-# LANGUAGE BangPatterns #-}
module Main where
import Connection
import Certificate
import PubKey
import Criterion.Main
import Control.Concurrent.Chan
import Network.TLS
import Data.X509
import Data.X509.Validation
import Data.Default.Class
import qualified Data.ByteString as B
import qualified Data.ByteString.Lazy as L
recvDataNonNull ctx = recvData ctx >>= \l -> if B.null l then recvDataNonNull ctx else return l
getParams connectVer cipher = (cParams, sParams)
where sParams = def { serverSupported = supported
, serverShared = def {
sharedCredentials = Credentials [ (CertificateChain [simpleX509 $ PubKeyRSA pubKey], PrivKeyRSA privKey) ]
}
}
cParams = (defaultParamsClient "" B.empty)
{ clientSupported = supported
, clientShared = def { sharedValidationCache = ValidationCache
{ cacheAdd = \_ _ _ -> return ()
, cacheQuery = \_ _ _ -> return ValidationCachePass
}
}
}
supported = def { supportedCiphers = [cipher]
, supportedVersions = [connectVer]
}
(pubKey, privKey) = getGlobalRSAPair
runTLSPipe params tlsServer tlsClient d name = bench name $ do
(startQueue, resultQueue) <- establishDataPipe params tlsServer tlsClient
writeChan startQueue d
readChan resultQueue
bench1 params !d name = runTLSPipe params tlsServer tlsClient d name
where tlsServer ctx queue = do
handshake ctx
d <- recvDataNonNull ctx
writeChan queue d
return ()
tlsClient queue ctx = do
handshake ctx
d <- readChan queue
sendData ctx (L.fromChunks [d])
bye ctx
return ()
main = defaultMain
[ bgroup "connection"
-- not sure the number actually make sense for anything. improve ..
[ bench1 (getParams SSL3 blockCipher) (B.replicate 256 0) "SSL3-256 bytes"
, bench1 (getParams TLS10 blockCipher) (B.replicate 256 0) "TLS10-256 bytes"
, bench1 (getParams TLS11 blockCipher) (B.replicate 256 0) "TLS11-256 bytes"
, bench1 (getParams TLS12 blockCipher) (B.replicate 256 0) "TLS12-256 bytes"
]
]