-- HOBlockCipher.hs: abstraction for the different BlockCipher classes, plus crazy CFB mode stuff
-- Copyright © 2016  Clint Adams
-- This software is released under the terms of the Expat license.
-- (See the LICENSE file).

{-# LANGUAGE PackageImports #-}

module Codec.Encryption.OpenPGP.Internal.HOBlockCipher (
   HOBlockCipher(..)
) where

import qualified "cryptonite" Crypto.Cipher.Types as CCT

import qualified Data.ByteString as B

class HOBlockCipher cipher where
    cipherInit :: B.ByteString -> Either String cipher
    cipherName :: cipher -> String
    cipherKeySize :: cipher -> CCT.KeySizeSpecifier
    blockSize :: cipher -> Int
    cfbEncrypt :: cipher -> B.ByteString -> B.ByteString -> Either String B.ByteString
    cfbDecrypt :: cipher -> B.ByteString -> B.ByteString -> Either String B.ByteString
    paddedCfbEncrypt :: cipher -> B.ByteString -> B.ByteString -> Either String B.ByteString
    paddedCfbEncrypt = cfbEncrypt
    paddedCfbDecrypt :: cipher -> B.ByteString -> B.ByteString -> Either String B.ByteString
    paddedCfbDecrypt = cfbDecrypt