]> git.immae.eu Git - github/fretlink/hmacaroons.git/blame_incremental - src/Crypto/Macaroon.hs
Remove third party caveats
[github/fretlink/hmacaroons.git] / src / Crypto / Macaroon.hs
... / ...
CommitLineData
1{-# LANGUAGE OverloadedStrings #-}
2{-|
3Module : Crypto.Macaroon
4Copyright : (c) 2015 Julien Tanguy
5License : BSD3
6
7Maintainer : julien.tanguy@jhome.fr
8Stability : experimental
9Portability : portable
10
11Pure haskell implementations of macaroons.
12
13Warning: this implementation has not been audited by security experts.
14Do not use in production
15
16
17References:
18
19- Macaroons: Cookies with Contextual Caveats for Decentralized Authorization in the Cloud <http://research.google.com/pubs/pub41892.html>
20- Time for better security in NoSQL <http://hackingdistributed.com/2014/11/23/macaroons-in-hyperdex>
21-}
22module Crypto.Macaroon (
23 -- * Types
24 Macaroon
25 , Caveat
26 , Key
27 , Location
28 , Sig
29 -- * Accessing functions
30 -- ** Macaroons
31 , location
32 , identifier
33 , caveats
34 , signature
35 -- ** Caveats
36 , caveatLoc
37 , caveatId
38 , caveatVId
39
40 -- * Create Macaroons
41 , create
42 , inspect
43 , addFirstPartyCaveat
44 -- , addThirdPartyCaveat
45 ) where
46
47-- import Crypto.Cipher.AES
48import Crypto.Hash
49import Data.Byteable
50import qualified Data.ByteString as BS
51import qualified Data.ByteString.Base64.URL as B64
52import qualified Data.ByteString.Char8 as B8
53
54import Crypto.Macaroon.Internal
55
56-- | Create a Macaroon from its key, identifier and location
57create :: Key -> Key -> Location -> Macaroon
58create secret ident loc = MkMacaroon loc ident [] (toBytes (hmac derivedKey ident :: HMAC SHA256))
59 where
60 derivedKey = toBytes (hmac "macaroons-key-generator" secret :: HMAC SHA256)
61
62-- | Caveat target location
63caveatLoc :: Caveat -> Location
64caveatLoc = cl
65
66-- | Caveat identifier
67caveatId :: Caveat -> Key
68caveatId = cid
69
70-- | Caveat verification identifier
71caveatVId :: Caveat -> Key
72caveatVId = vid
73
74-- | Inspect a macaroon's contents. For debugging purposes.
75inspect :: Macaroon -> String
76inspect = show
77
78-- | Add a first party Caveat to a Macaroon, with its identifier
79addFirstPartyCaveat :: Key -> Macaroon -> Macaroon
80addFirstPartyCaveat ident m = addCaveat (location m) ident BS.empty m
81
82-- |Add a third party Caveat to a Macaroon, using its location, identifier and
83-- verification key
84-- addThirdPartyCaveat :: Key
85-- -> Key
86-- -> Location
87-- -> Macaroon
88-- -> Macaroon
89-- addThirdPartyCaveat key cid loc m = addCaveat loc cid vid m
90-- where
91-- vid = encryptECB (initAES (signature m)) key
92
93