hs-tls/core/Network/TLS/Util/ASN1.hs

38 lines
1.2 KiB
Haskell
Raw Normal View History

2013-12-05 06:51:23 +00:00
-- |
-- Module : Network.TLS.Util.ASN1
-- License : BSD-style
-- Maintainer : Vincent Hanquez <vincent@snarc.org>
-- Stability : experimental
-- Portability : unknown
--
-- ASN1 utils for TLS
--
module Network.TLS.Util.ASN1
( decodeASN1Object
, encodeASN1Object
) where
import Data.ASN1.Types (fromASN1, toASN1, ASN1Object)
import Data.ASN1.Encoding (decodeASN1', encodeASN1')
import Data.ASN1.BinaryEncoding (DER(..))
import Data.ByteString (ByteString)
-- | Attempt to decode a bytestring representing
-- an DER ASN.1 serialized object into the object.
decodeASN1Object :: ASN1Object a
=> String
-> ByteString
-> Either String a
decodeASN1Object name bs =
case decodeASN1' DER bs of
Left e -> Left (name ++ ": cannot decode ASN1: " ++ show e)
Right asn1 -> case fromASN1 asn1 of
Left e -> Left (name ++ ": cannot parse ASN1: " ++ show e)
Right (d,_) -> Right d
-- | Encode an ASN.1 Object to the DER serialized bytestring
encodeASN1Object :: ASN1Object a
=> a
-> ByteString
encodeASN1Object obj = encodeASN1' DER $ toASN1 obj []