-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/


-- | Config types for TLS Encrypted Client Hello to glue DNS and TLS
@package ech-config
@version 0.0.1


-- | Types for Configuration of Encrypted Client Hello.
module Network.TLS.ECH.Config

-- | A list of <a>ECHConfig</a>.
type ECHConfigList = [ECHConfig]

-- | Type for configuration of encrypted client hello.
data ECHConfig
ECHConfig :: ECHConfigContents -> ECHConfig
[contents] :: ECHConfig -> ECHConfigContents
data ECHConfigContents
ECHConfigContents :: HpkeKeyConfig -> Word8 -> String -> [ECHConfigExtension] -> ECHConfigContents
[key_config] :: ECHConfigContents -> HpkeKeyConfig
[maximum_name_length] :: ECHConfigContents -> Word8
[public_name] :: ECHConfigContents -> String
[extensions] :: ECHConfigContents -> [ECHConfigExtension]

-- | Key configuration.
data HpkeKeyConfig
HpkeKeyConfig :: ConfigId -> Word16 -> EncodedServerPublicKey -> [HpkeSymmetricCipherSuite] -> HpkeKeyConfig
[config_id] :: HpkeKeyConfig -> ConfigId
[kem_id] :: HpkeKeyConfig -> Word16
[public_key] :: HpkeKeyConfig -> EncodedServerPublicKey
[cipher_suites] :: HpkeKeyConfig -> [HpkeSymmetricCipherSuite]

-- | Configuration identifier.
type ConfigId = Word8

-- | Encoded public key.
newtype EncodedServerPublicKey
EncodedServerPublicKey :: ByteString -> EncodedServerPublicKey

-- | Type for cipher suite.
data HpkeSymmetricCipherSuite
HpkeSymmetricCipherSuite :: Word16 -> Word16 -> HpkeSymmetricCipherSuite
[kdf_id] :: HpkeSymmetricCipherSuite -> Word16
[aead_id] :: HpkeSymmetricCipherSuite -> Word16

-- | Extension type.
type ECHConfigExtensionType = Word16

-- | Raw extension.
data ECHConfigExtension
ECHConfigExtension :: ECHConfigExtensionType -> ByteString -> ECHConfigExtension
[ece_type] :: ECHConfigExtension -> ECHConfigExtensionType
[ece_data] :: ECHConfigExtension -> ByteString

-- | Decoder for <a>ECHConfigList</a>.
decodeECHConfigList :: ByteString -> Maybe [ECHConfig]

-- | Encoder for <a>ECHConfigList</a>.
encodeECHConfigList :: [ECHConfig] -> ByteString

-- | Loading the wire format of <a>ECHConfigList</a> and decode it into
--   <a>ECHConfigList</a>.
loadECHConfigList :: FilePath -> IO [ECHConfig]

-- | Loading secret keys stored in files whose names are "&lt;num&gt;.key".
--   
--   <pre>
--   loadECHSecretKeys ["0.key", "1.key"]
--   </pre>
loadECHSecretKeys :: [FilePath] -> IO [(ConfigId, ByteString)]

-- | Decoder for <a>ECHConfig</a>.
decodeECHConfig :: ByteString -> Maybe ECHConfig

-- | Encoder for <a>ECHConfig</a>.
encodeECHConfig :: ECHConfig -> ByteString
getECHConfigList :: ReadBuffer -> IO [ECHConfig]
putECHConfigList :: WriteBuffer -> [ECHConfig] -> IO ()
sizeOfECHConfigList :: [ECHConfig] -> Int
getECHConfig :: ReadBuffer -> IO ECHConfig
putECHConfig :: WriteBuffer -> ECHConfig -> IO ()
sizeOfECHConfig :: ECHConfig -> Int
instance GHC.Classes.Eq Network.TLS.ECH.Config.ECHConfig
instance GHC.Classes.Eq Network.TLS.ECH.Config.ECHConfigContents
instance GHC.Classes.Eq Network.TLS.ECH.Config.ECHConfigExtension
instance GHC.Classes.Eq Network.TLS.ECH.Config.EncodedServerPublicKey
instance GHC.Classes.Eq Network.TLS.ECH.Config.HpkeKeyConfig
instance GHC.Classes.Eq Network.TLS.ECH.Config.HpkeSymmetricCipherSuite
instance GHC.Classes.Ord Network.TLS.ECH.Config.ECHConfig
instance GHC.Classes.Ord Network.TLS.ECH.Config.ECHConfigContents
instance GHC.Classes.Ord Network.TLS.ECH.Config.ECHConfigExtension
instance GHC.Classes.Ord Network.TLS.ECH.Config.EncodedServerPublicKey
instance GHC.Classes.Ord Network.TLS.ECH.Config.HpkeKeyConfig
instance GHC.Classes.Ord Network.TLS.ECH.Config.HpkeSymmetricCipherSuite
instance GHC.Internal.Show.Show Network.TLS.ECH.Config.ECHConfig
instance GHC.Internal.Show.Show Network.TLS.ECH.Config.ECHConfigContents
instance GHC.Internal.Show.Show Network.TLS.ECH.Config.ECHConfigExtension
instance GHC.Internal.Show.Show Network.TLS.ECH.Config.EncodedServerPublicKey
instance GHC.Internal.Show.Show Network.TLS.ECH.Config.HpkeKeyConfig
instance GHC.Internal.Show.Show Network.TLS.ECH.Config.HpkeSymmetricCipherSuite
instance Network.TLS.ECH.Config.SizeOf Network.TLS.ECH.Config.ECHConfig
instance Network.TLS.ECH.Config.SizeOf Network.TLS.ECH.Config.ECHConfigContents
instance Network.TLS.ECH.Config.SizeOf Network.TLS.ECH.Config.ECHConfigExtension
instance Network.TLS.ECH.Config.SizeOf Network.TLS.ECH.Config.EncodedServerPublicKey
instance Network.TLS.ECH.Config.SizeOf Network.TLS.ECH.Config.HpkeKeyConfig
instance Network.TLS.ECH.Config.SizeOf Network.TLS.ECH.Config.HpkeSymmetricCipherSuite
