-- Copyright (C) 2013, 2014, 2015, 2016 Fraser Tweedale -- -- Licensed under the Apache License, Version 2.0 (the "License"); -- you may not use this file except in compliance with the License. -- You may obtain a copy of the License at -- -- http://www.apache.org/licenses/LICENSE-2.0 -- -- Unless required by applicable law or agreed to in writing, software -- distributed under the License is distributed on an "AS IS" BASIS, -- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -- See the License for the specific language governing permissions and -- limitations under the License. {-# LANGUAGE RankNTypes #-} {-| A 'JWKStore' provides JWK enumeration and lookup. -} module Crypto.JOSE.JWK.Store ( JWKStore(..) ) where import Control.Lens (Fold, folding) import Crypto.JOSE.Header import Crypto.JOSE.JWK (JWK, JWKSet(..), KeyOp) class JWKStore a where -- | Enumerate keys keys :: Fold a JWK -- | Look up key by JWS/JWE header keysFor :: ( HasAlg h, HasJku h, HasJwk h, HasKid h , HasX5u h, HasX5c h, HasX5t h, HasX5tS256 h , HasTyp h, HasCty h ) => KeyOp -> h p -> Fold a JWK keysFor _ _ = keys instance JWKStore JWK where keys = id instance JWKStore JWKSet where keys = folding (\(JWKSet xs) -> xs)