jose-0.7.0.0: Javascript Object Signing and Encryption and JSON Web Token library

Safe HaskellNone
LanguageHaskell98

Crypto.JOSE.JWK

Contents

Description

A JSON Web Key (JWK) is a JavaScript Object Notation (JSON) data structure that represents a cryptographic key. This module also defines a JSON Web Key Set (JWK Set) JSON data structure for representing a set of JWKs.

-- Generate RSA JWK and set "kid" param to
-- base64url-encoded SHA-256 thumbprint of key.
--
doGen :: IO JWK
doGen = do
  jwk <- genJWK (RSAGenParam (4096 `div` 8))
  let
    h = view thumbprint jwk :: Digest SHA256
    kid = view (re (base64url . digest) . utf8) h
  pure $ set jwkKid (Just kid) jwk
Synopsis

JWK generation

genJWK :: MonadRandom m => KeyMaterialGenParam -> m JWK #

Generate a JWK. Apart from key parameters, no other parameters are set.

data KeyMaterialGenParam #

Keygen parameters.

Constructors

ECGenParam Crv

Generate an EC key with specified curve.

RSAGenParam Int

Generate an RSA key with specified size in bytes.

OctGenParam Int

Generate a symmetric key with specified size in bytes.

OKPGenParam OKPCrv

Generate an EdDSA or Edwards ECDH key with specified curve.

data Crv #

"crv" (Curve) Parameter

Constructors

P_256 
P_384 
P_521 
Instances
Eq Crv # 
Instance details

Defined in Crypto.JOSE.JWA.JWK

Methods

(==) :: Crv -> Crv -> Bool #

(/=) :: Crv -> Crv -> Bool #

Ord Crv # 
Instance details

Defined in Crypto.JOSE.JWA.JWK

Methods

compare :: Crv -> Crv -> Ordering #

(<) :: Crv -> Crv -> Bool #

(<=) :: Crv -> Crv -> Bool #

(>) :: Crv -> Crv -> Bool #

(>=) :: Crv -> Crv -> Bool #

max :: Crv -> Crv -> Crv #

min :: Crv -> Crv -> Crv #

Show Crv # 
Instance details

Defined in Crypto.JOSE.JWA.JWK

Methods

showsPrec :: Int -> Crv -> ShowS #

show :: Crv -> String #

showList :: [Crv] -> ShowS #

Arbitrary Crv # 
Instance details

Defined in Crypto.JOSE.JWA.JWK

Methods

arbitrary :: Gen Crv #

shrink :: Crv -> [Crv] #

ToJSON Crv # 
Instance details

Defined in Crypto.JOSE.JWA.JWK

FromJSON Crv # 
Instance details

Defined in Crypto.JOSE.JWA.JWK

data OKPCrv #

Constructors

Ed25519 
X25519 
Instances
Eq OKPCrv # 
Instance details

Defined in Crypto.JOSE.JWA.JWK

Methods

(==) :: OKPCrv -> OKPCrv -> Bool #

(/=) :: OKPCrv -> OKPCrv -> Bool #

Show OKPCrv # 
Instance details

Defined in Crypto.JOSE.JWA.JWK

Arbitrary OKPCrv # 
Instance details

Defined in Crypto.JOSE.JWA.JWK

data JWK #

RFC 7517 §4. JSON Web Key (JWK) Format

Instances
Eq JWK # 
Instance details

Defined in Crypto.JOSE.JWK

Methods

(==) :: JWK -> JWK -> Bool #

(/=) :: JWK -> JWK -> Bool #

Show JWK # 
Instance details

Defined in Crypto.JOSE.JWK

Methods

showsPrec :: Int -> JWK -> ShowS #

show :: JWK -> String #

showList :: [JWK] -> ShowS #

Arbitrary JWK # 
Instance details

Defined in Crypto.JOSE.JWK

Methods

arbitrary :: Gen JWK #

shrink :: JWK -> [JWK] #

ToJSON JWK # 
Instance details

Defined in Crypto.JOSE.JWK

FromJSON JWK # 
Instance details

Defined in Crypto.JOSE.JWK

AsPublicKey JWK # 
Instance details

Defined in Crypto.JOSE.JWK

JWKStore JWK # 
Instance details

Defined in Crypto.JOSE.JWK.Store

Methods

keys :: Fold JWK JWK #

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 JWK JWK #

class AsPublicKey k where #

Keys that may have have public material

Minimal complete definition

asPublicKey

Methods

asPublicKey :: Getter k (Maybe k) #

Get the public key

Parts of a JWK

data KeyUse #

RFC 7517 §4.2. "use" (Public Key Use) Parameter

Constructors

Sig 
Enc 
Instances
Eq KeyUse # 
Instance details

Defined in Crypto.JOSE.JWK

Methods

(==) :: KeyUse -> KeyUse -> Bool #

(/=) :: KeyUse -> KeyUse -> Bool #

Ord KeyUse # 
Instance details

Defined in Crypto.JOSE.JWK

Show KeyUse # 
Instance details

Defined in Crypto.JOSE.JWK

ToJSON KeyUse # 
Instance details

Defined in Crypto.JOSE.JWK

FromJSON KeyUse # 
Instance details

Defined in Crypto.JOSE.JWK

data KeyOp #

RFC 7517 §4.3. "key_ops" (Key Operations) Parameter

Instances
Eq KeyOp # 
Instance details

Defined in Crypto.JOSE.JWK

Methods

(==) :: KeyOp -> KeyOp -> Bool #

(/=) :: KeyOp -> KeyOp -> Bool #

Ord KeyOp # 
Instance details

Defined in Crypto.JOSE.JWK

Methods

compare :: KeyOp -> KeyOp -> Ordering #

(<) :: KeyOp -> KeyOp -> Bool #

(<=) :: KeyOp -> KeyOp -> Bool #

(>) :: KeyOp -> KeyOp -> Bool #

(>=) :: KeyOp -> KeyOp -> Bool #

max :: KeyOp -> KeyOp -> KeyOp #

min :: KeyOp -> KeyOp -> KeyOp #

Show KeyOp # 
Instance details

Defined in Crypto.JOSE.JWK

Methods

showsPrec :: Int -> KeyOp -> ShowS #

show :: KeyOp -> String #

showList :: [KeyOp] -> ShowS #

ToJSON KeyOp # 
Instance details

Defined in Crypto.JOSE.JWK

FromJSON KeyOp # 
Instance details

Defined in Crypto.JOSE.JWK

data JWKAlg #

RFC 7517 §4.4. "alg" (Algorithm) Parameter

See also RFC 7518 §6.4. which states that for "oct" keys, an "alg" member SHOULD be present to identify the algorithm intended to be used with the key, unless the application uses another means or convention to determine the algorithm used.

Constructors

JWSAlg Alg 
JWEAlg Alg 
Instances
Eq JWKAlg # 
Instance details

Defined in Crypto.JOSE.JWK

Methods

(==) :: JWKAlg -> JWKAlg -> Bool #

(/=) :: JWKAlg -> JWKAlg -> Bool #

Show JWKAlg # 
Instance details

Defined in Crypto.JOSE.JWK

ToJSON JWKAlg # 
Instance details

Defined in Crypto.JOSE.JWK

FromJSON JWKAlg # 
Instance details

Defined in Crypto.JOSE.JWK

Converting from other key formats

fromRSA :: PrivateKey -> JWK #

Convert RSA private key into a JWK

fromOctets :: Cons s s Word8 Word8 => s -> JWK #

Convert octet string into a JWK

JWK Thumbprint

thumbprint :: HashAlgorithm a => Getter JWK (Digest a) #

Compute the JWK Thumbprint of a JWK

digest :: HashAlgorithm a => Prism' ByteString (Digest a) #

Prism from ByteString to HashAlgorithm a => Digest a.

Use re digest to view the bytes of a digest

base64url :: (AsEmpty s1, AsEmpty s2, Cons s1 s1 Word8 Word8, Cons s2 s2 Word8 Word8) => Prism' s1 s2 #

Prism for encoding / decoding base64url.

To encode, review base64url. To decode, preview base64url.

Works with any combinations of strict/lazy ByteString.

JWK Set

newtype JWKSet #

RFC 7517 §5. JWK Set Format

Constructors

JWKSet [JWK] 
Instances
Eq JWKSet # 
Instance details

Defined in Crypto.JOSE.JWK

Methods

(==) :: JWKSet -> JWKSet -> Bool #

(/=) :: JWKSet -> JWKSet -> Bool #

Show JWKSet # 
Instance details

Defined in Crypto.JOSE.JWK

ToJSON JWKSet # 
Instance details

Defined in Crypto.JOSE.JWK

FromJSON JWKSet # 
Instance details

Defined in Crypto.JOSE.JWK

JWKStore JWKSet # 
Instance details

Defined in Crypto.JOSE.JWK.Store

Methods

keys :: Fold JWKSet JWK #

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 JWKSet JWK #

bestJWSAlg :: (MonadError e m, AsError e) => JWK -> m Alg #

Choose the cryptographically strongest JWS algorithm for a given key. The JWK "alg" algorithm parameter is ignored.