pem 0.2.2 → 0.2.3
raw patch · 6 files changed
+17/−21 lines, 6 filesdep +memorydep −base64-bytestringdep ~bytestring
Dependencies added: memory
Dependencies removed: base64-bytestring
Dependency ranges changed: bytestring
Files
- Data/PEM.hs +2/−2
- Data/PEM/Parser.hs +8/−7
- Data/PEM/Writer.hs +2/−2
- LICENSE +1/−1
- README.md +0/−4
- pem.cabal +4/−5
Data/PEM.hs view
@@ -8,10 +8,10 @@ -- Read and write PEM files -- module Data.PEM- ( module Data.PEM.Types+ ( module Data.PEM.Types , module Data.PEM.Writer , module Data.PEM.Parser- ) where+ ) where import Data.PEM.Types import Data.PEM.Writer
Data/PEM/Parser.hs view
@@ -11,7 +11,7 @@ -- A PEM contains contains from one to many PEM sections. -- Each section contains an optional key-value pair header -- and a binary content encoded in base64.--- +-- module Data.PEM.Parser ( pemParseBS , pemParseLBS@@ -22,9 +22,10 @@ import qualified Data.ByteString.Char8 as BC import qualified Data.ByteString.Lazy as L import qualified Data.ByteString.Lazy.Char8 as LC-import qualified Data.ByteString.Base64.Lazy as Base64 import Data.PEM.Types+import Data.ByteArray.Encoding (Base(Base64), convertFromBase)+import qualified Data.ByteArray as BA type Line = L.ByteString @@ -51,23 +52,23 @@ getPemHeaderLoop (r:rs) = -- FIXME doesn't properly parse headers yet Right ([], r:rs) + getPemContent :: String -> [(String,ByteString)] -> [BC.ByteString] -> [L.ByteString] -> Either (Maybe String) (PEM, [L.ByteString]) getPemContent name hdrs contentLines lbs = case lbs of [] -> Left $ Just "invalid PEM: no end marker found" (l:ls) -> case endMarker `prefixEat` l of Nothing ->- let content = Base64.decodeLenient l- in getPemContent name hdrs (content : contentLines) ls+ case convertFromBase Base64 $ L.toStrict l of+ Left err -> Left $ Just ("invalid PEM: decoding failed: " ++ err)+ Right content -> getPemContent name hdrs (content : contentLines) ls Just n -> getPemName (finalizePem name hdrs contentLines) n ls finalizePem name hdrs contentLines nameEnd lbs | nameEnd /= name = Left $ Just "invalid PEM: end name doesn't match start name" | otherwise = let pem = PEM { pemName = name , pemHeader = hdrs- , pemContent = toSBS $ L.concat $ reverse contentLines }+ , pemContent = BA.concat $ reverse contentLines } in Right (pem, lbs)-- toSBS = BC.concat . L.toChunks prefixEat prefix x = let (x1, x2) = L.splitAt (L.length prefix) x
Data/PEM/Writer.hs view
@@ -16,7 +16,7 @@ import qualified Data.ByteString as B import qualified Data.ByteString.Char8 as BC import qualified Data.ByteString.Lazy as L-import qualified Data.ByteString.Base64 as Base64+import Data.ByteArray.Encoding (Base(Base64), convertToBase) -- | write a PEM structure to a builder pemWrite :: PEM -> L.ByteString@@ -33,7 +33,7 @@ toHeader (k,v) = [ BC.pack k, ":", v, "\n" ] -- expect only ASCII. need to find a type to represent it. sectionName = BC.pack $ pemName pem- encodeLine l = Base64.encode l `B.append` "\n"+ encodeLine l = convertToBase Base64 l `B.append` "\n" splitChunks b | B.length b > 48 = let (x,y) = B.splitAt 48 b in x : splitChunks y
LICENSE view
@@ -1,4 +1,4 @@-Copyright (c) 2010-2012 Vincent Hanquez <vincent@snarc.org>+Copyright (c) 2010-2018 Vincent Hanquez <vincent@snarc.org> All rights reserved.
− README.md
@@ -1,4 +0,0 @@-PEM haskell library-===================--Handle Privacy Enhanced Message (PEM) format.
pem.cabal view
@@ -1,25 +1,24 @@ Name: pem-Version: 0.2.2-Description: Privacy Enhanced Mail (PEM) format reader and writer.+Version: 0.2.3+Synopsis: Privacy Enhanced Mail (PEM) format reader and writer.+Description: Privacy Enhanced Mail (PEM) format reader and writer. long description License: BSD3 License-file: LICENSE Copyright: Vincent Hanquez <vincent@snarc.org> Author: Vincent Hanquez <vincent@snarc.org> Maintainer: Vincent Hanquez <vincent@snarc.org>-Synopsis: Privacy Enhanced Mail (PEM) format reader and writer. Build-Type: Simple Category: Data stability: experimental Cabal-Version: >=1.8 Homepage: http://github.com/vincenthz/hs-pem-data-files: README.md extra-source-files: Tests/pem.hs Library Build-Depends: base >= 3 && < 5 , mtl , bytestring- , base64-bytestring >= 1.0.0+ , memory Exposed-modules: Data.PEM Other-modules: Data.PEM.Parser Data.PEM.Writer