jose 0.1.26.0 → 0.1.27.0
raw patch · 4 files changed
+88/−58 lines, 4 filesdep −josedep ~byteabledep ~certificatedep ~crypto-pubkeyPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
Dependencies removed: jose
Dependency ranges changed: byteable, certificate, crypto-pubkey, crypto-random, cryptohash, template-haskell, text
API changes (from Hackage documentation)
+ Crypto.JOSE.JWK: jwkX5tS256 :: JWK -> Maybe Base64SHA256
+ Crypto.JOSE.JWS: headerX5tS256 :: Header -> Maybe Base64SHA256
+ Crypto.JOSE.Types: Base64SHA256 :: ByteString -> Base64SHA256
+ Crypto.JOSE.Types: instance Eq Base64SHA256
+ Crypto.JOSE.Types: instance FromJSON Base64SHA256
+ Crypto.JOSE.Types: instance Show Base64SHA256
+ Crypto.JOSE.Types: instance ToJSON Base64SHA256
+ Crypto.JOSE.Types: newtype Base64SHA256
- Crypto.JOSE.JWK: JWK :: KeyMaterial -> Maybe KeyUse -> Maybe [KeyOp] -> Maybe Alg -> Maybe String -> Maybe URI -> Maybe Base64SHA1 -> Maybe [Base64X509] -> JWK
+ Crypto.JOSE.JWK: JWK :: KeyMaterial -> Maybe KeyUse -> Maybe [KeyOp] -> Maybe Alg -> Maybe String -> Maybe URI -> Maybe [Base64X509] -> Maybe Base64SHA1 -> Maybe Base64SHA256 -> JWK
- Crypto.JOSE.JWS: Header :: Alg -> Maybe URI -> Maybe JWK -> Maybe String -> Maybe URI -> Maybe Base64SHA1 -> Maybe [Base64X509] -> Maybe String -> Maybe String -> Maybe CritParameters -> Maybe ByteString -> Header
+ Crypto.JOSE.JWS: Header :: Alg -> Maybe URI -> Maybe JWK -> Maybe String -> Maybe URI -> Maybe [Base64X509] -> Maybe Base64SHA1 -> Maybe Base64SHA256 -> Maybe String -> Maybe String -> Maybe CritParameters -> Maybe ByteString -> Header
Files
- jose.cabal +34/−27
- src/Crypto/JOSE/JWK.hs +26/−23
- src/Crypto/JOSE/JWS/Internal.hs +11/−7
- src/Crypto/JOSE/Types.hs +17/−1
jose.cabal view
@@ -1,5 +1,5 @@ name: jose-version: 0.1.26.0+version: 0.1.27.0 synopsis: Javascript Object Signing and Encryption description: .@@ -21,7 +21,7 @@ README.md author: Fraser Tweedale maintainer: frase@frase.id.au-copyright: Copyright (C) 2013 Fraser Tweedale+copyright: Copyright (C) 2013, 2014 Fraser Tweedale category: Cryptography build-type: Simple cabal-version: >= 1.8@@ -45,21 +45,21 @@ Crypto.JOSE.Types.Internal build-depends:- base == 4.*,- attoparsec,- base64-bytestring == 1.0.*,- byteable == 0.1.*,- crypto-pubkey == 0.2.*,- crypto-random == 0.0.7.*,- cryptohash == 0.11.*,- template-haskell >= 2.4,- aeson == 0.7.*,- unordered-containers == 0.2.*,- bytestring == 0.10.*,- text == 1.1.*,- network >= 2.4,- certificate == 1.3.*,- vector+ base == 4.*+ , attoparsec+ , base64-bytestring == 1.0.*+ , byteable == 0.1.*+ , crypto-pubkey == 0.2.*+ , crypto-random == 0.0.7.*+ , cryptohash == 0.11.*+ , template-haskell >= 2.4+ , aeson == 0.7.*+ , unordered-containers == 0.2.*+ , bytestring == 0.10.*+ , text == 1.1.*+ , network >= 2.4+ , certificate == 1.3.*+ , vector ghc-options: -Wall hs-source-dirs: src@@ -70,16 +70,23 @@ test-suite tests type: exitcode-stdio-1.0- hs-source-dirs: test+ hs-source-dirs: src, test main-is: Test.hs build-depends:- base,- base64-bytestring,- bytestring,- network,- unordered-containers,- attoparsec,- hspec,- aeson,- jose+ base+ , attoparsec+ , base64-bytestring+ , byteable+ , crypto-pubkey+ , crypto-random+ , cryptohash+ , template-haskell+ , aeson+ , unordered-containers+ , bytestring+ , text+ , network+ , certificate+ , vector+ , hspec
src/Crypto/JOSE/JWK.hs view
@@ -1,4 +1,4 @@--- Copyright (C) 2013 Fraser Tweedale+-- Copyright (C) 2013, 2014 Fraser Tweedale -- -- Licensed under the Apache License, Version 2.0 (the "License"); -- you may not use this file except in compliance with the License.@@ -76,29 +76,31 @@ -- | JWK §3. JSON Web Key (JWK) Format ---data JWK =- JWK {- jwkMaterial :: JWA.JWK.KeyMaterial,- jwkUse :: Maybe KeyUse,- jwkKeyOps :: Maybe [KeyOp],- jwkAlg :: Maybe Alg,- jwkKid :: Maybe String,- jwkX5u :: Maybe Types.URI,- jwkX5t :: Maybe Types.Base64SHA1,- jwkX5c :: Maybe [Types.Base64X509]- }+data JWK = JWK+ {+ jwkMaterial :: JWA.JWK.KeyMaterial+ , jwkUse :: Maybe KeyUse+ , jwkKeyOps :: Maybe [KeyOp]+ , jwkAlg :: Maybe Alg+ , jwkKid :: Maybe String+ , jwkX5u :: Maybe Types.URI+ , jwkX5c :: Maybe [Types.Base64X509]+ , jwkX5t :: Maybe Types.Base64SHA1+ , jwkX5tS256 :: Maybe Types.Base64SHA256+ } deriving (Eq, Show) instance FromJSON JWK where- parseJSON = withObject "JWK" (\o -> JWK <$>- parseJSON (Object o) <*>- o .:? "use" <*>- o .:? "key_ops" <*>- o .:? "alg" <*>- o .:? "kid" <*>- o .:? "x5u" <*>- o .:? "x5t" <*>- o .:? "x5c")+ parseJSON = withObject "JWK" $ \o -> JWK+ <$> parseJSON (Object o)+ <*> o .:? "use"+ <*> o .:? "key_ops"+ <*> o .:? "alg"+ <*> o .:? "kid"+ <*> o .:? "x5u"+ <*> o .:? "x5c"+ <*> o .:? "x5t"+ <*> o .:? "x5t#S256" instance ToJSON JWK where toJSON (JWK {..}) = object $ catMaybes@@ -107,8 +109,9 @@ , fmap ("key_ops" .=) jwkKeyOps , fmap ("kid" .=) jwkKid , fmap ("x5u" .=) jwkX5u- , fmap ("x5t" .=) jwkX5t , fmap ("x5c" .=) jwkX5c+ , fmap ("x5t" .=) jwkX5t+ , fmap ("x5t#S256" .=) jwkX5tS256 ] ++ Types.objectPairs (toJSON jwkMaterial) @@ -119,7 +122,7 @@ -- | Construct a minimal JWK from key material. -- materialJWK :: JWA.JWK.KeyMaterial -> JWK-materialJWK m = JWK m n n n n n n n where n = Nothing+materialJWK m = JWK m n n n n n n n n where n = Nothing -- | Generate a /(public, private)/ RSA keypair. --
src/Crypto/JOSE/JWS/Internal.hs view
@@ -1,4 +1,4 @@--- Copyright (C) 2013 Fraser Tweedale+-- Copyright (C) 2013, 2014 Fraser Tweedale -- -- Licensed under the Apache License, Version 2.0 (the "License"); -- you may not use this file except in compliance with the License.@@ -50,6 +50,7 @@ , "jwk" , "x5u" , "x5t"+ , "x5t#S256" , "x5c" , "kid" , "typ"@@ -89,8 +90,9 @@ , headerJwk :: Maybe JWK , headerKid :: Maybe String -- ^ interpretation unspecified , headerX5u :: Maybe Types.URI- , headerX5t :: Maybe Types.Base64SHA1 , headerX5c :: Maybe [Types.Base64X509] -- ^ TODO implement min len of 1+ , headerX5t :: Maybe Types.Base64SHA1+ , headerX5tS256 :: Maybe Types.Base64SHA256 , headerTyp :: Maybe String -- ^ Content Type (of object) , headerCty :: Maybe String -- ^ Content Type (of payload) , headerCrit :: Maybe CritParameters@@ -101,8 +103,8 @@ instance Eq Header where a == b = let- ignoreRaw (Header alg jku jwk kid x5u x5t x5c typ cty crit _)- = (alg, jku, jwk, kid, x5u, x5t, x5c, typ, cty, crit)+ ignoreRaw (Header alg jku jwk kid x5u x5c x5t x5tS256 typ cty crit _)+ = (alg, jku, jwk, kid, x5u, x5c, x5t, x5tS256, typ, cty, crit) in ignoreRaw a == ignoreRaw b @@ -118,6 +120,7 @@ <*> opt "kid" <*> opt "x5u" <*> opt "x5t"+ <*> opt "x5t#S256" <*> opt "x5c" <*> opt "typ" <*> opt "cty"@@ -134,14 +137,15 @@ parseHeaderWith (o .:) (o .:?) (parseCrit o)) instance ToJSON Header where- toJSON (Header alg jku jwk kid x5u x5t x5c typ cty crit _) = object $ catMaybes [+ toJSON (Header alg jku jwk kid x5u x5c x5t x5tS256 typ cty crit _) = object $ catMaybes [ Just ("alg" .= alg) , fmap ("jku" .=) jku , fmap ("jwk" .=) jwk , fmap ("kid" .=) kid , fmap ("x5u" .=) x5u- , fmap ("x5t" .=) x5t , fmap ("x5c" .=) x5c+ , fmap ("x5t" .=) x5t+ , fmap ("x5t#S256" .=) x5tS256 , fmap ("typ" .=) typ , fmap ("cty" .=) cty ]@@ -150,7 +154,7 @@ -- construct a minimal header with the given alg algHeader :: JWA.JWS.Alg -> Header-algHeader alg = Header alg n n n n n n n n n n where n = Nothing+algHeader alg = Header alg n n n n n n n n n n n where n = Nothing (.::) :: (FromJSON a) => Object -> Object -> T.Text -> Parser a
src/Crypto/JOSE/Types.hs view
@@ -1,4 +1,4 @@--- Copyright (C) 2013 Fraser Tweedale+-- Copyright (C) 2013, 2014 Fraser Tweedale -- -- Licensed under the Apache License, Version 2.0 (the "License"); -- you may not use this file except in compliance with the License.@@ -99,6 +99,22 @@ instance ToJSON Base64SHA1 where toJSON (Base64SHA1 bytes) = encodeB64Url bytes+++-- | A base64url encoded SHA-256 digest. Used for X.509 certificate+-- thumbprints.+--+newtype Base64SHA256 = Base64SHA256 BS.ByteString+ deriving (Eq, Show)++instance FromJSON Base64SHA256 where+ parseJSON = withText "base64url SHA-256" $ parseB64Url (\bytes ->+ case BS.length bytes of+ 32 -> pure $ Base64SHA256 bytes+ _ -> fail "incorrect number of bytes")++instance ToJSON Base64SHA256 where+ toJSON (Base64SHA256 bytes) = encodeB64Url bytes -- | A base64 encoded X.509 certificate.