hs-tls/Network/TLS/Cipher.hs

87 lines
2.6 KiB
Haskell
Raw Normal View History

2011-03-02 08:43:05 +00:00
{-# OPTIONS_HADDOCK hide #-}
2011-08-13 06:56:17 +00:00
{-# LANGUAGE ExistentialQuantification #-}
2010-09-09 21:47:19 +00:00
-- |
-- Module : Network.TLS.Cipher
-- License : BSD-style
-- Maintainer : Vincent Hanquez <vincent@snarc.org>
-- Stability : experimental
-- Portability : unknown
--
module Network.TLS.Cipher
( CipherTypeFunctions(..)
, CipherKeyExchangeType(..)
, Bulk(..)
2010-09-09 21:47:19 +00:00
, Cipher(..)
2010-12-07 09:15:22 +00:00
, Key
, IV
2010-09-09 21:47:19 +00:00
, cipherExchangeNeedMoreData
) where
import Data.Word
import Network.TLS.Struct (Version(..))
2010-09-09 21:47:19 +00:00
import qualified Data.ByteString as B
-- FIXME convert to newtype
type Key = B.ByteString
type IV = B.ByteString
data CipherTypeFunctions =
CipherNoneF -- special value for 0
| CipherBlockF (Key -> IV -> B.ByteString -> B.ByteString)
(Key -> IV -> B.ByteString -> B.ByteString)
2010-09-09 21:47:19 +00:00
| CipherStreamF (Key -> IV)
(IV -> B.ByteString -> (B.ByteString, IV))
(IV -> B.ByteString -> (B.ByteString, IV))
2010-09-09 21:47:19 +00:00
data CipherKeyExchangeType =
2011-05-12 07:18:56 +00:00
CipherKeyExchange_RSA
| CipherKeyExchange_DH_Anon
2011-05-12 07:18:56 +00:00
| CipherKeyExchange_DHE_RSA
| CipherKeyExchange_ECDHE_RSA
| CipherKeyExchange_DHE_DSS
| CipherKeyExchange_DH_DSS
| CipherKeyExchange_DH_RSA
| CipherKeyExchange_ECDH_ECDSA
| CipherKeyExchange_ECDH_RSA
| CipherKeyExchange_ECDHE_ECDSA
deriving (Show,Eq)
2010-09-09 21:47:19 +00:00
data Bulk = Bulk
{ bulkName :: String
, cipherKeySize :: Int
, cipherIVSize :: Int
, cipherKeyBlockSize :: Int
, cipherF :: CipherTypeFunctions
}
2011-03-02 08:43:05 +00:00
-- | Cipher algorithm
2010-09-09 21:47:19 +00:00
data Cipher = Cipher
{ cipherID :: Word16
, cipherName :: String
, cipherDigestSize :: Word8
, cipherBulk :: Bulk
2010-09-09 21:47:19 +00:00
, cipherPaddingSize :: Word8
, cipherKeyExchange :: CipherKeyExchangeType
, cipherMACHash :: B.ByteString -> B.ByteString
2010-09-09 21:47:19 +00:00
, cipherMinVer :: Maybe Version
}
instance Show Cipher where
show c = cipherName c
instance Eq Cipher where
(==) c1 c2 = cipherID c1 == cipherID c2
2010-09-09 21:47:19 +00:00
cipherExchangeNeedMoreData :: CipherKeyExchangeType -> Bool
2011-05-12 07:18:56 +00:00
cipherExchangeNeedMoreData CipherKeyExchange_RSA = False
cipherExchangeNeedMoreData CipherKeyExchange_DH_Anon = True
2011-05-12 07:18:56 +00:00
cipherExchangeNeedMoreData CipherKeyExchange_DHE_RSA = True
cipherExchangeNeedMoreData CipherKeyExchange_ECDHE_RSA = True
cipherExchangeNeedMoreData CipherKeyExchange_DHE_DSS = True
cipherExchangeNeedMoreData CipherKeyExchange_DH_DSS = False
cipherExchangeNeedMoreData CipherKeyExchange_DH_RSA = False
cipherExchangeNeedMoreData CipherKeyExchange_ECDH_ECDSA = True
cipherExchangeNeedMoreData CipherKeyExchange_ECDH_RSA = True
cipherExchangeNeedMoreData CipherKeyExchange_ECDHE_ECDSA = True