Hello community,

here is the log from the commit of package ghc-jose-jwt for openSUSE:Factory 
checked in at 2016-11-14 20:14:15
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/ghc-jose-jwt (Old)
 and      /work/SRC/openSUSE:Factory/.ghc-jose-jwt.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "ghc-jose-jwt"

Changes:
--------
--- /work/SRC/openSUSE:Factory/ghc-jose-jwt/ghc-jose-jwt.changes        
2016-11-04 20:59:30.000000000 +0100
+++ /work/SRC/openSUSE:Factory/.ghc-jose-jwt.new/ghc-jose-jwt.changes   
2016-11-14 20:14:16.000000000 +0100
@@ -1,0 +2,5 @@
+Mon Sep 26 06:51:33 UTC 2016 - [email protected]
+
+- Update to version 0.7.3 with cabal2obs.
+
+-------------------------------------------------------------------

Old:
----
  1.cabal
  jose-jwt-0.7.tar.gz

New:
----
  jose-jwt-0.7.3.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ ghc-jose-jwt.spec ++++++
--- /var/tmp/diff_new_pack.sfsSbH/_old  2016-11-14 20:14:17.000000000 +0100
+++ /var/tmp/diff_new_pack.sfsSbH/_new  2016-11-14 20:14:17.000000000 +0100
@@ -19,16 +19,14 @@
 %global pkg_name jose-jwt
 %bcond_with tests
 Name:           ghc-%{pkg_name}
-Version:        0.7
+Version:        0.7.3
 Release:        0
 Summary:        JSON Object Signing and Encryption Library
 License:        BSD-3-Clause
-Group:          System/Libraries
+Group:          Development/Languages/Other
 Url:            https://hackage.haskell.org/package/%{pkg_name}
 Source0:        
https://hackage.haskell.org/package/%{pkg_name}-%{version}/%{pkg_name}-%{version}.tar.gz
-Source1:        
https://hackage.haskell.org/package/%{pkg_name}-%{version}/revision/1.cabal
 BuildRequires:  ghc-Cabal-devel
-# Begin cabal-rpm deps:
 BuildRequires:  ghc-aeson-devel
 BuildRequires:  ghc-bytestring-devel
 BuildRequires:  ghc-cereal-devel
@@ -46,11 +44,9 @@
 %if %{with tests}
 BuildRequires:  ghc-HUnit-devel
 BuildRequires:  ghc-QuickCheck-devel
-BuildRequires:  ghc-aeson-qq-devel
 BuildRequires:  ghc-doctest-devel
 BuildRequires:  ghc-hspec-devel
 %endif
-# End cabal-rpm deps
 
 %description
 An implementation of the JOSE suite of IETF standards and the closely related
@@ -71,22 +67,15 @@
 
 %prep
 %setup -q -n %{pkg_name}-%{version}
-cp -p %{SOURCE1} %{pkg_name}.cabal
-
 
 %build
 %ghc_lib_build
 
-
 %install
 %ghc_lib_install
 
-
 %check
-%if %{with tests}
-%{cabal} test
-%endif
-
+%cabal_test
 
 %post devel
 %ghc_pkg_recache

++++++ jose-jwt-0.7.tar.gz -> jose-jwt-0.7.3.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/jose-jwt-0.7/CHANGELOG.md 
new/jose-jwt-0.7.3/CHANGELOG.md
--- old/jose-jwt-0.7/CHANGELOG.md       2015-10-14 20:05:12.000000000 +0200
+++ new/jose-jwt-0.7.3/CHANGELOG.md     2016-09-24 13:13:36.000000000 +0200
@@ -1,3 +1,20 @@
+0.7.3
+-----
+
+* Add JSON test data to extra-source-files.
+
+0.7.2
+-----
+
+* Remove test dependency on aeson-qq
+
+0.7.1
+-----
+
+* Update cryptonite version to 0.19 to avoid security issues
+* Fix broken benchmark code
+* Better error message for invalid key length when using AES keywrap
+
 0.7
 ---
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/jose-jwt-0.7/Jose/Internal/Crypto.hs 
new/jose-jwt-0.7.3/Jose/Internal/Crypto.hs
--- old/jose-jwt-0.7/Jose/Internal/Crypto.hs    2015-10-14 20:05:12.000000000 
+0200
+++ new/jose-jwt-0.7.3/Jose/Internal/Crypto.hs  2016-06-01 20:16:46.000000000 
+0200
@@ -173,8 +173,16 @@
 -- Dummy type to constrain Cipher type
 data C c = C
 
-initCipher :: BlockCipher c => C c -> B.ByteString -> Maybe c
-initCipher _ k = maybeCryptoError $ cipherInit k
+initCipher :: BlockCipher c => C c -> ByteString -> Either JwtError c
+initCipher _ k = mapFail (cipherInit k)
+
+-- Map CryptoFailable to JwtError
+mapFail :: CryptoFailable a -> Either JwtError a
+mapFail (CryptoPassed a) = return a
+mapFail (CryptoFailed e) = Left $ case e of
+    CryptoError_KeySizeInvalid -> KeyError "cipher key length is invalid"
+    _ -> BadCrypto
+
 
 -- | Decrypt an AES encrypted message.
 decryptPayload :: Enc        -- ^ Encryption algorithm
@@ -197,14 +205,14 @@
 
     doGCM :: BlockCipher c => C c -> Maybe ByteString
     doGCM c = do
-        cipher <- initCipher c cek
+        cipher <- rightToMaybe (initCipher c cek)
         aead <- maybeCryptoError (aeadInit AEAD_GCM cipher iv)
         aeadSimpleDecrypt aead aad ct (AuthTag $ BA.convert sig)
 
     doCBC :: (HashAlgorithm a, BlockCipher c) => C c -> a -> Int -> Maybe 
ByteString
     doCBC c a tagLen = do
         checkMac a tagLen
-        cipher <- initCipher c cbcEncKey
+        cipher <- rightToMaybe (initCipher c cbcEncKey)
         iv'    <- makeIV iv
         unless (B.length ct `mod` blockSize cipher == 0) Nothing
         unpad $ cbcDecrypt cipher iv' ct
@@ -237,13 +245,13 @@
 
     doGCM :: BlockCipher c => C c -> Maybe (AuthTag, ByteString)
     doGCM c = do
-        cipher <- initCipher c cek
+        cipher <- rightToMaybe (initCipher c cek)
         aead <- maybeCryptoError (aeadInit AEAD_GCM cipher iv)
         return $ aeadSimpleEncrypt aead aad msg 16
 
     doCBC :: (HashAlgorithm a, BlockCipher c) => C c -> a -> Int -> Maybe 
(AuthTag, ByteString)
     doCBC c a tagLen = do
-        cipher <- initCipher c cbcEncKey
+        cipher <- rightToMaybe (initCipher c cbcEncKey)
         iv'    <- makeIV iv
         let ct = cbcEncrypt cipher iv' (pad msg)
             mac = doMac a ct
@@ -271,6 +279,7 @@
     padByte       = fromIntegral $ 16 - lastBlockSize :: Word8
     padding       = B.replicate (fromIntegral padByte) padByte
 
+
 -- Key wrapping and unwrapping functions
 
 -- | <https://tools.ietf.org/html/rfc3394#section-2.2.1>
@@ -287,7 +296,7 @@
 
     doKeyWrap c = do
         when (l < 16 || l `mod` 8 /= 0) (Left (KeyError "Invalid content key"))
-        cipher <- maybe (Left (KeyError "cipher initialization failed")) 
return $ initCipher c kek
+        cipher <- initCipher c kek
         let p = toBlocks cek
             (r0, r) = foldl (doRound (ecbEncrypt cipher) 1) (iv, p) [0..5]
         Right $ B.concat (r0 : r)
@@ -322,7 +331,7 @@
 
     doUnWrap c = do
         when (l < 24 || l `mod` 8 /= 0) (Left BadCrypto)
-        cipher <- maybe (Left BadCrypto) return $ initCipher c kek
+        cipher <- initCipher c kek
         let r = toBlocks encK
             (p0, p) = foldl (doRound (ecbDecrypt cipher) n) (head r, reverse 
(tail r)) (reverse [0..5])
         unless (p0 == iv) (Left BadCrypto)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/jose-jwt-0.7/Jose/Jwa.hs 
new/jose-jwt-0.7.3/Jose/Jwa.hs
--- old/jose-jwt-0.7/Jose/Jwa.hs        2015-10-14 20:05:12.000000000 +0200
+++ new/jose-jwt-0.7.3/Jose/Jwa.hs      2016-06-01 20:16:46.000000000 +0200
@@ -13,7 +13,6 @@
 import Control.Applicative (pure)
 import Data.Aeson
 import Data.Text (Text)
-import Data.Maybe (fromJust)
 import Data.Tuple (swap)
 
 -- | General representation of the @alg@ JWT header value.
@@ -35,7 +34,7 @@
 algs = [("none", Signed None), ("HS256", Signed HS256), ("HS384", Signed 
HS384), ("HS512", Signed HS512), ("RS256", Signed RS256), ("RS384", Signed 
RS384), ("RS512", Signed RS512), ("ES256", Signed ES256), ("ES384", Signed 
ES384), ("ES512", Signed ES512), ("RSA1_5", Encrypted RSA1_5), ("RSA-OAEP", 
Encrypted RSA_OAEP), ("A128KW", Encrypted A128KW), ("A192KW", Encrypted 
A192KW), ("A256KW", Encrypted A256KW)]
 
 algName :: Alg -> Text
-algName a = fromJust $ lookup a algNames
+algName a = let Just n = lookup a algNames in n
 
 algNames :: [(Alg, Text)]
 algNames = map swap algs
@@ -44,7 +43,7 @@
 encs = [("A128CBC-HS256", A128CBC_HS256), ("A256CBC-HS512", A256CBC_HS512), 
("A192CBC-HS384", A192CBC_HS384), ("A128GCM", A128GCM), ("A192GCM", A192GCM), 
("A256GCM", A256GCM)]
 
 encName :: Enc -> Text
-encName e = fromJust $ lookup e encNames
+encName e = let Just n = lookup e encNames in n
 
 encNames :: [(Enc, Text)]
 encNames = map swap encs
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/jose-jwt-0.7/Jose/Jwe.hs 
new/jose-jwt-0.7.3/Jose/Jwe.hs
--- old/jose-jwt-0.7/Jose/Jwe.hs        2015-10-14 20:05:12.000000000 +0200
+++ new/jose-jwt-0.7.3/Jose/Jwe.hs      2016-06-01 20:16:46.000000000 +0200
@@ -6,12 +6,10 @@
 --
 -- >>> import Jose.Jwe
 -- >>> import Jose.Jwa
--- >>> import Crypto.Random
--- >>> g <- drgNew
 -- >>> import Crypto.PubKey.RSA
--- >>> let ((kPub, kPr), g') = withDRG g (generate 512 65537)
--- >>> let (Right (Jwt jwt), g'') = withDRG g' (rsaEncode RSA_OAEP A128GCM 
kPub "secret claims")
--- >>> fst $ withDRG g'' (rsaDecode kPr jwt)
+-- >>> (kPub, kPr) <- generate 512 65537
+-- >>> Right (Jwt jwt) <- rsaEncode RSA_OAEP A128GCM kPub "secret claims"
+-- >>> rsaDecode kPr jwt
 -- Right (JweHeader {jweAlg = RSA_OAEP, jweEnc = A128GCM, jweTyp = Nothing, 
jweCty = Nothing, jweZip = Nothing, jweKid = Nothing},"secret claims")
 
 module Jose.Jwe
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/jose-jwt-0.7/Jose/Jwt.hs 
new/jose-jwt-0.7.3/Jose/Jwt.hs
--- old/jose-jwt-0.7/Jose/Jwt.hs        2015-10-14 20:05:12.000000000 +0200
+++ new/jose-jwt-0.7.3/Jose/Jwt.hs      2016-09-22 19:53:29.000000000 +0200
@@ -10,12 +10,10 @@
 -- >>> import Jose.Jwk
 -- >>> import Data.ByteString
 -- >>> import Data.Aeson (decodeStrict)
--- >>> import Crypto.Random
--- >>> g <- drgNew
 -- >>> let jsonJwk = "{\"kty\":\"RSA\", \"kid\":\"mykey\", 
\"n\":\"ofgWCuLjybRlzo0tZWJjNiuSfb4p4fAkd_wWJcyQoTbji9k0l8W26mPddxHmfHQp-Vaw-4qPCJrcS2mJPMEzP1Pt0Bm4d4QlL-yRT-SFd2lZS-pCgNMsD1W_YpRPEwOWvG6b32690r2jZ47soMZo9wGzjb_7OMg0LOL-bSf63kpaSHSXndS5z5rexMdbBYUsLA9e-KXBdQOS-UTo7WTBEMa2R2CapHg665xsmtdVMTBQY4uDZlxvb3qCo5ZwKh9kG4LT6_I5IhlJH7aGhyxXFvUK-DWNmoudF8NAco9_h9iaGNj8q2ethFkMLs91kzk2PAcDTW9gb54h4FRWyuXpoQ\",
 \"e\":\"AQAB\", 
\"d\":\"Eq5xpGnNCivDflJsRQBXHx1hdR1k6Ulwe2JZD50LpXyWPEAeP88vLNO97IjlA7_GQ5sLKMgvfTeXZx9SE-7YwVol2NXOoAJe46sui395IW_GO-pWJ1O0BkTGoVEn2bKVRUCgu-GjBVaYLU6f3l9kJfFNS3E0QbVdxzubSu3Mkqzjkn439X0M_V51gfpRLI9JYanrC4D4qAdGcopV_0ZHHzQlBjudU2QvXt4ehNYTCBr6XCLQUShb1juUO1ZdiYoFaFQT5Tw8bGUl_x_jTj3ccPDVZFD9pIuhLhBOneufuBiB4cS98l2SR_RQyGWSeWjnczT0QU91p1DhOVRuOopznQ\"}"
 :: ByteString
 -- >>> let Just jwk = decodeStrict jsonJwk :: Maybe Jwk
--- >>> let (Right (Jwt jwtEncoded), g') = withDRG g $ encode [jwk] 
(JwsEncoding RS256) (Claims "public claims")
--- >>> let (Right jwtDecoded, g'') = withDRG g' $ Jose.Jwt.decode [jwk] (Just 
(JwsEncoding RS256)) jwtEncoded
+-- >>> Right (Jwt jwtEncoded) <- encode [jwk] (JwsEncoding RS256) (Claims 
"public claims")
+-- >>> Right jwtDecoded <- Jose.Jwt.decode [jwk] (Just (JwsEncoding RS256)) 
jwtEncoded
 -- >>> jwtDecoded
 -- Jws (JwsHeader {jwsAlg = RS256, jwsTyp = Nothing, jwsCty = Nothing, jwsKid 
= Just (KeyId "mykey")},"public claims")
 
@@ -27,7 +25,7 @@
     )
 where
 
-import Control.Monad (when, unless, liftM)
+import Control.Monad (msum, when, unless, liftM)
 import Control.Monad.Trans (lift)
 import Control.Monad.Trans.Either
 import qualified Crypto.PubKey.ECC.ECDSA as ECDSA
@@ -35,8 +33,7 @@
 import Crypto.Random (MonadRandom)
 import Data.Aeson (decodeStrict')
 import Data.ByteString (ByteString)
-import Data.List (find)
-import Data.Maybe (fromJust, isJust, isNothing)
+import Data.Maybe (isNothing)
 import qualified Data.ByteString.Char8 as BC
 
 import qualified Jose.Internal.Base64 as B64
@@ -104,7 +101,9 @@
         JweH h     -> do
             unless (isNothing encoding || encoding == Just (JweEncoding 
(jweAlg h) (jweEnc h))) $ left (BadAlgorithm "Expected encoding doesn't match 
JWE header")
             mapM decodeWithJwe ks
-    maybe (left $ KeyError "None of the keys was able to decode the JWT") 
(return . fromJust) $ find isJust decodings
+    case msum decodings of
+        Nothing  -> left $ KeyError "None of the keys was able to decode the 
JWT"
+        Just jwtContent -> return jwtContent
   where
     decodeWithJws :: MonadRandom m => Jwk -> EitherT JwtError m (Maybe 
JwtContent)
     decodeWithJws k = either (const $ return Nothing) (return . Just . Jws) $ 
case k of
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/jose-jwt-0.7/benchmarks/bench.hs 
new/jose-jwt-0.7.3/benchmarks/bench.hs
--- old/jose-jwt-0.7/benchmarks/bench.hs        2015-10-14 20:05:12.000000000 
+0200
+++ new/jose-jwt-0.7.3/benchmarks/bench.hs      2016-06-01 20:16:46.000000000 
+0200
@@ -1,17 +1,21 @@
-{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE OverloadedStrings, CPP #-}
 module Main where
 
 import Criterion.Main
 import Crypto.Random
+import Data.Word (Word64)
 import Jose.Jws
 import Jose.Jwa
 import Jose.Jwt
 import Keys
 
+benchRNG = drgNewTest (w, w, w, w, w) where w = 1 :: Word64
+
+fstWithRNG = fst . withDRG benchRNG
+
 main = do
-    rng <- cprgCreate `fmap` createEntropyPool :: IO SystemRNG
     let msg = "The best laid schemes o' mice and men"
-        rsaE a m  = case fst $ rsaEncode rng a jwsRsaPrivateKey m of
+        rsaE a m  = case fstWithRNG (rsaEncode a jwsRsaPrivateKey m) of
             Left  _       -> error "RSA encode shouldn't fail"
             Right (Jwt j) -> j
         hmacE a m = case hmacEncode a jwsHmacKey m of
@@ -21,9 +25,12 @@
     defaultMain
       [ bgroup "JWS"
           [ bench "encode RSA256" $ nf (rsaE RS256)  msg
+#if MIN_VERSION_cryptonite(0,13,0)
           , bench "encode RSA384" $ nf (rsaE RS384)  msg
-          , bench "encode RSA512" $ nf (rsaE RS384)  msg
+#endif
+          , bench "encode RSA512" $ nf (rsaE RS512)  msg
           , bench "encode HS256"  $ nf (hmacE HS256) msg
+          , bench "encode HS384"  $ nf (hmacE HS384) msg
           , bench "encode HS512"  $ nf (hmacE HS512) msg
           ]
       ]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/jose-jwt-0.7/jose-jwt.cabal 
new/jose-jwt-0.7.3/jose-jwt.cabal
--- old/jose-jwt-0.7/jose-jwt.cabal     2015-10-14 20:05:12.000000000 +0200
+++ new/jose-jwt-0.7.3/jose-jwt.cabal   2016-09-24 13:12:30.000000000 +0200
@@ -1,5 +1,5 @@
 Name:               jose-jwt
-Version:            0.7
+Version:            0.7.3
 Synopsis:           JSON Object Signing and Encryption Library
 Homepage:           http://github.com/tekul/jose-jwt
 Bug-Reports:        http://github.com/tekul/jose-jwt/issues
@@ -22,6 +22,7 @@
 
 Extra-Source-Files:
     CHANGELOG.md
+    tests/*.json
 
 -- disable doctests with -f-doctest
 Flag doctest
@@ -30,7 +31,7 @@
 
 Source-Repository head
   Type:             git
-  Location:         git://github.com/tekul/jose-jwt.git
+  Location:         https://github.com/tekul/jose-jwt.git
 
 Library
   Default-Language:   Haskell2010
@@ -42,12 +43,12 @@
                     , Jose.Internal.Base64
                     , Jose.Internal.Crypto
   Other-Modules:      Jose.Types
-  Build-Depends:      base >= 4 && < 5
+  Build-Depends:      base >= 4.6 && < 5
                     , aeson >= 0.8.0.2
                     , bytestring >= 0.9
                     , cereal >= 0.4
                     , containers >= 0.4
-                    , cryptonite >= 0.3
+                    , cryptonite >= 0.19
                     , either
                     , memory >= 0.10
                     , mtl >= 2.1.3.1
@@ -66,7 +67,6 @@
   Build-depends:      jose-jwt
                     , base
                     , aeson
-                    , aeson-qq
                     , bytestring
                     , cryptonite
                     , either >= 4.0
@@ -105,5 +105,6 @@
                     , base
                     , bytestring
                     , criterion
+                    , cryptonite
 
-  Ghc-Options:        -Wall -O2
+  Ghc-Options:        -Wall -fno-warn-missing-signatures
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/jose-jwt-0.7/tests/Tests/JweSpec.hs 
new/jose-jwt-0.7.3/tests/Tests/JweSpec.hs
--- old/jose-jwt-0.7/tests/Tests/JweSpec.hs     2015-10-14 20:05:12.000000000 
+0200
+++ new/jose-jwt-0.7.3/tests/Tests/JweSpec.hs   2016-06-01 20:16:46.000000000 
+0200
@@ -6,7 +6,6 @@
 import Control.Applicative
 import Data.Aeson (decodeStrict')
 import Data.Bits (xor)
-import Data.Maybe (fromJust)
 import Data.Word (Word8, Word64)
 import qualified Data.ByteArray as BA
 import qualified Data.ByteString as B
@@ -133,7 +132,7 @@
       it "padded msg is always a multiple of 16" $ property $
         \s -> B.length (pad (B.pack s)) `mod` 16 == 0
       it "unpad is the inverse of pad" $ property $
-        \s -> let msg = B.pack s in (fromJust . unpad . pad) msg == msg
+        \s -> let msg = B.pack s in (unpad . pad) msg == Just msg
       it "jwe decode/decode returns the original payload" $ property 
jweRoundTrip
 
     context "miscellaneous tests" $ do
@@ -148,7 +147,7 @@
 jweRoundTrip :: RNG -> JWEAlgs -> [Word8] -> Bool
 jweRoundTrip g (JWEAlgs a e) msg = encodeDecode == Right (Jwe (defJweHdr 
{jweAlg = a, jweEnc = e}, bs))
   where
-    jwks = map (fromJust . decodeStrict') [a1jwk, a2jwk, a3jwk]
+    jwks = [a1jwk, a2jwk, a3jwk] >>= \j -> let Just jwk = decodeStrict' j in 
[jwk]
     bs = B.pack msg
     encodeDecode = fst (withDRG blinderRNG (decode jwks Nothing encoded))
     Right encoded = unJwt <$> fst (withDRG g (encode jwks (JweEncoding a e) 
(Claims bs)))
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/jose-jwt-0.7/tests/Tests/JwkSpec.hs 
new/jose-jwt-0.7.3/tests/Tests/JwkSpec.hs
--- old/jose-jwt-0.7/tests/Tests/JwkSpec.hs     2015-10-14 20:05:12.000000000 
+0200
+++ new/jose-jwt-0.7.3/tests/Tests/JwkSpec.hs   2016-09-23 14:56:41.000000000 
+0200
@@ -1,4 +1,4 @@
-{-# LANGUAGE OverloadedStrings, QuasiQuotes #-}
+{-# LANGUAGE OverloadedStrings #-}
 
 module Tests.JwkSpec where
 
@@ -6,8 +6,7 @@
 import Test.HUnit hiding (Test)
 
 import Data.Aeson
-import Data.Aeson.QQ
-import qualified Data.ByteString.Char8 ()
+import qualified Data.ByteString.Char8 as B
 import qualified Data.HashMap.Strict as H
 import Data.Word (Word64)
 import qualified Data.Vector as V
@@ -19,30 +18,14 @@
 import Jose.Jwk
 import Jose.Jwa
 
--- Some JSON keys to decode
 -- TODO: Support for  {"kty": "oct", "alg": "A128KW", 
"k":"GawgguFyGrWKav7AX4VKUg"}
-keySet :: Object
-Object keySet = [aesonQQ|
-   { "keys" :
-        [ {"use": "enc", "n": 
"vnifEgZCnBxY5UDt3TJXp3_mNv92VWwHoc3B2oCuzgpgNyBwbBVIu3ScaflvQlntSgfo9VHiu16IqPuCOL4FjcY2RUZY7zizUZ2hFmmMThyx4HfTcDMNFOnetB1mKVUQ3gBOFjdnnj9auO4EK22xRcdB704XhES1TtYIiCxxfPOYBysCDHYcR-0KKjUPyXyhBGFoxiUrYP-c14Pf-aKWgNDqVlYlqayw9JHN4QVeJm8M5DHiPOtxO096Mc-5-X5NwXFMTzjywFWzkbFy7XmJj6BDmmh8-WUOBK1a9gy4zTysL9HfNhJIqi3BJUtLM_x2t-ISROm-Ud3y-4xgavXBTw",
 "e": "AQAB", "kty": "RSA", "kid": "a0"}
-        , {"use": "sig", "n": 
"o9kJbxD1SgwrV_ottw7oHxxkjw83AuRrYbq8PzXDfhmvqvRHjhAOEGk1qDUbI8tkWzXsTuy-0UAvI9Xt3Qqmmk1MSkAx6K355_J1ofTafH5VrtPavC7HMVnz1zDebgwJH869jWHFghzL0Nr32zq4_V-gpt-zugKFpQi_LA9dtuAjcSTCMnDzTMw4WrMbzNOm90q0CkJCrWe6xM9z4Q_GCPgb2S4lsd5iNdtus9pG104wFAkgY7BXNP3hatYa1UVkAQdWMYyQATs6HMBZF4Ljf-upU9ic_vGwTGgunvQ7z29yrAFWaZQ-EqjYUnvQlmPFqMaNxg3TkPIgntqvZOdW_w",
 "e": "AQAB", "kty": "RSA", "kid": "a1"}
-        , {"use": "sig", "crv": "P-256", "kty": "EC", "y": 
"kgFS_XvVOyuS41mBzmwJa-ik8Cy4rvM3uFncxmi_-Y8", "x": 
"bjX_T6O5OUW6WALJ173CH34TfzK9zEHycFT6KMWDnow", "kid": "a2"}
-        , {"use": "enc", "crv": "P-256", "kty": "EC", "y": 
"zcOqE_LYsPTf7a9FOFpJiwK2ZQuUmoNLdsY7BRTICN0", "x": 
"6eXHDpNoiUaAR5Cle6rfmrVgksSagyi8fzvLF1kedKc", "kid": "a3"}
-        , {"kty": "oct", 
"k":"AyM1SysPpbyDfgZld3umj1qzKObwVMkoqQ-EstJQLr_T-1qS0gZH75aKtMN3Yj0iPS4hcgUuTwjAzZr1Z9CAow",
 "kid":"HMAC key used in JWS A.1 example"}
-        , {"kty":"EC", "crv":"P-256", 
"x":"MKBCTNIcKUSDii11ySs3526iDZ8AiTo7Tu6KPAqv7D4", 
"y":"4Etl6SRW2YiLUrN5vfvVHuhp7x8PxltmWWlbbM4IFyM", "use":"enc", "kid":"1"}
-        , {"kty":"RSA", "n": 
"0vx7agoebGcQSuuPiLJXZptN9nndrQmbXEps2aiAFbWhM78LhWx4cbbfAAtVT86zwu1RK7aPFFxuhDR1L6tSoc_BJECPebWKRXjBZCiFV4n3oknjhMstn64tZ_2W-5JsGY4Hc5n9yBXArwl93lqt7_RN5w6Cf0h4QyQ5v-65YGjQR0_FDW2QvzqY368QQMicAtaSqzs8KJZgnYb9c7d0zgdAZHzu6qMQvRL5hajrn1n91CbOpbISD08qNLyrdkt-bFTWhAI4vMQFh6WeZu0fM4lFd2NcRwr3XPksINHaQ-G_xBniIqbw0Ls1jF44-csFCur-kEgU8awapJzKnqDKgw",
 "e":"AQAB", "alg":"RS256", "kid":"2015-05-16T18:00:14.259Z"}
-        , {"kty":"EC", "crv":"P-256", 
"x":"MKBCTNIcKUSDii11ySs3526iDZ8AiTo7Tu6KPAqv7D4", 
"y":"4Etl6SRW2YiLUrN5vfvVHuhp7x8PxltmWWlbbM4IFyM", 
"d":"870MB6gfuTJ4HtUnUvYMyJpr5eUZNP4Bk43bVdj3eAE", "use":"enc", "kid":"1"}
-        , {"kty":"RSA", 
"n":"0vx7agoebGcQSuuPiLJXZptN9nndrQmbXEps2aiAFbWhM78LhWx4cbbfAAtVT86zwu1RK7aPFFxuhDR1L6tSoc_BJECPebWKRXjBZCiFV4n3oknjhMstn64tZ_2W-5JsGY4Hc5n9yBXArwl93lqt7_RN5w6Cf0h4QyQ5v-65YGjQR0_FDW2QvzqY368QQMicAtaSqzs8KJZgnYb9c7d0zgdAZHzu6qMQvRL5hajrn1n91CbOpbISD08qNLyrdkt-bFTWhAI4vMQFh6WeZu0fM4lFd2NcRwr3XPksINHaQ-G_xBniIqbw0Ls1jF44-csFCur-kEgU8awapJzKnqDKgw",
 "e":"AQAB", 
"d":"X4cTteJY_gn4FYPsXB8rdXix5vwsg1FLN5E3EaG6RJoVH-HLLKD9M7dx5oo7GURknchnrRweUkC7hT5fJLM0WbFAKNLWY2vv7B6NqXSzUvxT0_YSfqijwp3RTzlBaCxWp4doFk5N2o8Gy_nHNKroADIkJ46pRUohsXywbReAdYaMwFs9tv8d_cPVY3i07a3t8MN6TNwm0dSawm9v47UiCl3Sk5ZiG7xojPLu4sbg1U2jx4IBTNBznbJSzFHK66jT8bgkuqsk0GjskDJk19Z4qwjwbsnn4j2WBii3RL-Us2lGVkY8fkFzme1z0HbIkfz0Y6mqnOYtqc0X4jfcKoAC8Q",
 
"p":"83i-7IvMGXoMXCskv73TKr8637FiO7Z27zv8oj6pbWUQyLPQBQxtPVnwD20R-60eTDmD2ujnMt5PoqMrm8RfmNhVWDtjjMmCMjOpSXicFHj7XOuVIYQyqVWlWEh6dN36GVZYk93N8Bc9vY41xy8B9RzzOGVQzXvNEvn7O0nVbfs",
 
"q":"3dfOR9cuYq-0S-mkFLzgItgMEfFzB2q3hWehMuG0oCuqnb3vobLyumqjVZQO1dIrdwgTnCdpYzBcOfW5r370AFXjiWft_NGEiovonizhKpo9VVS78TzFgxkIdrecRezsZ-1kYd_s1qDbxtkDEgfAITAG9LUnADun4vIcb6yelxk",
 
"dp":"G4sPXkc6Ya9y8oJW9_ILj4xuppu0lzi_H7VTkS8xj5SdX3coE0oimYwxIi2emTAue0UOa5dpgFGyBJ4c8tQ2VF402XRugKDTP8akYhFo5tAA77Qe_NmtuYZc3C3m3I24G2GvR5sSDxUyAN2zq8Lfn9EUms6rY3Ob8YeiKkTiBj0",
 
"dq":"s9lAH9fggBsoFR8Oac2R_E2gw282rT2kGOAhvIllETE1efrA6huUUvMfBcMpn8lqeW6vzznYY5SSQF7pMdC_agI3nG8Ibp1BUb0JUiraRNqUfLhcQb_d9GF4Dh7e74WbRsobRonujTYN1xCaP6TO61jvWrX-L18txXw494Q_cgk",
 
"qi":"GyM_p6JrXySiz1toFgKbWV-JdI3jQ4ypu9rbMWx3rQJBfmt0FoYzgUIZEVFEcOqwemRN81zoDAaa-Bk0KWNGDjJHZDdDmFhW3AN7lI-puxk_mHZGJ11rxyR8O55XLSe3SPmRfKwZI6yU24ZxvQKFYItdldUKGzO6Ia6zTKhAVRU",
 "alg":"RS256", "kid":"2015-05-16T18:00:14.259Z"}
-        ]
-   }
-|]
-
-
 spec :: Spec
 spec = do
-    let Success s@(JwkSet _) = fromJSON (Object keySet) :: Result JwkSet
-        Just s'  = decode' (encode s) :: Maybe JwkSet
-        Just s'' = decode' (encode s) :: Maybe JwkSet
+    jwkFile <- runIO (B.readFile "tests/jwks.json")
+    let Just (Object keySet) = decodeStrict jwkFile
+        Success s = fromJSON (Object keySet) :: Result JwkSet
+        Just s'  = decode  (encode s)
+        Just s'' = decode' (encode s')
         kss      = keys s'
         k0       = head kss
         k1       = kss !! 1
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/jose-jwt-0.7/tests/jwks.json 
new/jose-jwt-0.7.3/tests/jwks.json
--- old/jose-jwt-0.7/tests/jwks.json    1970-01-01 01:00:00.000000000 +0100
+++ new/jose-jwt-0.7.3/tests/jwks.json  2016-09-23 14:44:29.000000000 +0200
@@ -0,0 +1,12 @@
+{ "keys" :
+    [ {"use": "enc", "n": 
"vnifEgZCnBxY5UDt3TJXp3_mNv92VWwHoc3B2oCuzgpgNyBwbBVIu3ScaflvQlntSgfo9VHiu16IqPuCOL4FjcY2RUZY7zizUZ2hFmmMThyx4HfTcDMNFOnetB1mKVUQ3gBOFjdnnj9auO4EK22xRcdB704XhES1TtYIiCxxfPOYBysCDHYcR-0KKjUPyXyhBGFoxiUrYP-c14Pf-aKWgNDqVlYlqayw9JHN4QVeJm8M5DHiPOtxO096Mc-5-X5NwXFMTzjywFWzkbFy7XmJj6BDmmh8-WUOBK1a9gy4zTysL9HfNhJIqi3BJUtLM_x2t-ISROm-Ud3y-4xgavXBTw",
 "e": "AQAB", "kty": "RSA", "kid": "a0"}
+    , {"use": "sig", "n": 
"o9kJbxD1SgwrV_ottw7oHxxkjw83AuRrYbq8PzXDfhmvqvRHjhAOEGk1qDUbI8tkWzXsTuy-0UAvI9Xt3Qqmmk1MSkAx6K355_J1ofTafH5VrtPavC7HMVnz1zDebgwJH869jWHFghzL0Nr32zq4_V-gpt-zugKFpQi_LA9dtuAjcSTCMnDzTMw4WrMbzNOm90q0CkJCrWe6xM9z4Q_GCPgb2S4lsd5iNdtus9pG104wFAkgY7BXNP3hatYa1UVkAQdWMYyQATs6HMBZF4Ljf-upU9ic_vGwTGgunvQ7z29yrAFWaZQ-EqjYUnvQlmPFqMaNxg3TkPIgntqvZOdW_w",
 "e": "AQAB", "kty": "RSA", "kid": "a1"}
+    , {"use": "sig", "crv": "P-256", "kty": "EC", "y": 
"kgFS_XvVOyuS41mBzmwJa-ik8Cy4rvM3uFncxmi_-Y8", "x": 
"bjX_T6O5OUW6WALJ173CH34TfzK9zEHycFT6KMWDnow", "kid": "a2"}
+    , {"use": "enc", "crv": "P-256", "kty": "EC", "y": 
"zcOqE_LYsPTf7a9FOFpJiwK2ZQuUmoNLdsY7BRTICN0", "x": 
"6eXHDpNoiUaAR5Cle6rfmrVgksSagyi8fzvLF1kedKc", "kid": "a3"}
+    , {"kty": "oct", 
"k":"AyM1SysPpbyDfgZld3umj1qzKObwVMkoqQ-EstJQLr_T-1qS0gZH75aKtMN3Yj0iPS4hcgUuTwjAzZr1Z9CAow",
 "kid":"HMAC key used in JWS A.1 example"}
+    , {"kty":"EC", "crv":"P-256", 
"x":"MKBCTNIcKUSDii11ySs3526iDZ8AiTo7Tu6KPAqv7D4", 
"y":"4Etl6SRW2YiLUrN5vfvVHuhp7x8PxltmWWlbbM4IFyM", "use":"enc", "kid":"1"}
+    , {"kty":"RSA", "n": 
"0vx7agoebGcQSuuPiLJXZptN9nndrQmbXEps2aiAFbWhM78LhWx4cbbfAAtVT86zwu1RK7aPFFxuhDR1L6tSoc_BJECPebWKRXjBZCiFV4n3oknjhMstn64tZ_2W-5JsGY4Hc5n9yBXArwl93lqt7_RN5w6Cf0h4QyQ5v-65YGjQR0_FDW2QvzqY368QQMicAtaSqzs8KJZgnYb9c7d0zgdAZHzu6qMQvRL5hajrn1n91CbOpbISD08qNLyrdkt-bFTWhAI4vMQFh6WeZu0fM4lFd2NcRwr3XPksINHaQ-G_xBniIqbw0Ls1jF44-csFCur-kEgU8awapJzKnqDKgw",
 "e":"AQAB", "alg":"RS256", "kid":"2015-05-16T18:00:14.259Z"}
+    , {"kty":"EC", "crv":"P-256", 
"x":"MKBCTNIcKUSDii11ySs3526iDZ8AiTo7Tu6KPAqv7D4", 
"y":"4Etl6SRW2YiLUrN5vfvVHuhp7x8PxltmWWlbbM4IFyM", 
"d":"870MB6gfuTJ4HtUnUvYMyJpr5eUZNP4Bk43bVdj3eAE", "use":"enc", "kid":"1"}
+    , {"kty":"RSA", 
"n":"0vx7agoebGcQSuuPiLJXZptN9nndrQmbXEps2aiAFbWhM78LhWx4cbbfAAtVT86zwu1RK7aPFFxuhDR1L6tSoc_BJECPebWKRXjBZCiFV4n3oknjhMstn64tZ_2W-5JsGY4Hc5n9yBXArwl93lqt7_RN5w6Cf0h4QyQ5v-65YGjQR0_FDW2QvzqY368QQMicAtaSqzs8KJZgnYb9c7d0zgdAZHzu6qMQvRL5hajrn1n91CbOpbISD08qNLyrdkt-bFTWhAI4vMQFh6WeZu0fM4lFd2NcRwr3XPksINHaQ-G_xBniIqbw0Ls1jF44-csFCur-kEgU8awapJzKnqDKgw",
 "e":"AQAB", 
"d":"X4cTteJY_gn4FYPsXB8rdXix5vwsg1FLN5E3EaG6RJoVH-HLLKD9M7dx5oo7GURknchnrRweUkC7hT5fJLM0WbFAKNLWY2vv7B6NqXSzUvxT0_YSfqijwp3RTzlBaCxWp4doFk5N2o8Gy_nHNKroADIkJ46pRUohsXywbReAdYaMwFs9tv8d_cPVY3i07a3t8MN6TNwm0dSawm9v47UiCl3Sk5ZiG7xojPLu4sbg1U2jx4IBTNBznbJSzFHK66jT8bgkuqsk0GjskDJk19Z4qwjwbsnn4j2WBii3RL-Us2lGVkY8fkFzme1z0HbIkfz0Y6mqnOYtqc0X4jfcKoAC8Q",
 
"p":"83i-7IvMGXoMXCskv73TKr8637FiO7Z27zv8oj6pbWUQyLPQBQxtPVnwD20R-60eTDmD2ujnMt5PoqMrm8RfmNhVWDtjjMmCMjOpSXicFHj7XOuVIYQyqVWlWEh6dN36GVZYk93N8Bc9vY41xy8B9RzzOGVQzXvNEvn7O0nVbfs",
 
"q":"3dfOR9cuYq-0S-mkFLzgItgMEfFzB2q3hWehMuG0oCuqnb3vobLyumqjVZQO1dIrdwgTnCdpYzBcOfW5r370AFXjiWft_NGEiovonizhKpo9VVS78TzFgxkIdrecRezsZ-1kYd_s1qDbxtkDEgfAITAG9LUnADun4vIcb6yelxk",
 
"dp":"G4sPXkc6Ya9y8oJW9_ILj4xuppu0lzi_H7VTkS8xj5SdX3coE0oimYwxIi2emTAue0UOa5dpgFGyBJ4c8tQ2VF402XRugKDTP8akYhFo5tAA77Qe_NmtuYZc3C3m3I24G2GvR5sSDxUyAN2zq8Lfn9EUms6rY3Ob8YeiKkTiBj0",
 
"dq":"s9lAH9fggBsoFR8Oac2R_E2gw282rT2kGOAhvIllETE1efrA6huUUvMfBcMpn8lqeW6vzznYY5SSQF7pMdC_agI3nG8Ibp1BUb0JUiraRNqUfLhcQb_d9GF4Dh7e74WbRsobRonujTYN1xCaP6TO61jvWrX-L18txXw494Q_cgk",
 
"qi":"GyM_p6JrXySiz1toFgKbWV-JdI3jQ4ypu9rbMWx3rQJBfmt0FoYzgUIZEVFEcOqwemRN81zoDAaa-Bk0KWNGDjJHZDdDmFhW3AN7lI-puxk_mHZGJ11rxyR8O55XLSe3SPmRfKwZI6yU24ZxvQKFYItdldUKGzO6Ia6zTKhAVRU",
 "alg":"RS256", "kid":"2015-05-16T18:00:14.259Z"}
+    ]
+}


Reply via email to