{-# LANGUAGE OverloadedStrings #-} module Network.PeyoTLS.Codec.HSAlg (SignAlg(..), HashAlg(..)) where import Data.Word (Word8) import qualified Data.ByteString as BS import qualified Codec.Bytable.BigEndian as B modNm :: String modNm = "Network.PeyoTLS.Codec.HSAlg" data HashAlg = Sha1 | Sha224 | Sha256 | Sha384 | Sha512 | HARaw Word8 deriving Show instance B.Bytable HashAlg where encode Sha1 = "\x02" encode Sha224 = "\x03" encode Sha256 = "\x04" encode Sha384 = "\x05" encode Sha512 = "\x06" encode (HARaw w) = BS.pack [w] decode bs = case BS.unpack bs of [ha] -> Right $ case ha of 2 -> Sha1 ; 3 -> Sha224; 4 -> Sha256 5 -> Sha384; 6 -> Sha512; _ -> HARaw ha _ -> Left $ modNm ++ ": HashAlg.decode" instance B.Parsable HashAlg where parse = B.take 1 data SignAlg = Rsa | Dsa | Ecdsa | SARaw Word8 deriving (Show, Eq) instance B.Bytable SignAlg where encode Rsa = "\x01" encode Dsa = "\x02" encode Ecdsa = "\x03" encode (SARaw w) = BS.pack [w] decode bs = case BS.unpack bs of [sa] -> Right $ case sa of 1 -> Rsa; 2 -> Dsa; 3 -> Ecdsa; _ -> SARaw sa _ -> Left $ modNm ++ ": SignAlg.decode" instance B.Parsable SignAlg where parse = B.take 1