x509-store 1.4.0 → 1.4.1
raw patch · 2 files changed
+54/−2 lines, 2 filesdep +asn1-encodingdep +asn1-typesdep +crypto-pubkey-typesdep ~x509
Dependencies added: asn1-encoding, asn1-types, crypto-pubkey-types
Dependency ranges changed: x509
Files
- Data/X509/File.hs +47/−0
- x509-store.cabal +7/−2
+ Data/X509/File.hs view
@@ -0,0 +1,47 @@+module Data.X509.File+ ( readSignedObject+ , readKeyFile+ ) where++import Control.Applicative+import Data.ASN1.Types+import Data.ASN1.BinaryEncoding+import Data.ASN1.Encoding+import qualified Data.X509 as X509+import Data.PEM (pemParseLBS, pemContent, pemName, PEM)+import qualified Data.ByteString.Lazy as L+import qualified Crypto.Types.PubKey.DSA as DSA++readPEMs :: FilePath -> IO [PEM]+readPEMs filepath = do+ content <- L.readFile filepath+ return $ either error id $ pemParseLBS content++-- | return all the signed objects in a file.+--+-- (only one type at a time).+readSignedObject :: (ASN1Object a, Eq a, Show a)+ => FilePath+ -> IO [X509.SignedExact a]+readSignedObject filepath = foldl pemToSigned [] <$> readPEMs filepath+ where pemToSigned acc pem =+ case X509.decodeSignedObject $ pemContent pem of+ Left _ -> acc+ Right obj -> obj : acc++-- | return all the public key that were successfully read from a file.+readKeyFile :: FilePath -> IO [X509.PrivKey]+readKeyFile path = foldl pemToKey [] <$> readPEMs path+ where pemToKey acc pem = do+ case decodeASN1' BER (pemContent pem) of+ Left _ -> acc+ Right asn1 -> case pemName pem of+ "RSA PRIVATE KEY" ->+ case fromASN1 asn1 of+ Left _ -> acc+ Right (k,_) -> X509.PrivKeyRSA k : acc+ "DSA PRIVATE KEY" ->+ case fromASN1 asn1 of+ Left _ -> acc+ Right (k,_) -> X509.PrivKeyDSA (DSA.toPrivateKey k) : acc+ _ -> acc
x509-store.cabal view
@@ -1,5 +1,5 @@ Name: x509-store-Version: 1.4.0+Version: 1.4.1 Description: X.509 collection accessing and storing methods for certificate, crl, exception list License: BSD3 License-file: LICENSE@@ -26,15 +26,20 @@ , bytestring , mtl , pem >= 0.1 && < 0.2- , x509+ , asn1-types+ , asn1-encoding+ , crypto-pubkey-types+ , x509 >= 1.4.3 , containers , directory , filepath , process , time Exposed-modules: Data.X509.CertificateStore+ Data.X509.File ghc-options: -Wall source-repository head type: git location: git://github.com/vincenthz/hs-certificate+ subdir: x509-store