    -- |
    -- Module      : Network.TLS.Crypto.Types
    -- License     : BSD-style
    -- Maintainer  : Kazu Yamamoto <kazu@iij.ad.jp>
    -- Stability   : experimental
    -- Portability : unknown
    --
    module Network.TLS.Crypto.Types where

    data Group = P256 | P384 | P521 | X25519 | X448
               | FFDHE2048 | FFDHE3072 | FFDHE4096 | FFDHE6144 | FFDHE8192
               deriving (Group -> Group -> Bool
    (Group -> Group -> Bool) -> (Group -> Group -> Bool) -> Eq Group
    forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
    $c== :: Group -> Group -> Bool
    == :: Group -> Group -> Bool
    $c/= :: Group -> Group -> Bool
    /= :: Group -> Group -> Bool
    Eq, Int -> Group -> ShowS
    [Group] -> ShowS
    Group -> String
    (Int -> Group -> ShowS)
    -> (Group -> String) -> ([Group] -> ShowS) -> Show Group
    forall a.
    (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
    $cshowsPrec :: Int -> Group -> ShowS
    showsPrec :: Int -> Group -> ShowS
    $cshow :: Group -> String
    show :: Group -> String
    $cshowList :: [Group] -> ShowS
    showList :: [Group] -> ShowS
    Show)

    availableFFGroups :: [Group]
    availableFFGroups :: [Group]
    availableFFGroups = [Group
    FFDHE2048,Group
    FFDHE3072,Group
    FFDHE4096,Group
    FFDHE6144,Group
    FFDHE8192]

    availableECGroups :: [Group]
    availableECGroups :: [Group]
    availableECGroups = [Group
    P256,Group
    P384,Group
    P521,Group
    X25519,Group
    X448]

    -- Key-exchange signature algorithm, in close relation to ciphers
    -- (before TLS 1.3).
    data KeyExchangeSignatureAlg = KX_RSA | KX_DSS | KX_ECDSA
                          deriving (Int -> KeyExchangeSignatureAlg -> ShowS
    [KeyExchangeSignatureAlg] -> ShowS
    KeyExchangeSignatureAlg -> String
    (Int -> KeyExchangeSignatureAlg -> ShowS)
    -> (KeyExchangeSignatureAlg -> String)
    -> ([KeyExchangeSignatureAlg] -> ShowS)
    -> Show KeyExchangeSignatureAlg
    forall a.
    (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
    $cshowsPrec :: Int -> KeyExchangeSignatureAlg -> ShowS
    showsPrec :: Int -> KeyExchangeSignatureAlg -> ShowS
    $cshow :: KeyExchangeSignatureAlg -> String
    show :: KeyExchangeSignatureAlg -> String
    $cshowList :: [KeyExchangeSignatureAlg] -> ShowS
    showList :: [KeyExchangeSignatureAlg] -> ShowS
    Show, KeyExchangeSignatureAlg -> KeyExchangeSignatureAlg -> Bool
    (KeyExchangeSignatureAlg -> KeyExchangeSignatureAlg -> Bool)
    -> (KeyExchangeSignatureAlg -> KeyExchangeSignatureAlg -> Bool)
    -> Eq KeyExchangeSignatureAlg
    forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
    $c== :: KeyExchangeSignatureAlg -> KeyExchangeSignatureAlg -> Bool
    == :: KeyExchangeSignatureAlg -> KeyExchangeSignatureAlg -> Bool
    $c/= :: KeyExchangeSignatureAlg -> KeyExchangeSignatureAlg -> Bool
    /= :: KeyExchangeSignatureAlg -> KeyExchangeSignatureAlg -> Bool
    Eq)