asn1-encoding 0.8.0 → 0.8.1
raw patch · 2 files changed
+18/−8 lines, 2 filesPVP ok
version bump matches the API change (PVP)
API changes (from Hackage documentation)
Files
- Data/ASN1/Prim.hs +17/−7
- asn1-encoding.cabal +1/−1
Data/ASN1/Prim.hs view
@@ -57,6 +57,7 @@ import Data.Time.Calendar import Data.Time.Clock import Data.Time.LocalTime+import Control.Applicative import Control.Arrow (first) encodeHeader :: Bool -> ASN1Length -> ASN1 -> ASN1Header@@ -165,7 +166,7 @@ decodePrimitive (ASN1Header Universal 0x7 _ _) _ = Left $ TypeNotImplemented "Object Descriptor" decodePrimitive (ASN1Header Universal 0x8 _ _) _ = Left $ TypeNotImplemented "External" decodePrimitive (ASN1Header Universal 0x9 _ _) _ = Left $ TypeNotImplemented "real"-decodePrimitive (ASN1Header Universal 0xa _ _) _ = Left $ TypeNotImplemented "enumerated"+decodePrimitive (ASN1Header Universal 0xa _ _) p = getEnumerated p decodePrimitive (ASN1Header Universal 0xb _ _) _ = Left $ TypeNotImplemented "EMBEDDED PDV" decodePrimitive (ASN1Header Universal 0xc _ _) p = getCharacterString UTF8 p decodePrimitive (ASN1Header Universal 0xd _ _) _ = Left $ TypeNotImplemented "RELATIVE-OID"@@ -198,17 +199,26 @@ {- | getInteger, parse a value bytestring and get the integer out of the two complement encoded bytes -} getInteger :: ByteString -> Either ASN1Error ASN1-getInteger s- | B.length s == 0 = Left $ TypeDecodingFailed "integer: null encoding"- | B.length s == 1 = Right $ IntVal $ snd $ intOfBytes s+{-# INLINE getInteger #-}+getInteger s = IntVal <$> getIntegerRaw "integer" s++{- | getEnumerated, parse an enumerated value the same way that integer values are parsed. -}+getEnumerated :: ByteString -> Either ASN1Error ASN1+{-# INLINE getEnumerated #-}+getEnumerated s = Enumerated <$> getIntegerRaw "enumerated" s++{- | According to X.690 section 8.4 integer and enumerated values should be encoded the same way. -}+getIntegerRaw :: String -> ByteString -> Either ASN1Error Integer+getIntegerRaw typestr s+ | B.length s == 0 = Left . TypeDecodingFailed $ typestr ++ ": null encoding"+ | B.length s == 1 = Right $ snd $ intOfBytes s | otherwise = if (v1 == 0xff && testBit v2 7) || (v1 == 0x0 && (not $ testBit v2 7))- then Left $ TypeDecodingFailed "integer: not shortest encoding"- else Right $ IntVal $ snd $ intOfBytes s+ then Left . TypeDecodingFailed $ typestr ++ ": not shortest encoding"+ else Right $ snd $ intOfBytes s where v1 = s `B.index` 0 v2 = s `B.index` 1- getBitString :: ByteString -> Either ASN1Error ASN1 getBitString s =
asn1-encoding.cabal view
@@ -1,5 +1,5 @@ Name: asn1-encoding-Version: 0.8.0+Version: 0.8.1 Description: ASN1 data reader and writer in raw form with supports for high level forms of ASN1 (BER, and DER). License: BSD3