tls-2.4.3: Network/TLS/HashAndSignature.hs
{-# LANGUAGE PatternSynonyms #-}
module Network.TLS.HashAndSignature (
HashAlgorithm (
..,
HashNone,
HashMD5,
HashSHA1,
HashSHA224,
HashSHA256,
HashSHA384,
HashSHA512,
HashIntrinsic
),
SignatureAlgorithm (
..,
SignatureAnonymous,
SignatureRSA,
SignatureDSA,
SignatureECDSA,
SignatureRSApssRSAeSHA256,
SignatureRSApssRSAeSHA384,
SignatureRSApssRSAeSHA512,
SignatureEd25519,
SignatureEd448,
SignatureRSApsspssSHA256,
SignatureRSApsspssSHA384,
SignatureRSApsspssSHA512,
SignatureBrainpoolP256,
SignatureBrainpoolP384,
SignatureBrainpoolP512
),
HashAndSignatureAlgorithm,
supportedSignatureSchemes,
signatureSchemesForTLS13,
) where
import Network.TLS.Imports
------------------------------------------------------------
newtype HashAlgorithm = HashAlgorithm {fromHashAlgorithm :: Word8}
deriving (Eq)
{- FOURMOLU_DISABLE -}
pattern HashNone :: HashAlgorithm
pattern HashNone = HashAlgorithm 0
pattern HashMD5 :: HashAlgorithm
pattern HashMD5 = HashAlgorithm 1
pattern HashSHA1 :: HashAlgorithm
pattern HashSHA1 = HashAlgorithm 2
pattern HashSHA224 :: HashAlgorithm
pattern HashSHA224 = HashAlgorithm 3
pattern HashSHA256 :: HashAlgorithm
pattern HashSHA256 = HashAlgorithm 4
pattern HashSHA384 :: HashAlgorithm
pattern HashSHA384 = HashAlgorithm 5
pattern HashSHA512 :: HashAlgorithm
pattern HashSHA512 = HashAlgorithm 6
pattern HashIntrinsic :: HashAlgorithm
pattern HashIntrinsic = HashAlgorithm 8
instance Show HashAlgorithm where
show HashNone = "None"
show HashMD5 = "MD5"
show HashSHA1 = "SHA1"
show HashSHA224 = "SHA224"
show HashSHA256 = "SHA256"
show HashSHA384 = "SHA384"
show HashSHA512 = "SHA512"
show HashIntrinsic = "TLS13"
show (HashAlgorithm x) = "Hash " ++ show x
{- FOURMOLU_ENABLE -}
------------------------------------------------------------
newtype SignatureAlgorithm = SignatureAlgorithm {fromSignatureAlgorithm :: Word8}
deriving (Eq)
{- FOURMOLU_DISABLE -}
pattern SignatureAnonymous :: SignatureAlgorithm
pattern SignatureAnonymous = SignatureAlgorithm 0
pattern SignatureRSA :: SignatureAlgorithm
pattern SignatureRSA = SignatureAlgorithm 1
pattern SignatureDSA :: SignatureAlgorithm
pattern SignatureDSA = SignatureAlgorithm 2
pattern SignatureECDSA :: SignatureAlgorithm
pattern SignatureECDSA = SignatureAlgorithm 3
-- TLS 1.3 from here
pattern SignatureRSApssRSAeSHA256 :: SignatureAlgorithm
pattern SignatureRSApssRSAeSHA256 = SignatureAlgorithm 4
pattern SignatureRSApssRSAeSHA384 :: SignatureAlgorithm
pattern SignatureRSApssRSAeSHA384 = SignatureAlgorithm 5
pattern SignatureRSApssRSAeSHA512 :: SignatureAlgorithm
pattern SignatureRSApssRSAeSHA512 = SignatureAlgorithm 6
pattern SignatureEd25519 :: SignatureAlgorithm
pattern SignatureEd25519 = SignatureAlgorithm 7
pattern SignatureEd448 :: SignatureAlgorithm
pattern SignatureEd448 = SignatureAlgorithm 8
pattern SignatureRSApsspssSHA256 :: SignatureAlgorithm
pattern SignatureRSApsspssSHA256 = SignatureAlgorithm 9
pattern SignatureRSApsspssSHA384 :: SignatureAlgorithm
pattern SignatureRSApsspssSHA384 = SignatureAlgorithm 10
pattern SignatureRSApsspssSHA512 :: SignatureAlgorithm
pattern SignatureRSApsspssSHA512 = SignatureAlgorithm 11
pattern SignatureBrainpoolP256 :: SignatureAlgorithm -- RFC8734
pattern SignatureBrainpoolP256 = SignatureAlgorithm 26
pattern SignatureBrainpoolP384 :: SignatureAlgorithm
pattern SignatureBrainpoolP384 = SignatureAlgorithm 27
pattern SignatureBrainpoolP512 :: SignatureAlgorithm
pattern SignatureBrainpoolP512 = SignatureAlgorithm 28
instance Show SignatureAlgorithm where
show SignatureAnonymous = "Anonymous"
show SignatureRSA = "RSA"
show SignatureDSA = "DSA"
show SignatureECDSA = "ECDSA"
show SignatureRSApssRSAeSHA256 = "RSApssRSAeSHA256"
show SignatureRSApssRSAeSHA384 = "RSApssRSAeSHA384"
show SignatureRSApssRSAeSHA512 = "RSApssRSAeSHA512"
show SignatureEd25519 = "Ed25519"
show SignatureEd448 = "Ed448"
show SignatureRSApsspssSHA256 = "RSApsspssSHA256"
show SignatureRSApsspssSHA384 = "RSApsspssSHA384"
show SignatureRSApsspssSHA512 = "RSApsspssSHA512"
show SignatureBrainpoolP256 = "BrainpoolP256"
show SignatureBrainpoolP384 = "BrainpoolP384"
show SignatureBrainpoolP512 = "BrainpoolP512"
show (SignatureAlgorithm x) = "Signature " ++ show x
{- FOURMOLU_ENABLE -}
------------------------------------------------------------
type HashAndSignatureAlgorithm = (HashAlgorithm, SignatureAlgorithm)
{- FOURMOLU_DISABLE -}
supportedSignatureSchemes :: [HashAndSignatureAlgorithm]
supportedSignatureSchemes =
-- EdDSA algorithms
[ (HashIntrinsic, SignatureEd448) -- ed448 (0x0808)
, (HashIntrinsic, SignatureEd25519) -- ed25519(0x0807)
-- ECDSA algorithms
, (HashSHA512, SignatureECDSA) -- ecdsa_secp512r1_sha512(0x0603)
, (HashSHA384, SignatureECDSA) -- ecdsa_secp384r1_sha384(0x0503)
, (HashSHA256, SignatureECDSA) -- ecdsa_secp256r1_sha256(0x0403)
-- RSASSA-PSS RSAE algorithms
, (HashIntrinsic, SignatureRSApssRSAeSHA512) -- rsa_pss_rsae_sha512(0x0806)
, (HashIntrinsic, SignatureRSApssRSAeSHA384) -- rsa_pss_rsae_sha384(0x0805)
, (HashIntrinsic, SignatureRSApssRSAeSHA256) -- rsa_pss_rsae_sha256(0x0804)
-- RSASSA-PSS PSS algorithms with
, (HashIntrinsic, SignatureRSApsspssSHA512) -- rsa_pss_pss_sha512(0x080b)
, (HashIntrinsic, SignatureRSApsspssSHA384) -- rsa_pss_pss_sha384(0x080a)
, (HashIntrinsic, SignatureRSApsspssSHA256) -- rsa_pss_pss_sha256(0x0809)
-- RSASSA-PKCS1-v1_5 algorithms
, (HashSHA512, SignatureRSA) -- rsa_pkcs1_sha512(0x0601)
, (HashSHA384, SignatureRSA) -- rsa_pkcs1_sha384(0x0501)
, (HashSHA256, SignatureRSA) -- rsa_pkcs1_sha256(0x0401)
-- Legacy algorithms
, (HashSHA1, SignatureRSA) -- rsa_pkcs1_sha1 (0x0201)
, (HashSHA1, SignatureECDSA) -- ecdsa_sha1 (0x0203)
]
signatureSchemesForTLS13 :: [(HashAlgorithm, SignatureAlgorithm)]
signatureSchemesForTLS13 =
-- EdDSA algorithms
[ (HashIntrinsic, SignatureEd448) -- ed448 (0x0808)
, (HashIntrinsic, SignatureEd25519) -- ed25519(0x0807)
-- ECDSA algorithms
, (HashSHA512, SignatureECDSA) -- ecdsa_secp512r1_sha512(0x0603)
, (HashSHA384, SignatureECDSA) -- ecdsa_secp384r1_sha384(0x0503)
, (HashSHA256, SignatureECDSA) -- ecdsa_secp256r1_sha256(0x0403)
-- RSASSA-PSS RSAE algorithms
, (HashIntrinsic, SignatureRSApssRSAeSHA512) -- rsa_pss_rsae_sha512(0x0806)
, (HashIntrinsic, SignatureRSApssRSAeSHA384) -- rsa_pss_rsae_sha384(0x0805)
, (HashIntrinsic, SignatureRSApssRSAeSHA256) -- rsa_pss_rsae_sha256(0x0804)
-- RSASSA-PSS PSS algorithms with
, (HashIntrinsic, SignatureRSApsspssSHA512) -- rsa_pss_pss_sha512(0x080b)
, (HashIntrinsic, SignatureRSApsspssSHA384) -- rsa_pss_pss_sha384(0x080a)
, (HashIntrinsic, SignatureRSApsspssSHA256) -- rsa_pss_pss_sha256(0x0809)
]
{- FOURMOLU_ENABLE -}