{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE PatternSynonyms #-}
module Network.TLS.Crypto.Types (
Group (
Group,
P256,
P384,
P521,
X25519,
X448,
FFDHE2048,
FFDHE3072,
FFDHE4096,
FFDHE6144,
FFDHE8192,
MLKEM512,
MLKEM768,
MLKEM1024,
X25519MLKEM768,
P256MLKEM768,
P384MLKEM1024
),
availableFFGroups,
availableECGroups,
availableHybridGroups,
supportedNamedGroups,
supportedNamedGroupsTLS13,
KeyExchangeSignatureAlg (..),
) where
import Codec.Serialise
import Data.Word
import GHC.Generics
newtype Group = Group Word16 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, (forall x. Group -> Rep Group x)
-> (forall x. Rep Group x -> Group) -> Generic Group
forall x. Rep Group x -> Group
forall x. Group -> Rep Group x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x. Group -> Rep Group x
from :: forall x. Group -> Rep Group x
$cto :: forall x. Rep Group x -> Group
to :: forall x. Rep Group x -> Group
Generic)
instance Serialise Group
pattern P256 :: Group
pattern $bP256 :: Group
$mP256 :: forall {r}. Group -> ((# #) -> r) -> ((# #) -> r) -> r
P256 = Group 23
pattern P384 :: Group
pattern $bP384 :: Group
$mP384 :: forall {r}. Group -> ((# #) -> r) -> ((# #) -> r) -> r
P384 = Group 24
pattern P521 :: Group
pattern $bP521 :: Group
$mP521 :: forall {r}. Group -> ((# #) -> r) -> ((# #) -> r) -> r
P521 = Group 25
pattern X25519 :: Group
pattern $bX25519 :: Group
$mX25519 :: forall {r}. Group -> ((# #) -> r) -> ((# #) -> r) -> r
X25519 = Group 29
pattern X448 :: Group
pattern $bX448 :: Group
$mX448 :: forall {r}. Group -> ((# #) -> r) -> ((# #) -> r) -> r
X448 = Group 30
pattern FFDHE2048 :: Group
pattern $bFFDHE2048 :: Group
$mFFDHE2048 :: forall {r}. Group -> ((# #) -> r) -> ((# #) -> r) -> r
FFDHE2048 = Group 256
pattern FFDHE3072 :: Group
pattern $bFFDHE3072 :: Group
$mFFDHE3072 :: forall {r}. Group -> ((# #) -> r) -> ((# #) -> r) -> r
FFDHE3072 = Group 257
pattern FFDHE4096 :: Group
pattern $bFFDHE4096 :: Group
$mFFDHE4096 :: forall {r}. Group -> ((# #) -> r) -> ((# #) -> r) -> r
FFDHE4096 = Group 258
pattern FFDHE6144 :: Group
pattern $bFFDHE6144 :: Group
$mFFDHE6144 :: forall {r}. Group -> ((# #) -> r) -> ((# #) -> r) -> r
FFDHE6144 = Group 259
pattern FFDHE8192 :: Group
pattern $bFFDHE8192 :: Group
$mFFDHE8192 :: forall {r}. Group -> ((# #) -> r) -> ((# #) -> r) -> r
FFDHE8192 = Group 260
pattern MLKEM512 :: Group
pattern $bMLKEM512 :: Group
$mMLKEM512 :: forall {r}. Group -> ((# #) -> r) -> ((# #) -> r) -> r
MLKEM512 = Group 512
pattern MLKEM768 :: Group
pattern $bMLKEM768 :: Group
$mMLKEM768 :: forall {r}. Group -> ((# #) -> r) -> ((# #) -> r) -> r
MLKEM768 = Group 513
pattern MLKEM1024 :: Group
pattern $bMLKEM1024 :: Group
$mMLKEM1024 :: forall {r}. Group -> ((# #) -> r) -> ((# #) -> r) -> r
MLKEM1024 = Group 514
pattern X25519MLKEM768 :: Group
pattern $bX25519MLKEM768 :: Group
$mX25519MLKEM768 :: forall {r}. Group -> ((# #) -> r) -> ((# #) -> r) -> r
X25519MLKEM768 = Group 4588
pattern P256MLKEM768 :: Group
pattern $bP256MLKEM768 :: Group
$mP256MLKEM768 :: forall {r}. Group -> ((# #) -> r) -> ((# #) -> r) -> r
P256MLKEM768 = Group 4587
pattern P384MLKEM1024 :: Group
pattern $bP384MLKEM1024 :: Group
$mP384MLKEM1024 :: forall {r}. Group -> ((# #) -> r) -> ((# #) -> r) -> r
P384MLKEM1024 = Group 4589
instance Show Group where
show :: Group -> String
show Group
P256 = String
"P256"
show Group
P384 = String
"P384"
show Group
P521 = String
"P521"
show Group
X25519 = String
"X25519"
show Group
X448 = String
"X448"
show Group
FFDHE2048 = String
"FFDHE2048"
show Group
FFDHE3072 = String
"FFDHE3072"
show Group
FFDHE4096 = String
"FFDHE4096"
show Group
FFDHE6144 = String
"FFDHE6144"
show Group
FFDHE8192 = String
"FFDHE8192"
show Group
MLKEM512 = String
"MLKEM512"
show Group
MLKEM768 = String
"MLKEM768"
show Group
MLKEM1024 = String
"MLKEM1024"
show Group
X25519MLKEM768 = String
"X25519MLKEM768"
show Group
P256MLKEM768 = String
"P256MLKEM768"
show Group
P384MLKEM1024 = String
"P384MLKEM1024"
show (Group Word16
x) = String
"Group " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Word16 -> String
forall a. Show a => a -> String
show Word16
x
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]
availableHybridGroups :: [Group]
availableHybridGroups :: [Group]
availableHybridGroups = [Group
X25519MLKEM768, Group
P256MLKEM768, Group
P384MLKEM1024]
supportedNamedGroups :: [Group]
supportedNamedGroups :: [Group]
supportedNamedGroups =
[ Group
X25519
, Group
P256
, Group
P384
, Group
X448
, Group
P521
, Group
FFDHE3072
, Group
FFDHE4096
, Group
FFDHE6144
, Group
FFDHE8192
, Group
X25519MLKEM768
, Group
P256MLKEM768
, Group
P384MLKEM1024
,
Group
MLKEM768
, Group
MLKEM1024
]
supportedNamedGroupsTLS13 :: [[Group]]
supportedNamedGroupsTLS13 :: [[Group]]
supportedNamedGroupsTLS13 =
[ [Group
X25519MLKEM768, Group
P256MLKEM768, Group
P384MLKEM1024]
, [Group
X25519, Group
P256]
, [Group
P384, Group
X448, Group
P521]
, [Group
FFDHE2048, Group
FFDHE3072, Group
FFDHE4096, Group
FFDHE6144, Group
FFDHE8192]
, [Group
MLKEM768, Group
MLKEM1024]
]
data KeyExchangeSignatureAlg = KX_RSA | KX_DSA | 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)