1module Crypto.Cipher.Utils 2 ( validateKeySize 3 ) where 4 5import Crypto.Error 6import Crypto.Cipher.Types 7 8import Data.ByteArray as BA 9 10validateKeySize :: (ByteArrayAccess key, Cipher cipher) => cipher -> key -> CryptoFailable key 11validateKeySize c k = if validKeyLength 12 then CryptoPassed k 13 else CryptoFailed CryptoError_KeySizeInvalid 14 where keyLength = BA.length k 15 validKeyLength = case cipherKeySize c of 16 KeySizeRange low high -> keyLength >= low && keyLength <= high 17 KeySizeEnum lengths -> keyLength `elem` lengths 18 KeySizeFixed s -> keyLength == s