-- | -- Module : Crypto.Cipher.DES -- License : BSD-style -- Maintainer : Vincent Hanquez <vincent@snarc.org> -- Stability : stable -- Portability : good -- 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 -- | DES Context 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