1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96
|
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE PatternSynonyms #-}
-- |
-- Module : Network.TLS.Crypto.Types
-- License : BSD-style
-- Maintainer : Kazu Yamamoto <kazu@iij.ad.jp>
-- Stability : experimental
-- Portability : unknown
module Network.TLS.Crypto.Types (
Group (
Group,
P256,
P384,
P521,
X25519,
X448,
FFDHE2048,
FFDHE3072,
FFDHE4096,
FFDHE6144,
FFDHE8192
),
availableFFGroups,
availableECGroups,
supportedNamedGroups,
KeyExchangeSignatureAlg (..),
) where
import Codec.Serialise
import Data.Word
import GHC.Generics
newtype Group = Group Word16 deriving (Eq, Generic)
instance Serialise Group
{- FOURMOLU_DISABLE -}
pattern P256 :: Group
pattern P256 = Group 23
pattern P384 :: Group
pattern P384 = Group 24
pattern P521 :: Group
pattern P521 = Group 25
pattern X25519 :: Group
pattern X25519 = Group 29
pattern X448 :: Group
pattern X448 = Group 30
pattern FFDHE2048 :: Group
pattern FFDHE2048 = Group 256
pattern FFDHE3072 :: Group
pattern FFDHE3072 = Group 257
pattern FFDHE4096 :: Group
pattern FFDHE4096 = Group 258
pattern FFDHE6144 :: Group
pattern FFDHE6144 = Group 259
pattern FFDHE8192 :: Group
pattern FFDHE8192 = Group 260
instance Show Group where
show P256 = "P256"
show P384 = "P384"
show P521 = "P521"
show X25519 = "X25519"
show X448 = "X448"
show FFDHE2048 = "FFDHE2048"
show FFDHE3072 = "FFDHE3072"
show FFDHE4096 = "FFDHE4096"
show FFDHE6144 = "FFDHE6144"
show FFDHE8192 = "FFDHE8192"
show (Group x) = "Group " ++ show x
{- FOURMOLU_ENABLE -}
availableFFGroups :: [Group]
availableFFGroups = [FFDHE2048, FFDHE3072, FFDHE4096, FFDHE6144, FFDHE8192]
availableECGroups :: [Group]
availableECGroups = [P256, P384, P521, X25519, X448]
supportedNamedGroups :: [Group]
supportedNamedGroups =
[ X25519
, X448
, P256
, FFDHE2048
, FFDHE3072
, FFDHE4096
, P384
, FFDHE6144
, FFDHE8192
, P521
]
-- Key-exchange signature algorithm, in close relation to ciphers
-- (before TLS 1.3).
data KeyExchangeSignatureAlg = KX_RSA | KX_DSA | KX_ECDSA
deriving (Show, Eq)
|