README.md

# JOSEUtils

Convenience functions to work with JOSE (JSON Object Signing and Encryption)

## Installation

```elixir
def deps do
  [
    {:jose_utils, "~> 0.1.0"}
  ]
end
```

## Functions

### JWS

```elixir
@spec verify(
        jws :: serialized(),
        jwk_or_jwks :: JOSEUtils.JWK.t() | [JOSEUtils.JWK.t()],
        allowed_algs :: [JOSEUtils.JWA.sig_alg()]
      ) :: {:ok, {verified_content :: binary(), JOSEUtils.JWK.t()}} | :error
```

### JWE

```elixir
@spec decrypt(
        jwe :: serialized(),
        jwk_or_jwks :: JOSEUtils.JWK.t() | [JOSEUtils.JWK.t()],
        allowed_algs :: [JOSEUtils.JWA.enc_alg()],
        allowed_encs :: [JOSEUtils.JWA.enc_enc()]
      ) :: {:ok, {decrypted_message :: binary(), JOSEUtils.JWK.t()}} | :error
```

### JWK

```elixir
@spec sig_alg_digest(t()) :: atom()

@spec verify(t()) :: result()
```

### JWKS

```elixir
@spec signature_keys(
        t(),
        alg_or_algs :: JOSEUtils.JWA.sig_alg() | [JOSEUtils.JWA.sig_alg()] | nil
      ) :: t()

@spec verification_keys(
        t(),
        alg_or_algs :: JOSEUtils.JWA.sig_alg() | [JOSEUtils.JWA.sig_alg()] | nil
      ) :: t()

@spec encryption_keys(
        t(),
        alg_or_algs :: JOSEUtils.JWA.enc_alg() | [JOSEUtils.JWA.enc_alg()] | nil,
        enc_or_encs :: JOSEUtils.JWA.enc_enc() | [JOSEUtils.JWA.enc_enc()] | nil
      ) :: t()

@spec decryption_keys(
        t(),
        alg_or_algs :: JOSEUtils.JWA.enc_alg() | [JOSEUtils.JWA.enc_alg()] | nil,
        enc_or_encs :: JOSEUtils.JWA.enc_enc() | [JOSEUtils.JWA.enc_enc()] | nil
      ) :: t()
```