quic-0.1.0: util/Common.hs
{-# LANGUAGE OverloadedStrings #-}
module Common (
getGroups
, getLogger
, makeProtos
) where
import Data.Bits
import Data.ByteString (ByteString)
import qualified Data.ByteString as BS
import qualified Data.ByteString.Char8 as C8
import Data.Maybe
import Network.TLS hiding (Version)
import Network.QUIC.Internal
namedGroups :: [(String, Group)]
namedGroups =
[ ("ffdhe2048", FFDHE2048)
, ("ffdhe3072", FFDHE3072)
, ("ffdhe4096", FFDHE4096)
, ("ffdhe6144", FFDHE6144)
, ("ffdhe8192", FFDHE8192)
, ("p256", P256)
, ("p384", P384)
, ("p521", P521)
, ("x25519", X25519)
, ("x448", X448)
]
getGroups :: [Group] -> Maybe String -> [Group]
getGroups grps Nothing = grps
getGroups _ (Just gs) = mapMaybe (`lookup` namedGroups) $ split ',' gs
split :: Char -> String -> [String]
split _ "" = []
split c s = case break (c==) s of
("",r) -> split c (tail r)
(s',"") -> [s']
(s',r) -> s' : split c (tail r)
getLogger :: Maybe FilePath -> (String -> IO ())
getLogger Nothing = \_ -> return ()
getLogger (Just file) = \msg -> appendFile file (msg ++ "\n")
makeProtos :: Version -> (ByteString, ByteString)
makeProtos Version1 = ("h3","hq-interop")
makeProtos Version2 = ("h3","hq-interop")
makeProtos ver = (h3X,hqX)
where
verbs = C8.pack $ show $ fromVersion ver
h3X = "h3-" `BS.append` verbs
hqX = "hq-" `BS.append` verbs
fromVersion :: Version -> Int
fromVersion (Version ver) = fromIntegral (0x000000ff .&. ver)