peyotls-codec 0.3.0.0 → 0.3.1.0
raw patch · 2 files changed
+135/−4 lines, 2 filesdep +monads-tfPVP ok
version bump matches the API change (PVP)
Dependencies added: monads-tf
API changes (from Hackage documentation)
+ Network.PeyoTLS.Codec.Alert: ADBadRecMac :: AlertDesc
+ Network.PeyoTLS.Codec.Alert: ADCertEx :: AlertDesc
+ Network.PeyoTLS.Codec.Alert: ADCertUnk :: AlertDesc
+ Network.PeyoTLS.Codec.Alert: ADCloseNotify :: AlertDesc
+ Network.PeyoTLS.Codec.Alert: ADDecFail :: AlertDesc
+ Network.PeyoTLS.Codec.Alert: ADDecodeErr :: AlertDesc
+ Network.PeyoTLS.Codec.Alert: ADDecryptErr :: AlertDesc
+ Network.PeyoTLS.Codec.Alert: ADHsFailure :: AlertDesc
+ Network.PeyoTLS.Codec.Alert: ADIllParam :: AlertDesc
+ Network.PeyoTLS.Codec.Alert: ADInsSec :: AlertDesc
+ Network.PeyoTLS.Codec.Alert: ADInternalErr :: AlertDesc
+ Network.PeyoTLS.Codec.Alert: ADProtoVer :: AlertDesc
+ Network.PeyoTLS.Codec.Alert: ADRaw :: Word8 -> AlertDesc
+ Network.PeyoTLS.Codec.Alert: ADRecOverflow :: AlertDesc
+ Network.PeyoTLS.Codec.Alert: ADUnexMsg :: AlertDesc
+ Network.PeyoTLS.Codec.Alert: ADUnk :: AlertDesc
+ Network.PeyoTLS.Codec.Alert: ADUnkCa :: AlertDesc
+ Network.PeyoTLS.Codec.Alert: ADUnsCert :: AlertDesc
+ Network.PeyoTLS.Codec.Alert: ALFtl :: AlertLevel
+ Network.PeyoTLS.Codec.Alert: ALRaw :: Word8 -> AlertLevel
+ Network.PeyoTLS.Codec.Alert: ALWarning :: AlertLevel
+ Network.PeyoTLS.Codec.Alert: Alert :: AlertLevel -> AlertDesc -> String -> Alert
+ Network.PeyoTLS.Codec.Alert: ExternalAlert :: String -> Alert
+ Network.PeyoTLS.Codec.Alert: NotDetected :: String -> Alert
+ Network.PeyoTLS.Codec.Alert: data Alert
+ Network.PeyoTLS.Codec.Alert: data AlertDesc
+ Network.PeyoTLS.Codec.Alert: data AlertLevel
+ Network.PeyoTLS.Codec.Alert: instance Bytable Alert
+ Network.PeyoTLS.Codec.Alert: instance Bytable AlertDesc
+ Network.PeyoTLS.Codec.Alert: instance Bytable AlertLevel
+ Network.PeyoTLS.Codec.Alert: instance Error Alert
+ Network.PeyoTLS.Codec.Alert: instance Show Alert
+ Network.PeyoTLS.Codec.Alert: instance Show AlertDesc
+ Network.PeyoTLS.Codec.Alert: instance Show AlertLevel
Files
- peyotls-codec.cabal +4/−4
- src/Network/PeyoTLS/Codec/Alert.hs +131/−0
peyotls-codec.cabal view
@@ -2,7 +2,7 @@ cabal-version: >= 1.8 name: peyotls-codec-version: 0.3.0.0+version: 0.3.1.0 stability: Experimental author: Yoshikuni Jujo <PAF01143@nifty.ne.jp> maintainer: Yoshikuni Jujo <PAF01143@nifty.ne.jp>@@ -22,12 +22,12 @@ source-repository this type: git location: git://github.com/YoshikuniJujo/peyotls.git- tag: peyotls-0.1.6.9+ tag: peyotls-codec-0.3.1.0 library hs-source-dirs: src exposed-modules:- Network.PeyoTLS.Codec+ Network.PeyoTLS.Codec, Network.PeyoTLS.Codec.Alert other-modules: Network.PeyoTLS.Codec.ContentTypes Network.PeyoTLS.Codec.Hello, Network.PeyoTLS.Codec.Extension,@@ -35,7 +35,7 @@ Network.PeyoTLS.Codec.HSAlg Network.PeyoTLS.CipherSuite build-depends:- base == 4.*, word24 == 1.0.*, bytestring == 0.10.*,+ base == 4.*, word24 == 1.0.*, bytestring == 0.10.*, monads-tf == 0.1.*, asn1-encoding == 0.9.*, asn1-types == 0.3.*, x509 == 1.5.*, x509-store == 1.5.*, crypto-pubkey == 0.2.*, crypto-pubkey-types == 0.4.*,
+ src/Network/PeyoTLS/Codec/Alert.hs view
@@ -0,0 +1,131 @@+{-# LANGUAGE PackageImports, OverloadedStrings #-}++module Network.PeyoTLS.Codec.Alert (Alert(..), AlertLevel(..), AlertDesc(..)) where++import Control.Applicative+import "monads-tf" Control.Monad.Error.Class (Error(..))+import Data.Word (Word8)+import qualified Data.ByteString as BS+import qualified Codec.Bytable.BigEndian as B++modNm :: String+modNm = "Network.PeyoTLS.Codec.Alert"++-- | RFC 5246 7.2. Alert Protocol+--+-- @+-- struct {+-- AlertLevel level;+-- AlertDescription description;+-- } Alert;+-- @++data Alert+ = Alert AlertLevel AlertDesc String+ | ExternalAlert String+ | NotDetected String deriving Show++instance B.Bytable Alert where+ encode (Alert al ad _) = B.encode al `BS.append` B.encode ad+ encode _ = error "Alert.encode"+ decode alad = let (al, ad) = BS.splitAt 1 alad in+ Alert <$> B.decode al <*> B.decode ad <*> return ""++-- | RFC 5246 7.2. Alert Protocol+--+-- @+-- enum { warning(1), fatal(2), (255) } AlertLevel;+-- @++data AlertLevel = ALWarning | ALFtl | ALRaw Word8 deriving Show++instance B.Bytable AlertLevel where+ encode ALWarning = "\x01"+ encode ALFtl = "\x02"+ encode (ALRaw w) = BS.pack [w]+ decode bs = case BS.unpack bs of+ [al] -> Right $ case al of+ 1 -> ALWarning; 2 -> ALFtl; _ -> ALRaw al+ _ -> Left $ modNm ++ ": AlertLevel.decode"++-- | RFC 5246 7.2. Alert Protocol+--+-- @+-- enum {+-- close_notify(0),+-- unexpected_message(10),+-- bad_record_mac(20),+-- decryption_failed_RESERVED(21),+-- record_overflow(22),+-- decompression_failure(30),+-- handshake_failure(40),+-- no_certificate_RESERVED(41),+-- bad_certificate(42),+-- unsupported_certificate(43),+-- certificate_revoked(44),+-- certificate_expired(45),+-- certificate_unknown(46),+-- illegal_parameter(47),+-- unknown_ca(48),+-- access_denied(49),+-- decode_error(50),+-- decrypt_error(51),+-- export_restriction_RESERVED(60),+-- protocol_version(70),+-- insufficient_security(71),+-- internal_error(80),+-- user_canceled(90),+-- no_renegotiation(100),+-- unsupported_extension(110),+-- (255)+-- } AlertDescription;+-- @++data AlertDesc+ = ADCloseNotify | ADUnexMsg | ADBadRecMac | ADRecOverflow | ADDecFail+ | ADHsFailure | ADUnsCert | ADCertEx | ADCertUnk | ADIllParam+ | ADUnkCa | ADDecodeErr | ADDecryptErr | ADProtoVer | ADInsSec+ | ADInternalErr | ADUnk | ADRaw Word8+ deriving Show++instance B.Bytable AlertDesc where+ encode ADCloseNotify = "\0"+ encode ADUnexMsg = "\10"+ encode ADBadRecMac = "\20"+ encode ADRecOverflow = "\22"+ encode ADDecFail = "\30"+ encode ADHsFailure = "\40"+ encode ADUnsCert = "\43"+ encode ADCertEx = "\45"+ encode ADCertUnk = "\46"+ encode ADIllParam = "\47"+ encode ADUnkCa = "\48"+ encode ADDecodeErr = "\50"+ encode ADDecryptErr = "\51"+ encode ADProtoVer = "\70"+ encode ADInsSec = "\71"+ encode ADInternalErr = "\80"+ encode ADUnk = error $ modNm ++ ": AlertDesc,encode"+ encode (ADRaw w) = BS.pack [w]+ decode bs = case BS.unpack bs of+ [ad] -> Right $ case ad of+ 0 -> ADCloseNotify+ 10 -> ADUnexMsg+ 20 -> ADBadRecMac+ 22 -> ADRecOverflow+ 30 -> ADDecFail+ 40 -> ADHsFailure+ 43 -> ADUnsCert+ 45 -> ADCertEx+ 46 -> ADCertUnk+ 47 -> ADIllParam+ 48 -> ADUnkCa+ 50 -> ADDecodeErr+ 51 -> ADDecryptErr+ 70 -> ADProtoVer+ 71 -> ADInsSec+ 80 -> ADInternalErr+ w -> ADRaw w+ _ -> Left $ modNm ++ ": AlertDesc.decode"++instance Error Alert where strMsg = NotDetected