/cipher-blowfish/Crypto/Cipher/Blowfish.hs
Haskell | 61 lines | 38 code | 10 blank | 13 comment | 0 complexity | 254b730d39108eaab5bc7a2b0fd26b77 MD5 | raw file
Possible License(s): BSD-3-Clause
- {-# LANGUAGE CPP #-}
- -- |
- -- Module : Crypto.Cipher.Blowfish
- -- License : BSD-style
- -- Maintainer : Vincent Hanquez <vincent@snarc.org>
- -- Stability : stable
- -- Portability : good
- --
- module Crypto.Cipher.Blowfish
- ( Blowfish
- , Blowfish64
- , Blowfish128
- , Blowfish256
- , Blowfish448
- ) where
- import Data.Byteable
- import Crypto.Cipher.Types
- import Crypto.Cipher.Blowfish.Primitive
- -- | variable keyed blowfish state
- newtype Blowfish = Blowfish Context
- -- | 64 bit keyed blowfish state
- newtype Blowfish64 = Blowfish64 Context
- -- | 128 bit keyed blowfish state
- newtype Blowfish128 = Blowfish128 Context
- -- | 256 bit keyed blowfish state
- newtype Blowfish256 = Blowfish256 Context
- -- | 448 bit keyed blowfish state
- newtype Blowfish448 = Blowfish448 Context
- instance Cipher Blowfish where
- cipherName _ = "blowfish"
- cipherKeySize _ = KeySizeRange 6 56
- cipherInit k = either error Blowfish $ initBlowfish (toBytes k)
- instance BlockCipher Blowfish where
- blockSize _ = 8
- ecbEncrypt (Blowfish bf) = encrypt bf
- ecbDecrypt (Blowfish bf) = decrypt bf
- #define INSTANCE_CIPHER(CSTR, NAME, KEYSIZE) \
- instance Cipher CSTR where \
- { cipherName _ = NAME \
- ; cipherKeySize _ = KeySizeFixed KEYSIZE \
- ; cipherInit k = either error CSTR $ initBlowfish (toBytes k) \
- }; \
- instance BlockCipher CSTR where \
- { blockSize _ = 8 \
- ; ecbEncrypt (CSTR bf) = encrypt bf \
- ; ecbDecrypt (CSTR bf) = decrypt bf \
- };
- INSTANCE_CIPHER(Blowfish64, "blowfish64", 8)
- INSTANCE_CIPHER(Blowfish128, "blowfish128", 16)
- INSTANCE_CIPHER(Blowfish256, "blowfish256", 32)
- INSTANCE_CIPHER(Blowfish448, "blowfish448", 56)