# `Onchain.Signature`
[🔗](https://github.com/ZenHive/onchain-stack/blob/onchain-v0.16.0/packages/onchain/lib/onchain/signature.ex#L1)

A secp256k1 signature with integer scalars and an optional recovery ID.

# `t`

```elixir
@type t() :: %Onchain.Signature{r: pos_integer(), recid: 0..3 | nil, s: pos_integer()}
```

# `from_der`

```elixir
@spec from_der(binary()) :: {:ok, t()} | {:error, :invalid_signature}
```

Parses a canonical DER ECDSA signature, rejecting invalid scalars and encodings.

# `normalize`

```elixir
@spec normalize(t()) :: t()
```

Normalizes s while preserving recovery by flipping the parity bit.

---

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