# `EEVM.Precompiles.P256Verify`
[🔗](https://github.com/mw2000/eevm/blob/v0.1.0/lib/eevm/precompiles/p256_verify.ex#L1)

P256VERIFY precompile — address `0x100` (EIP-7951, Osaka onward).

Verifies an ECDSA signature over secp256r1 (NIST P-256).

### Gas schedule

Flat `6900` gas, charged whether or not the signature verifies.

### Input format

Exactly 160 bytes: `hash(32) || r(32) || s(32) || qx(32) || qy(32)`.

### Output format

32-byte `0x00..01` when the signature is valid; empty output when it is not
or when the input fails validation (wrong length, `r`/`s` outside `(0, n)`,
`qx`/`qy` not below `p`, or `(qx, qy)` not on the curve, which also rejects
the `(0, 0)` point-at-infinity encoding). The precompile never reverts.

Verification is `EEVM.Crypto.ECDSA.verify/5`, which rejects a
point-at-infinity `R'` and compares `R'.x mod n` against `r`, as EIP-7951
requires.

# `execute`

```elixir
@spec execute(binary(), non_neg_integer()) ::
  {:ok, binary(), non_neg_integer()} | {:error, :out_of_gas}
```

Executes the P256VERIFY precompile.

---

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