module Data.OpenPGP.CryptoAPI.Blowfish128 (Blowfish128) where

import Crypto.Classes (BlockCipher(..))
import Crypto.Types (BitLength)
import Crypto.Cipher.Blowfish (Blowfish)
import Data.Tagged (retag, Tagged(..))
import qualified Data.Serialize as Serialize

newtype Blowfish128 = Blowfish128 Blowfish

instance Serialize.Serialize Blowfish128 where
	put (Blowfish128 b) = Serialize.put b
	get = fmap Blowfish128 Serialize.get

instance BlockCipher Blowfish128 where
	blockSize = retag (blockSize :: Tagged Blowfish BitLength)
	encryptBlock (Blowfish128 k) = encryptBlock k
	decryptBlock (Blowfish128 k) = decryptBlock k
	buildKey = fmap Blowfish128 . buildKey
	keyLength = Tagged 128