packages feed

hsgnutls-0.2.3.2: Codec/Encryption/Ciphers.hsc

module Codec.Encryption.Ciphers where

#include <gcrypt.h>

import Foreign.C.Types

class CipherType a where
	cipherTypeToC :: a -> CInt

class CipherMode a where
	cipherModeToC :: a -> CInt

data CipherIDEA = CipherIDEA deriving Show
data Cipher3DES = Cipher3DES deriving Show
data CipherCast5 = CipherCast5 deriving Show
data CipherBlowfish = CipherBlowfish deriving Show
data CipherAES = CipherAES deriving Show
data CipherAES128 = CipherAES128 deriving Show
data CipherAES192 = CipherAES192 deriving Show
data CipherAES256 = CipherAES256 deriving Show
data CipherRIJNDAEL = CipherRIJDNDAEL deriving Show
data CipherRIJNDAEL128 = CipherRIJNDAEL128 deriving Show
data CipherRIJNDAEL192 = CipherRIJNDAEL192 deriving Show
data CipherRIJNDAEL256 = CipherRIJNDAEL256 deriving Show
data CipherTwofish = CipherTwofish deriving Show
data CipherTwofish128 = CipherTwofish128 deriving Show
data CipherArcfour = CipherArcfour deriving Show
data CipherDES = CipherDES deriving Show

instance CipherType CipherIDEA where cipherTypeToC _ = #const GCRY_CIPHER_IDEA
instance CipherType Cipher3DES where cipherTypeToC _ = #const GCRY_CIPHER_3DES
instance CipherType CipherCast5 where cipherTypeToC _ = #const GCRY_CIPHER_CAST5
instance CipherType CipherBlowfish where cipherTypeToC _ = #const GCRY_CIPHER_BLOWFISH
instance CipherType CipherAES where cipherTypeToC _ = #const GCRY_CIPHER_AES
instance CipherType CipherAES128 where cipherTypeToC _ = #const GCRY_CIPHER_AES128
instance CipherType CipherAES192 where cipherTypeToC _ = #const GCRY_CIPHER_AES192
instance CipherType CipherAES256 where cipherTypeToC _ = #const GCRY_CIPHER_AES256
instance CipherType CipherRIJNDAEL where cipherTypeToC _ = #const GCRY_CIPHER_RIJNDAEL
instance CipherType CipherRIJNDAEL128 where cipherTypeToC _ = #const GCRY_CIPHER_RIJNDAEL128
instance CipherType CipherRIJNDAEL192 where cipherTypeToC _ = #const GCRY_CIPHER_RIJNDAEL192
instance CipherType CipherRIJNDAEL256 where cipherTypeToC _ = #const GCRY_CIPHER_RIJNDAEL256
instance CipherType CipherTwofish where cipherTypeToC _ = #const GCRY_CIPHER_TWOFISH
instance CipherType CipherTwofish128 where cipherTypeToC _ = #const GCRY_CIPHER_TWOFISH128
instance CipherType CipherArcfour where cipherTypeToC _ = #const GCRY_CIPHER_ARCFOUR
instance CipherType CipherDES where cipherTypeToC _ = #const GCRY_CIPHER_DES

{-data CipherMode
	= ModeNone
	| ModeECB
	| ModeCFB
	| ModeCBC
	| ModeStream
	| ModeOFB
	| ModeCTR
	deriving (Show,Eq)-}

data ModeNone = ModeNone deriving Show
data ModeECB = ModeECB deriving Show
data ModeCFB = ModeCFB deriving Show
data ModeCBC = ModeCBC deriving Show
data ModeStream = ModeStream deriving Show
data ModeOFB = ModeOFB deriving Show
data ModeCTR = ModeCTR deriving Show

instance CipherMode ModeNone where cipherModeToC _ = #const GCRY_CIPHER_MODE_NONE
instance CipherMode ModeECB where cipherModeToC _ = #const GCRY_CIPHER_MODE_ECB
instance CipherMode ModeCFB where cipherModeToC _ = #const GCRY_CIPHER_MODE_CFB
instance CipherMode ModeCBC where cipherModeToC _ = #const GCRY_CIPHER_MODE_CBC
instance CipherMode ModeStream where cipherModeToC _ = #const GCRY_CIPHER_MODE_STREAM
instance CipherMode ModeOFB where cipherModeToC _ = #const GCRY_CIPHER_MODE_OFB
instance CipherMode ModeCTR where cipherModeToC _ = #const GCRY_CIPHER_MODE_CTR

data CipherFlag
	= Secure
	| EnableSync
	| CBC_CTS
	| CBC_MAC
	deriving (Show,Eq)

flagToC :: CipherFlag -> CUInt
flagToC Secure = #const GCRY_CIPHER_SECURE
flagToC EnableSync = #const GCRY_CIPHER_ENABLE_SYNC
flagToC CBC_CTS = #const GCRY_CIPHER_CBC_CTS
flagToC CBC_MAC = #const GCRY_CIPHER_CBC_MAC