]> git.immae.eu Git - github/fretlink/hmacaroons.git/blame - src/Crypto/Macaroon.hs
Add maintenance status badge
[github/fretlink/hmacaroons.git] / src / Crypto / Macaroon.hs
CommitLineData
f6781456
JT
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
f6781456
JT
11Pure haskell implementations of macaroons.
12
13Warning: this implementation has not been audited by security experts.
2aede11a 14Do not use in production
f6781456
JT
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>
f6781456
JT
21-}
22module Crypto.Macaroon (
23 -- * Types
24 Macaroon
25 , Caveat
86f38823 26 , Secret
f6781456
JT
27 , Key
28 , Location
1971e224 29 , Sig
f6781456
JT
30 -- * Accessing functions
31 -- ** Macaroons
32 , location
33 , identifier
34 , caveats
35 , signature
36 -- ** Caveats
86f38823
JT
37 , cl
38 , cid
39 , vid
f6781456
JT
40
41 -- * Create Macaroons
42 , create
43 , inspect
44 , addFirstPartyCaveat
26d38f73 45 -- , addThirdPartyCaveat
27d5a3a4
JT
46 -- * Serialize
47 , module Crypto.Macaroon.Serializer.Base64
48 -- * Verify
49 , module Crypto.Macaroon.Verifier
f6781456
JT
50 ) where
51
8505c3d3 52-- import Crypto.Cipher.AES
f6781456
JT
53import Crypto.Hash
54import Data.Byteable
27d5a3a4 55import qualified Data.ByteString as BS
f6781456
JT
56
57import Crypto.Macaroon.Internal
27d5a3a4
JT
58import Crypto.Macaroon.Serializer.Base64
59import Crypto.Macaroon.Verifier
f6781456
JT
60
61-- | Create a Macaroon from its key, identifier and location
86f38823 62create :: Secret -> Key -> Location -> Macaroon
f6781456
JT
63create secret ident loc = MkMacaroon loc ident [] (toBytes (hmac derivedKey ident :: HMAC SHA256))
64 where
2aede11a 65 derivedKey = toBytes (hmac "macaroons-key-generator" secret :: HMAC SHA256)
f6781456 66
1971e224 67-- | Inspect a macaroon's contents. For debugging purposes.
f6781456 68inspect :: Macaroon -> String
2aede11a 69inspect = show
f6781456 70
f6781456
JT
71-- | Add a first party Caveat to a Macaroon, with its identifier
72addFirstPartyCaveat :: Key -> Macaroon -> Macaroon
73addFirstPartyCaveat ident m = addCaveat (location m) ident BS.empty m
74
75-- |Add a third party Caveat to a Macaroon, using its location, identifier and
76-- verification key
8505c3d3
JT
77-- addThirdPartyCaveat :: Key
78-- -> Key
79-- -> Location
80-- -> Macaroon
81-- -> Macaroon
82-- addThirdPartyCaveat key cid loc m = addCaveat loc cid vid m
83-- where
84-- vid = encryptECB (initAES (signature m)) key