module Crypto.Cipher.Types.Base
( KeyError(..)
, KeySizeSpecifier(..)
, Key(..)
, IV(..)
, Cipher(..)
, AuthTag(..)
, AEADMode(..)
, DataUnitOffset
) where
import Data.Byteable
import Data.SecureMem
import Data.Word
import Data.ByteString (ByteString)
data KeyError =
KeyErrorTooSmall
| KeyErrorTooBig
| KeyErrorInvalid String
deriving (Int -> KeyError -> ShowS
[KeyError] -> ShowS
KeyError -> String
(Int -> KeyError -> ShowS)
-> (KeyError -> String) -> ([KeyError] -> ShowS) -> Show KeyError
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [KeyError] -> ShowS
$cshowList :: [KeyError] -> ShowS
show :: KeyError -> String
$cshow :: KeyError -> String
showsPrec :: Int -> KeyError -> ShowS
$cshowsPrec :: Int -> KeyError -> ShowS
Show,KeyError -> KeyError -> Bool
(KeyError -> KeyError -> Bool)
-> (KeyError -> KeyError -> Bool) -> Eq KeyError
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: KeyError -> KeyError -> Bool
$c/= :: KeyError -> KeyError -> Bool
== :: KeyError -> KeyError -> Bool
$c== :: KeyError -> KeyError -> Bool
Eq)
data KeySizeSpecifier =
KeySizeRange Int Int
| KeySizeEnum [Int]
| KeySizeFixed Int
deriving (Int -> KeySizeSpecifier -> ShowS
[KeySizeSpecifier] -> ShowS
KeySizeSpecifier -> String
(Int -> KeySizeSpecifier -> ShowS)
-> (KeySizeSpecifier -> String)
-> ([KeySizeSpecifier] -> ShowS)
-> Show KeySizeSpecifier
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [KeySizeSpecifier] -> ShowS
$cshowList :: [KeySizeSpecifier] -> ShowS
show :: KeySizeSpecifier -> String
$cshow :: KeySizeSpecifier -> String
showsPrec :: Int -> KeySizeSpecifier -> ShowS
$cshowsPrec :: Int -> KeySizeSpecifier -> ShowS
Show,KeySizeSpecifier -> KeySizeSpecifier -> Bool
(KeySizeSpecifier -> KeySizeSpecifier -> Bool)
-> (KeySizeSpecifier -> KeySizeSpecifier -> Bool)
-> Eq KeySizeSpecifier
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: KeySizeSpecifier -> KeySizeSpecifier -> Bool
$c/= :: KeySizeSpecifier -> KeySizeSpecifier -> Bool
== :: KeySizeSpecifier -> KeySizeSpecifier -> Bool
$c== :: KeySizeSpecifier -> KeySizeSpecifier -> Bool
Eq)
type DataUnitOffset = Word32
newtype Key c = Key SecureMem deriving (Key c -> Key c -> Bool
(Key c -> Key c -> Bool) -> (Key c -> Key c -> Bool) -> Eq (Key c)
forall c. Key c -> Key c -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Key c -> Key c -> Bool
$c/= :: forall c. Key c -> Key c -> Bool
== :: Key c -> Key c -> Bool
$c== :: forall c. Key c -> Key c -> Bool
Eq)
instance ToSecureMem (Key c) where
toSecureMem :: Key c -> SecureMem
toSecureMem (Key SecureMem
sm) = SecureMem
sm
instance Byteable (Key c) where
toBytes :: Key c -> ByteString
toBytes (Key SecureMem
sm) = SecureMem -> ByteString
forall a. Byteable a => a -> ByteString
toBytes SecureMem
sm
newtype IV c = IV ByteString deriving (IV c -> IV c -> Bool
(IV c -> IV c -> Bool) -> (IV c -> IV c -> Bool) -> Eq (IV c)
forall c. IV c -> IV c -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: IV c -> IV c -> Bool
$c/= :: forall c. IV c -> IV c -> Bool
== :: IV c -> IV c -> Bool
$c== :: forall c. IV c -> IV c -> Bool
Eq)
instance Byteable (IV c) where
toBytes :: IV c -> ByteString
toBytes (IV ByteString
sm) = ByteString
sm
newtype AuthTag = AuthTag ByteString
deriving (Int -> AuthTag -> ShowS
[AuthTag] -> ShowS
AuthTag -> String
(Int -> AuthTag -> ShowS)
-> (AuthTag -> String) -> ([AuthTag] -> ShowS) -> Show AuthTag
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [AuthTag] -> ShowS
$cshowList :: [AuthTag] -> ShowS
show :: AuthTag -> String
$cshow :: AuthTag -> String
showsPrec :: Int -> AuthTag -> ShowS
$cshowsPrec :: Int -> AuthTag -> ShowS
Show)
instance Eq AuthTag where
(AuthTag ByteString
a) == :: AuthTag -> AuthTag -> Bool
== (AuthTag ByteString
b) = ByteString -> ByteString -> Bool
forall a. Byteable a => a -> a -> Bool
constEqBytes ByteString
a ByteString
b
instance Byteable AuthTag where
toBytes :: AuthTag -> ByteString
toBytes (AuthTag ByteString
bs) = ByteString
bs
data AEADMode =
AEAD_OCB
| AEAD_CCM
| AEAD_EAX
| AEAD_CWC
| AEAD_GCM
deriving (Int -> AEADMode -> ShowS
[AEADMode] -> ShowS
AEADMode -> String
(Int -> AEADMode -> ShowS)
-> (AEADMode -> String) -> ([AEADMode] -> ShowS) -> Show AEADMode
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [AEADMode] -> ShowS
$cshowList :: [AEADMode] -> ShowS
show :: AEADMode -> String
$cshow :: AEADMode -> String
showsPrec :: Int -> AEADMode -> ShowS
$cshowsPrec :: Int -> AEADMode -> ShowS
Show,AEADMode -> AEADMode -> Bool
(AEADMode -> AEADMode -> Bool)
-> (AEADMode -> AEADMode -> Bool) -> Eq AEADMode
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: AEADMode -> AEADMode -> Bool
$c/= :: AEADMode -> AEADMode -> Bool
== :: AEADMode -> AEADMode -> Bool
$c== :: AEADMode -> AEADMode -> Bool
Eq)
class Cipher cipher where
cipherInit :: Key cipher -> cipher
cipherName :: cipher -> String
cipherKeySize :: cipher -> KeySizeSpecifier