module Crypto.Cipher.DES
( DES
) where
import Data.Byteable
import Data.Word
import Crypto.Cipher.Types
import Crypto.Cipher.DES.Primitive
import Crypto.Cipher.DES.Serialization
data DES = DES Word64
deriving (Eq)
instance Cipher DES where
cipherName _ = "DES"
cipherKeySize _ = KeySizeFixed 8
cipherInit k = initDES k
instance BlockCipher DES where
blockSize _ = 8
ecbEncrypt (DES key) = unblockify . map (encrypt key) . blockify
ecbDecrypt (DES key) = unblockify . map (decrypt key) . blockify
initDES :: Byteable b => b -> DES
initDES k
| len == 8 = DES key
| otherwise = error "DES: not a valid key length (valid=8)"
where len = byteableLength k
(Block key) = toW64 $ toBytes k