packages feed

asn1-data 0.4.6 → 0.5.0

raw patch · 8 files changed

+56/−54 lines, 8 filesdep ~enumeratorPVP ok

version bump matches the API change (PVP)

Dependency ranges changed: enumerator

API changes (from Hackage documentation)

- Data.ASN1.BER: BMPString :: Text -> ASN1
+ Data.ASN1.BER: BMPString :: String -> ASN1
- Data.ASN1.BER: IA5String :: Text -> ASN1
+ Data.ASN1.BER: IA5String :: String -> ASN1
- Data.ASN1.BER: PrintableString :: Text -> ASN1
+ Data.ASN1.BER: PrintableString :: String -> ASN1
- Data.ASN1.BER: T61String :: Text -> ASN1
+ Data.ASN1.BER: T61String :: String -> ASN1
- Data.ASN1.BER: UTF8String :: Text -> ASN1
+ Data.ASN1.BER: UTF8String :: String -> ASN1
- Data.ASN1.BER: UniversalString :: Text -> ASN1
+ Data.ASN1.BER: UniversalString :: String -> ASN1
- Data.ASN1.CER: BMPString :: Text -> ASN1
+ Data.ASN1.CER: BMPString :: String -> ASN1
- Data.ASN1.CER: IA5String :: Text -> ASN1
+ Data.ASN1.CER: IA5String :: String -> ASN1
- Data.ASN1.CER: PrintableString :: Text -> ASN1
+ Data.ASN1.CER: PrintableString :: String -> ASN1
- Data.ASN1.CER: T61String :: Text -> ASN1
+ Data.ASN1.CER: T61String :: String -> ASN1
- Data.ASN1.CER: UTF8String :: Text -> ASN1
+ Data.ASN1.CER: UTF8String :: String -> ASN1
- Data.ASN1.CER: UniversalString :: Text -> ASN1
+ Data.ASN1.CER: UniversalString :: String -> ASN1
- Data.ASN1.DER: BMPString :: Text -> ASN1
+ Data.ASN1.DER: BMPString :: String -> ASN1
- Data.ASN1.DER: IA5String :: Text -> ASN1
+ Data.ASN1.DER: IA5String :: String -> ASN1
- Data.ASN1.DER: PrintableString :: Text -> ASN1
+ Data.ASN1.DER: PrintableString :: String -> ASN1
- Data.ASN1.DER: T61String :: Text -> ASN1
+ Data.ASN1.DER: T61String :: String -> ASN1
- Data.ASN1.DER: UTF8String :: Text -> ASN1
+ Data.ASN1.DER: UTF8String :: String -> ASN1
- Data.ASN1.DER: UniversalString :: Text -> ASN1
+ Data.ASN1.DER: UniversalString :: String -> ASN1
- Data.ASN1.Stream: BMPString :: Text -> ASN1
+ Data.ASN1.Stream: BMPString :: String -> ASN1
- Data.ASN1.Stream: IA5String :: Text -> ASN1
+ Data.ASN1.Stream: IA5String :: String -> ASN1
- Data.ASN1.Stream: PrintableString :: Text -> ASN1
+ Data.ASN1.Stream: PrintableString :: String -> ASN1
- Data.ASN1.Stream: T61String :: Text -> ASN1
+ Data.ASN1.Stream: T61String :: String -> ASN1
- Data.ASN1.Stream: UTF8String :: Text -> ASN1
+ Data.ASN1.Stream: UTF8String :: String -> ASN1
- Data.ASN1.Stream: UniversalString :: Text -> ASN1
+ Data.ASN1.Stream: UniversalString :: String -> ASN1
- Data.ASN1.Types: BMPString :: Text -> ASN1t
+ Data.ASN1.Types: BMPString :: String -> ASN1t
- Data.ASN1.Types: IA5String :: Text -> ASN1t
+ Data.ASN1.Types: IA5String :: String -> ASN1t
- Data.ASN1.Types: PrintableString :: Text -> ASN1t
+ Data.ASN1.Types: PrintableString :: String -> ASN1t
- Data.ASN1.Types: T61String :: Text -> ASN1t
+ Data.ASN1.Types: T61String :: String -> ASN1t
- Data.ASN1.Types: UTF8String :: Text -> ASN1t
+ Data.ASN1.Types: UTF8String :: String -> ASN1t
- Data.ASN1.Types: UniversalString :: Text -> ASN1t
+ Data.ASN1.Types: UniversalString :: String -> ASN1t

Files

Data/ASN1/BER.hs view
@@ -57,9 +57,10 @@ import qualified Data.ByteString.Lazy as L import Data.ByteString (ByteString) -import Data.Enumerator.IO+import Data.Enumerator.Binary (enumFile) import Data.Enumerator (Iteratee(..), Enumeratee, ($$), (>>==)) import qualified Data.Enumerator as E+import qualified Data.Enumerator.List as EL  decodeConstruction :: ASN1Header -> ASN1ConstructionType decodeConstruction (ASN1Header Universal 0x10 _ _) = Sequence@@ -72,7 +73,7 @@ enumReadRawRepr = E.checkDone $ \k -> k (E.Chunks []) >>== loop [] 	where 		loop l = E.checkDone $ go l-		go l k = E.head >>= \x -> case x of+		go l k = EL.head >>= \x -> case x of 			Nothing -> if l == [] then k (E.Chunks []) >>== return else E.throwError (Raw.ASN1ParsingPartial) 			Just el -> p l k el @@ -81,7 +82,7 @@  		{- on header with construction, we pop the next element in the enumerator and 		 - expect a ConstructionBegin. the list context is prepended by the new construction -}-		p l k el@(Raw.Header hdr@(ASN1Header _ _ True _)) = E.head >>= \z -> case z of+		p l k el@(Raw.Header hdr@(ASN1Header _ _ True _)) = EL.head >>= \z -> case z of 			Just el2@Raw.ConstructionBegin -> 				let ctype = decodeConstruction hdr in 				k (E.Chunks [(Start ctype, [el,el2])]) >>== loop ((End ctype,[Raw.ConstructionEnd]) : l)@@ -90,7 +91,7 @@  		{- on header with primtive, we pop the next element in the enumerator and 		 - expect a Primitive -}-		p l k el@(Raw.Header hdr@(ASN1Header _ _ False _)) = E.head >>= \z -> case z of+		p l k el@(Raw.Header hdr@(ASN1Header _ _ False _)) = EL.head >>= \z -> case z of 			Just el2@(Raw.Primitive prim) -> 				let (Right pr) = decodePrimitive hdr prim in 				k (E.Chunks [(pr, [el,el2])]) >>== loop l@@ -116,7 +117,7 @@ 	E.checkDone $ \k -> k (E.Chunks []) >>== loop 	where 		loop = E.checkDone $ go-		go k = E.head >>= \x -> case x of+		go k = EL.head >>= \x -> case x of 			Nothing          -> k (E.Chunks []) >>== return 			Just n@(Start _) -> consumeTillEnd >>= \y -> k (E.Chunks [(n, y)] ) >>== loop 			Just p           -> k (E.Chunks [(p, [])] ) >>== loop@@ -199,29 +200,29 @@  {-| decode a list of raw ASN1Events into a stream of ASN1 types -} decodeASN1Events :: [Raw.ASN1Event] -> Either ASN1Err [ASN1]-decodeASN1Events evs = wrapASN1Err $ runIdentity (iterateEvents evs E.consume)+decodeASN1Events evs = wrapASN1Err $ runIdentity (iterateEvents evs EL.consume)  {-| decode a list of raw ASN1Events into a stream of ASN1Repr types -} decodeASN1EventsRepr :: [Raw.ASN1Event] -> Either ASN1Err [ASN1Repr]-decodeASN1EventsRepr evs = wrapASN1Err $ runIdentity (iterateEventsRepr evs E.consume)+decodeASN1EventsRepr evs = wrapASN1Err $ runIdentity (iterateEventsRepr evs EL.consume)  {-| decode a lazy bytestring as an ASN1 stream -} decodeASN1Stream :: L.ByteString -> Either ASN1Err [ASN1]-decodeASN1Stream l = wrapASN1Err $ runIdentity (iterateByteString l E.consume)+decodeASN1Stream l = wrapASN1Err $ runIdentity (iterateByteString l EL.consume)  {-| decode a lazy bytestring as an ASN1repr stream -} decodeASN1StreamRepr :: L.ByteString -> Either ASN1Err [ASN1Repr]-decodeASN1StreamRepr l = wrapASN1Err $ runIdentity (iterateByteStringRepr l E.consume)+decodeASN1StreamRepr l = wrapASN1Err $ runIdentity (iterateByteStringRepr l EL.consume)  {-| encode an ASN1 Stream as raw ASN1 Events -} encodeASN1Events :: [ASN1] -> Either ASN1Err [Raw.ASN1Event] encodeASN1Events o = wrapASN1Err $ runIdentity run-	where run = E.run (E.enumList 8 o $$ E.joinI $ enumWriteRaw $$ E.consume)+	where run = E.run (E.enumList 8 o $$ E.joinI $ enumWriteRaw $$ EL.consume)  {-| encode an ASN1 Stream as lazy bytestring -} encodeASN1Stream :: [ASN1] -> Either ASN1Err L.ByteString encodeASN1Stream l = either Left (Right . L.fromChunks) $ wrapASN1Err $ runIdentity run-	where run = E.run (E.enumList 1 l $$ E.joinI $ enumWriteBytes $$ E.consume)+	where run = E.run (E.enumList 1 l $$ E.joinI $ enumWriteBytes $$ EL.consume)  {-# DEPRECATED decodeASN1s "use stream types with decodeASN1Stream" #-} decodeASN1s :: L.ByteString -> Either ASN1Err [ASN1t]
Data/ASN1/DER.hs view
@@ -61,8 +61,9 @@ import Control.Exception  import Data.Enumerator (Iteratee, Enumeratee, ($$), (>>==))-import Data.Enumerator.IO+import Data.Enumerator.Binary (enumFile) import qualified Data.Enumerator as E+import qualified Data.Enumerator.List as EL  {- | Check if the length is the minimum possible and it's not indefinite -} checkLength :: ASN1Length -> Maybe ASN1Err@@ -79,7 +80,7 @@ checkRawDER = E.checkDone $ \k -> k (E.Chunks []) >>== loop 	where 		loop = E.checkDone go-		go k = E.head >>= \x -> case x of+		go k = EL.head >>= \x -> case x of 			Nothing -> k (E.Chunks []) >>== return 			Just l  -> case tyCheck l of 				Nothing  -> k (E.Chunks [l]) >>== loop@@ -141,29 +142,29 @@  {-| decode a list of raw ASN1Events into a stream of ASN1 types -} decodeASN1Events :: [Raw.ASN1Event] -> Either ASN1Err [ASN1]-decodeASN1Events evs = wrapASN1Err $ runIdentity (iterateEvents evs E.consume)+decodeASN1Events evs = wrapASN1Err $ runIdentity (iterateEvents evs EL.consume)  {-| decode a list of raw ASN1Events into a stream of ASN1Repr types -} decodeASN1EventsRepr :: [Raw.ASN1Event] -> Either ASN1Err [ASN1Repr]-decodeASN1EventsRepr evs = wrapASN1Err $ runIdentity (iterateEventsRepr evs E.consume)+decodeASN1EventsRepr evs = wrapASN1Err $ runIdentity (iterateEventsRepr evs EL.consume)  {-| decode a lazy bytestring as an ASN1 stream -} decodeASN1Stream :: L.ByteString -> Either ASN1Err [ASN1]-decodeASN1Stream l = wrapASN1Err $ runIdentity (iterateByteString l E.consume)+decodeASN1Stream l = wrapASN1Err $ runIdentity (iterateByteString l EL.consume)  {-| decode a lazy bytestring as an ASN1repr stream -} decodeASN1StreamRepr :: L.ByteString -> Either ASN1Err [ASN1Repr]-decodeASN1StreamRepr l = wrapASN1Err $ runIdentity (iterateByteStringRepr l E.consume)+decodeASN1StreamRepr l = wrapASN1Err $ runIdentity (iterateByteStringRepr l EL.consume)  {-| encode an ASN1 Stream as raw ASN1 Events -} encodeASN1Events :: [ASN1] -> Either ASN1Err [Raw.ASN1Event] encodeASN1Events o = wrapASN1Err $ runIdentity run-	where run = E.run (E.enumList 8 o $$ E.joinI $ enumWriteRaw $$ E.consume)+	where run = E.run (E.enumList 8 o $$ E.joinI $ enumWriteRaw $$ EL.consume)  {-| encode an ASN1 Stream as lazy bytestring -} encodeASN1Stream :: [ASN1] -> Either ASN1Err L.ByteString encodeASN1Stream l = either Left (Right . L.fromChunks) $ wrapASN1Err $ runIdentity run-	where run = E.run (E.enumList 1 l $$ E.joinI $ enumWriteBytes $$ E.consume)+	where run = E.run (E.enumList 1 l $$ E.joinI $ enumWriteBytes $$ EL.consume)  {-# DEPRECATED decodeASN1s "use stream types with decodeASN1Stream" #-} decodeASN1s :: L.ByteString -> Either ASN1Err [ASN1t]
Data/ASN1/Prim.hs view
@@ -125,20 +125,20 @@ encodePrimitiveData (OID oid)           = putOID oid encodePrimitiveData (Real _)            = B.empty -- not implemented encodePrimitiveData Enumerated          = B.empty -- not implemented-encodePrimitiveData (UTF8String b)      = putString $ encodeUtf8 b+encodePrimitiveData (UTF8String b)      = putString $ encodeUtf8 $ T.pack b encodePrimitiveData (NumericString b)   = putString b-encodePrimitiveData (PrintableString b) = putString $ encodeUtf8 b-encodePrimitiveData (T61String b)       = putString $ encodeUtf8 b+encodePrimitiveData (PrintableString b) = putString $ encodeUtf8 $ T.pack b+encodePrimitiveData (T61String b)       = putString $ encodeUtf8 $ T.pack b encodePrimitiveData (VideoTexString b)  = putString b-encodePrimitiveData (IA5String b)       = putString $ encodeUtf8 b+encodePrimitiveData (IA5String b)       = putString $ encodeUtf8 $ T.pack b encodePrimitiveData (UTCTime t)         = putUTCTime t encodePrimitiveData (GeneralizedTime t) = putGeneralizedTime t encodePrimitiveData (GraphicString b)   = putString b encodePrimitiveData (VisibleString b)   = putString b encodePrimitiveData (GeneralString b)   = putString b-encodePrimitiveData (UniversalString b) = putString $ encodeUtf32BE b+encodePrimitiveData (UniversalString b) = putString $ encodeUtf32BE $ T.pack b encodePrimitiveData (CharacterString b) = putString b-encodePrimitiveData (BMPString b)       = putString $ encodeUCS2BE b+encodePrimitiveData (BMPString b)       = putString $ encodeUCS2BE $ T.pack b encodePrimitiveData (Other _ _ b)       = b encodePrimitiveData o                   = error ("not a primitive " ++ show o) @@ -269,19 +269,19 @@ getNumericString = either Left (Right . NumericString) . getString (\_ -> Nothing)  getPrintableString :: ByteString -> Either ASN1Err ASN1-getPrintableString = either Left (Right . PrintableString . decodeASCII) . getString (\_ -> Nothing)+getPrintableString = either Left (Right . PrintableString . T.unpack . decodeASCII) . getString (\_ -> Nothing)  getUTF8String :: ByteString -> Either ASN1Err ASN1-getUTF8String = either Left (Right . UTF8String . decodeUtf8) . getString (\_ -> Nothing)+getUTF8String = either Left (Right . UTF8String . T.unpack . decodeUtf8) . getString (\_ -> Nothing)  getT61String :: ByteString -> Either ASN1Err ASN1-getT61String = either Left (Right . T61String . decodeASCII) . getString (\_ -> Nothing)+getT61String = either Left (Right . T61String . T.unpack . decodeASCII) . getString (\_ -> Nothing)  getVideoTexString :: ByteString -> Either ASN1Err ASN1 getVideoTexString = either Left (Right . VideoTexString) . getString (\_ -> Nothing)  getIA5String :: ByteString -> Either ASN1Err ASN1-getIA5String = either Left (Right . IA5String . decodeASCII) . getString (\_ -> Nothing)+getIA5String = either Left (Right . IA5String . T.unpack . decodeASCII) . getString (\_ -> Nothing)  getGraphicString :: ByteString -> Either ASN1Err ASN1 getGraphicString = either Left (Right . GraphicString) . getString (\_ -> Nothing)@@ -293,13 +293,13 @@ getGeneralString = either Left (Right . GeneralString) . getString (\_ -> Nothing)  getUniversalString :: ByteString -> Either ASN1Err ASN1-getUniversalString = either Left (Right . UniversalString . decodeUtf32BE) . getString (\_ -> Nothing)+getUniversalString = either Left (Right . UniversalString . T.unpack . decodeUtf32BE) . getString (\_ -> Nothing)  getCharacterString :: ByteString -> Either ASN1Err ASN1 getCharacterString = either Left (Right . CharacterString) . getString (\_ -> Nothing)  getBMPString :: ByteString -> Either ASN1Err ASN1-getBMPString = either Left (Right . BMPString . decodeUCS2BE) . getString (\_ -> Nothing)+getBMPString = either Left (Right . BMPString . T.unpack . decodeUCS2BE) . getString (\_ -> Nothing)  getNull :: ByteString -> Either ASN1Err ASN1 getNull s = if B.length s == 0 then Right Null else Left $ ASN1Misc "Null: data length not within bound"
Data/ASN1/Raw.hs view
@@ -31,7 +31,8 @@  import Data.Enumerator hiding (head, length, map) import qualified Data.Enumerator as E-import Data.Enumerator.IO+import qualified Data.Enumerator.List as EL+import Data.Enumerator.Binary (enumFile) import Data.Attoparsec.Enumerator import Data.Attoparsec import qualified Data.Attoparsec as A@@ -262,7 +263,7 @@ 	where 		putEoc    = putHeader $ ASN1Header Universal 0 False (LenShort 0) 		loop eocs = checkDone $ go eocs-		go eocs k = E.head >>= \x -> case x of+		go eocs k = EL.head >>= \x -> case x of 			Nothing                -> 				if eocs == [] then k (Chunks []) >>== return else E.throwError ASN1WritingUnexpectedInputEOF 			Just (Header hdr@(ASN1Header _ _ True len)) ->@@ -276,6 +277,6 @@ 				False : tl -> k (Chunks []) >>== loop tl  toBytes :: [ASN1Event] -> L.ByteString-toBytes evs = case runIdentity (run (enumList 8 evs $$ joinI (enumWriteBytes $$ E.consume))) of+toBytes evs = case runIdentity (run (enumList 8 evs $$ joinI (enumWriteBytes $$ EL.consume))) of 	Left err -> error $ show err 	Right l  -> L.fromChunks l
Data/ASN1/Stream.hs view
@@ -7,7 +7,6 @@ 	) where  import Data.ASN1.Raw-import Data.Text.Lazy (Text) import Data.ByteString (ByteString) import qualified Data.ByteString.Lazy as L @@ -26,20 +25,20 @@ 	| OID [Integer] 	| Real Double 	| Enumerated-	| UTF8String Text+	| UTF8String String 	| NumericString L.ByteString-	| PrintableString Text-	| T61String Text+	| PrintableString String+	| T61String String 	| VideoTexString L.ByteString-	| IA5String Text+	| IA5String String 	| UTCTime (Int, Int, Int, Int, Int, Int, Bool) 	| GeneralizedTime (Int, Int, Int, Int, Int, Int, Bool) 	| GraphicString L.ByteString 	| VisibleString L.ByteString 	| GeneralString L.ByteString-	| UniversalString Text+	| UniversalString String 	| CharacterString L.ByteString-	| BMPString Text+	| BMPString String 	| Other ASN1Class ASN1Tag ByteString 	| Start ASN1ConstructionType 	| End ASN1ConstructionType
Data/ASN1/Types.hs view
@@ -7,7 +7,6 @@ import qualified Data.ASN1.Stream as S import qualified Data.ByteString.Lazy as L import Data.ByteString (ByteString)-import Data.Text.Lazy (Text) import Data.ASN1.Raw (ASN1Class, ASN1Tag)  data ASN1t =@@ -19,20 +18,20 @@ 	| OID [Integer] 	| Real Double 	| Enumerated-	| UTF8String Text+	| UTF8String String 	| NumericString L.ByteString-	| PrintableString Text-	| T61String Text+	| PrintableString String+	| T61String String 	| VideoTexString L.ByteString-	| IA5String Text+	| IA5String String 	| UTCTime (Int, Int, Int, Int, Int, Int, Bool) 	| GeneralizedTime (Int, Int, Int, Int, Int, Int, Bool) 	| GraphicString L.ByteString 	| VisibleString L.ByteString 	| GeneralString L.ByteString-	| UniversalString Text+	| UniversalString String 	| CharacterString L.ByteString-	| BMPString Text+	| BMPString String 	| Other ASN1Class ASN1Tag ByteString 	| Sequence [ASN1t] 	| Set [ASN1t]
Tests.hs view
@@ -14,6 +14,7 @@ import qualified Data.ByteString.Lazy as L import qualified Data.Text.Lazy as T import qualified Data.Enumerator as E+import qualified Data.Enumerator.List as EL import Data.Enumerator (($$))  import Control.Monad@@ -113,11 +114,11 @@ arbitraryPrintString = do 	let printableString = (['a'..'z'] ++ ['A'..'Z'] ++ ['0'..'9'] ++ " ()+,-./:=?") 	x <- replicateM 21 (elements printableString)-	return $ T.pack x+	return $ x  arbitraryIA5String = do 	x <- replicateM 21 (elements $ map toEnum [0..127])-	return $ T.pack x+	return $ x  instance Arbitrary ASN1 where 	arbitrary = oneof@@ -192,7 +193,7 @@  prop_event_marshalling_id :: ASN1Events -> Bool prop_event_marshalling_id (ASN1Events e) =-	let r = runIdentity $ E.run (E.enumList 1 e $$ E.joinI $ enumWriteReadBytes $$ E.consume) in+	let r = runIdentity $ E.run (E.enumList 1 e $$ E.joinI $ enumWriteReadBytes $$ EL.consume) in 	case r of 		Left _  -> False 		Right z -> e == z@@ -201,7 +202,7 @@  prop_asn1_event_marshalling_id :: ASN1 -> Bool prop_asn1_event_marshalling_id x =-	let r = runIdentity $ E.run (E.enumList 1 [x] $$ E.joinI $ enumWriteReadRaw $$ E.consume) in+	let r = runIdentity $ E.run (E.enumList 1 [x] $$ E.joinI $ enumWriteReadRaw $$ EL.consume) in 	case r of 		Left _  -> False 		Right z -> [x] == z
asn1-data.cabal view
@@ -1,5 +1,5 @@ Name:                asn1-data-Version:             0.4.6+Version:             0.5.0 Description:     ASN1 data reader and writer in raw form with supports for high level forms of ASN1 (BER, CER and DER).     .@@ -26,7 +26,7 @@   Build-Depends:     base >= 3 && < 5,                      bytestring,                      text >= 0.11,-                     enumerator >= 0.4 && < 0.5,+                     enumerator >= 0.4.5 && < 0.5,                      attoparsec >= 0.8 && < 0.9,                      attoparsec-enumerator >= 0.2 && < 0.3,                      mtl