]> git.immae.eu Git - github/fretlink/hmacaroons.git/commitdiff
Add Sig/cav verifier
authorJulien Tanguy <julien.tanguy@jhome.fr>
Sat, 16 May 2015 10:51:22 +0000 (12:51 +0200)
committerJulien Tanguy <julien.tanguy@jhome.fr>
Sat, 16 May 2015 10:51:22 +0000 (12:51 +0200)
[ci skip]

src/Crypto/Macaroon/Verifier.hs
test/Crypto/Macaroon/Verifier/Tests.hs

index 4eedff5a5e767e92291a82d567ca067cf92c3ef6..02cb448db340d2557b72b0486c8303bcd8987734 100644 (file)
@@ -14,14 +14,14 @@ Portability : portable
 -}
 module Crypto.Macaroon.Verifier (
     Verified(..)
-  , CaveatVerifier(..)
+  , CaveatVerifier
   , (<???>)
+  , verifyMacaroon
   , verifySig
   , verifyExact
   , verifyFun
-  , verifyCavs
-  -- , module Data.Attoparsec.ByteString
   , module Data.Attoparsec.ByteString.Char8
+  , verifyCavs
 ) where
 
 
@@ -66,6 +66,10 @@ verifySig k m = bool Failed Ok $
     hash s c = toBytes (hmac s (vid c `BS.append` cid c) :: HMAC SHA256)
     derivedKey = toBytes (hmac "macaroons-key-generator" k :: HMAC SHA256)
 
+verifyMacaroon :: Key -> [CaveatVerifier] -> Macaroon -> Verified
+verifyMacaroon secret verifiers m = verifySig secret m `mappend` verifyCavs verifiers m
+
+
 verifyCavs :: [CaveatVerifier] -> Macaroon -> Verified
 verifyCavs verifiers m = foldMap (\c -> fromMaybe Failed $ foldMap (($ c) . vFun) verifiers) (caveats m)
 
index 5f09bca6ac6601b8c8e8493a630a657800a059af..101fa264dab11e1310c7982c7eb957e93b92acdf 100644 (file)
@@ -61,7 +61,7 @@ allvs = [exTC, exTZ, exV42, exV43, funTCPre, funTV43lte]
 sigs = testProperty "Signatures" $ \sm -> verifySig (secret sm) (macaroon sm) == Ok
 
 firstParty = testGroup "First party caveats" [
-    testGroup "Pure verifiers" [ 
+    testGroup "Pure verifiers" [
         testProperty "Zero caveat" $
                 forAll (sublistOf allvs) (\vs -> Ok == verifyCavs vs m)
       , testProperty "One caveat" $
@@ -77,4 +77,20 @@ firstParty = testGroup "First party caveats" [
             , Failed === verifyCavs vs m3
             ])
       ]
+    , testGroup "Pure verifiers with sig" [
+        testProperty "Zero caveat" $
+                forAll (sublistOf allvs) (\vs -> Ok == verifyMacaroon sec vs m)
+      , testProperty "One caveat" $
+          forAll (sublistOf allvs) (\vs -> disjoin [
+              Ok == verifyMacaroon sec vs m2 .&&. any (`elem` vs) [exTC,funTCPre] .&&. (exTZ `notElem` vs)
+            , Failed === verifyMacaroon sec vs m2
+            ])
+      , testProperty "Two Exact" $
+          forAll (sublistOf allvs) (\vs -> disjoin [
+              Ok == verifyMacaroon sec vs m3 .&&.
+                any (`elem` vs) [exTC,funTCPre] .&&.  (exTZ `notElem` vs) .&&.
+                any (`elem` vs) [exV42,funTV43lte] .&&.  (exV43 `notElem` vs)
+            , Failed === verifyMacaroon sec vs m3
+            ])
+      ]
     ]