jose-0.1.26.0: src/Crypto/JOSE/JWA/JWE.hs
-- Copyright (C) 2013 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 OverloadedStrings #-}
{-# LANGUAGE TemplateHaskell #-}
{-|
JSON Web Encryption data types specified under JSON Web Algorithms.
-}
module Crypto.JOSE.JWA.JWE where
import Crypto.JOSE.JWK
import Crypto.JOSE.TH
import Crypto.JOSE.Types
--
-- JWA §4. Cryptographic Algorithms for Encryption
--
-- | JWA 4.1. "alg" (Algorithms) Header Parameter Values for JWE
--
data JWEAlgHeaderParameters =
-- JWA §4.7.1. Header Parameters Used for ECDH Key Agreement
ECDHParameters {
epk :: JWK, -- Ephemeral Public Key ; a JWK PUBLIC key
apu :: Maybe Base64UrlString, -- Agreement PartyUInfo
apv :: Maybe Base64UrlString -- Agreement PartyVInfo
}
-- JWA §4.8.1. Header Parameters Used for AES GCM Key Encryption
| AESGCMParameters {
iv :: Base64Octets, -- Initialization Vector
tag :: Base64Octets -- Authentication Tag
}
-- JWA §4.9.1. Header Parameters Used for PBES2 Key Encryption
| PBES2Parameters {
p2s :: Base64Octets, -- PBKDF2 salt value
p2c :: Int -- PBKDF2 iteration count ; POSITIVE integer
}
deriving (Show)
-- | JWA §4.2. "enc" (Encryption Method) Header Parameters Values for JWE
--
$(deriveJOSEType "Enc" [
"A128CBC-HS256" -- AES HMAC SHA authenticated encryption Required
, "A192CBC-HS384" -- AES HMAC SHA authenticated encryption Optional
, "A256CBC-HS512" -- AES HMAC SHA authenticated encryption Required
, "A128GCM" -- AES in Galois/Counter Mode Recommended
, "A192GCM" -- AES in Galois/Counter Mode Optional
, "A256GCM" -- AES in Galois/Counter Mode Recommended
])