# `Ankusa.Verifier.Schemes`
[🔗](https://github.com/jamescarr/ankusa/blob/ankusa-v0.7.0/packages/ankusa/lib/ankusa/verifier/schemes.ex#L1)

Named presets for `Ankusa.Verifier.Hmac` and `Ankusa.Verifier.Asymmetric` —
the wire details of well-known providers as data, so adding a provider is
editing a table, not writing a module.

Any body-HMAC provider not listed here is expressed inline as a
`%Ankusa.Verifier.Hmac.Scheme{}`, any public-key one as a
`%Ankusa.Verifier.Asymmetric.Scheme{}` (see `validate!/1` for the
invariants). Providers that are not a signature over a request-derived
string (Twilio's URL + sorted-form-param SHA1, PayPal's RSA over a fetched
certificate) are not expressible by these engines and stay bespoke
`Ankusa.Verifier` modules.

# `all`

```elixir
@spec all() :: %{required(atom()) =&gt; Ankusa.Verifier.Hmac.Scheme.t()}
```

Every named `Ankusa.Verifier.Hmac` preset, keyed by scheme name.

# `asymmetric_all`

```elixir
@spec asymmetric_all() :: %{required(atom()) =&gt; Ankusa.Verifier.Asymmetric.Scheme.t()}
```

Every named `Ankusa.Verifier.Asymmetric` preset, keyed by scheme name.

# `fetch`

```elixir
@spec fetch(atom()) :: {:ok, Ankusa.Verifier.Hmac.Scheme.t()} | :error
```

Look up a named `Ankusa.Verifier.Hmac` preset.

# `fetch_asymmetric`

```elixir
@spec fetch_asymmetric(atom()) ::
  {:ok, Ankusa.Verifier.Asymmetric.Scheme.t()} | :error
```

Look up a named `Ankusa.Verifier.Asymmetric` preset.

# `fetch_asymmetric_compiled`

```elixir
@spec fetch_asymmetric_compiled(atom()) ::
  {:ok, Ankusa.Verifier.Asymmetric.Scheme.t(),
   Ankusa.Verifier.Template.compiled()}
  | :error
```

A named `Ankusa.Verifier.Asymmetric` preset with its `signed` template compiled.

# `fetch_compiled`

```elixir
@spec fetch_compiled(atom()) ::
  {:ok, Ankusa.Verifier.Hmac.Scheme.t(), Ankusa.Verifier.Template.compiled()}
  | :error
```

A named `Ankusa.Verifier.Hmac` preset with its `signed` template compiled.

# `validate!`

```elixir
@spec validate!(Ankusa.Verifier.Hmac.Scheme.t()) :: Ankusa.Verifier.Hmac.Scheme.t()
@spec validate!(Ankusa.Verifier.Asymmetric.Scheme.t()) ::
  Ankusa.Verifier.Asymmetric.Scheme.t()
```

Validate a scheme descriptor (`Ankusa.Verifier.Hmac.Scheme` or
`Ankusa.Verifier.Asymmetric.Scheme`), raising `ArgumentError` naming the
offending field on the first violation.

---

*Consult [api-reference.md](api-reference.md) for complete listing*
