-- |
-- 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