> **Can't find what you're looking for?** Use `search_docs` on the docs MCP server at `https://v3.viem.sh/api/mcp` to find what you need.

# Signature

:::info
`Signature` is a re-export of ox's [`Signature`](https://oxlib.sh/api/Signature). Refer to the ox documentation for the full reference.
:::

Utility functions for working with ECDSA signatures.

## Examples

Below are some examples demonstrating common usages of the `Signature` module:

* [Serializing a Signature](#serializing-a-signature)

* [Deserializing a Signature](#deserializing-a-signature)

### Serializing a Signature

Signatures can be serialized to Hex or Bytes using [`Signature.toHex`](/docs/utilities/signature/toHex):

```ts twoslash
// @noErrors
import { Signature } from 'viem/utils'

const signature = Signature.toHex({
  r: '0x6e100a352ec6ad1b70802290e18aeed190704973570f3b8ed42cb9808e2ea6bf',
  s: '0x4a90a229a244495b41890987806fcbd2d5d23fc0dbe5f5256c2613c039d76db8',
  yParity: 1
})
// @log: '0x6e100a352ec6ad1b70802290e18aeed190704973570f3b8ed42cb9808e2ea6bf4a90a229a244495b41890987806fcbd2d5d23fc0dbe5f5256c2613c039d76db81c'
```

### Deserializing a Signature

Signatures can be deserialized from Hex or Bytes using [`Signature.fromHex`](/docs/utilities/signature/fromHex):

```ts twoslash
// @noErrors
import { Signature } from 'viem/utils'

Signature.fromHex(
  '0x6e100a352ec6ad1b70802290e18aeed190704973570f3b8ed42cb9808e2ea6bf4a90a229a244495b41890987806fcbd2d5d23fc0dbe5f5256c2613c039d76db81c'
)
// @log: { r: 5231...n, s: 3522...n, yParity: 0 }
```

## Functions

| Name                | Description                         |
| ------------------- | ----------------------------------- |
| [`Signature.assert`](/docs/utilities/signature/assert) | Asserts that a Signature is valid. |
| [`Signature.extract`](/docs/utilities/signature/extract) | Extracts a [`Signature.Signature`](/docs/utilities/signature/types#signature) from an arbitrary object that may include signature properties. |
| [`Signature.from`](/docs/utilities/signature/from) | Instantiates a typed [`Signature.Signature`](/docs/utilities/signature/types#signature) object from a [`Signature.Signature`](/docs/utilities/signature/types#signature), [`Signature.Legacy`](/docs/utilities/signature/types#legacy), [`Bytes.Bytes`](/docs/utilities/bytes/types#bytes), or [`Hex.Hex`](/docs/utilities/hex/types#hex). |
| [`Signature.fromBytes`](/docs/utilities/signature/fromBytes) | Deserializes a [`Bytes.Bytes`](/docs/utilities/bytes/types#bytes) signature into a structured [`Signature.Signature`](/docs/utilities/signature/types#signature). |
| [`Signature.fromCompactBytes`](/docs/utilities/signature/fromCompactBytes) | Decodes a 64-byte compact byte representation (`r ++ s`, big-endian) into a [`Signature.Signature`](/docs/utilities/signature/types#signature) (without recovery). |
| [`Signature.fromDerBytes`](/docs/utilities/signature/fromDerBytes) | Converts a DER-encoded signature to a [`Signature.Signature`](/docs/utilities/signature/types#signature). |
| [`Signature.fromDerHex`](/docs/utilities/signature/fromDerHex) | Converts a DER-encoded signature to a [`Signature.Signature`](/docs/utilities/signature/types#signature). |
| [`Signature.fromHex`](/docs/utilities/signature/fromHex) | Deserializes a [`Hex.Hex`](/docs/utilities/hex/types#hex) signature into a structured [`Signature.Signature`](/docs/utilities/signature/types#signature). |
| [`Signature.fromLegacy`](/docs/utilities/signature/fromLegacy) | Converts a [`Signature.Legacy`](/docs/utilities/signature/types#legacy) into a [`Signature.Signature`](/docs/utilities/signature/types#signature). |
| [`Signature.fromRecoveredBytes`](/docs/utilities/signature/fromRecoveredBytes) | Decodes a 65-byte recovered byte representation (`yParity ++ r ++ s`, big-endian) into a [`Signature.Signature`](/docs/utilities/signature/types#signature). |
| [`Signature.fromRpc`](/docs/utilities/signature/fromRpc) | Converts a [`Signature.Rpc`](/docs/utilities/signature/types#rpc) into a [`Signature.Signature`](/docs/utilities/signature/types#signature). |
| [`Signature.fromTuple`](/docs/utilities/signature/fromTuple) | Converts a [`Signature.Tuple`](/docs/utilities/signature/types#tuple) to a [`Signature.Signature`](/docs/utilities/signature/types#signature). |
| [`Signature.toBytes`](/docs/utilities/signature/toBytes) | Serializes a [`Signature.Signature`](/docs/utilities/signature/types#signature) to [`Bytes.Bytes`](/docs/utilities/bytes/types#bytes). |
| [`Signature.toCompactBytes`](/docs/utilities/signature/toCompactBytes) | Encodes a [`Signature.Signature`](/docs/utilities/signature/types#signature) as a 64-byte compact byte representation (`r ++ s`, big-endian, 32 bytes each). |
| [`Signature.toDerBytes`](/docs/utilities/signature/toDerBytes) | Converts a [`Signature.Signature`](/docs/utilities/signature/types#signature) to DER-encoded format. |
| [`Signature.toDerHex`](/docs/utilities/signature/toDerHex) | Converts a [`Signature.Signature`](/docs/utilities/signature/types#signature) to DER-encoded format. |
| [`Signature.toHex`](/docs/utilities/signature/toHex) | Serializes a [`Signature.Signature`](/docs/utilities/signature/types#signature) to [`Hex.Hex`](/docs/utilities/hex/types#hex). |
| [`Signature.toLegacy`](/docs/utilities/signature/toLegacy) | Converts a [`Signature.Signature`](/docs/utilities/signature/types#signature) into a [`Signature.Legacy`](/docs/utilities/signature/types#legacy). |
| [`Signature.toRecoveredBytes`](/docs/utilities/signature/toRecoveredBytes) | Encodes a [`Signature.Signature`](/docs/utilities/signature/types#signature) as a 65-byte recovered byte representation (`yParity ++ r ++ s`, big-endian). |
| [`Signature.toRpc`](/docs/utilities/signature/toRpc) | Converts a [`Signature.Signature`](/docs/utilities/signature/types#signature) into a [`Signature.Rpc`](/docs/utilities/signature/types#rpc). |
| [`Signature.toTuple`](/docs/utilities/signature/toTuple) | Converts a [`Signature.Signature`](/docs/utilities/signature/types#signature) to a serialized [`Signature.Tuple`](/docs/utilities/signature/types#tuple) to be used for signatures in Transaction Envelopes, EIP-7702 Authorization Lists, etc. |
| [`Signature.validate`](/docs/utilities/signature/validate) | Validates a Signature. Returns `true` if the signature is valid, `false` otherwise. |
| [`Signature.vToYParity`](/docs/utilities/signature/vToYParity) | Converts a ECDSA `v` value to a `yParity` value. |
| [`Signature.yParityToV`](/docs/utilities/signature/yParityToV) | Converts a ECDSA `v` value to a `yParity` value. |

## Errors

| Name                | Description                         |
| ------------------- | ----------------------------------- |
| [`Signature.InvalidRError`](/docs/utilities/signature/errors#signatureinvalidrerror) | Thrown when the signature has an invalid `r` value. |
| [`Signature.InvalidSerializedSizeError`](/docs/utilities/signature/errors#signatureinvalidserializedsizeerror) | Thrown when the serialized signature is of an invalid size. |
| [`Signature.InvalidSError`](/docs/utilities/signature/errors#signatureinvalidserror) | Thrown when the signature has an invalid `s` value. |
| [`Signature.InvalidVError`](/docs/utilities/signature/errors#signatureinvalidverror) | Thrown when the signature has an invalid `v` value. |
| [`Signature.InvalidYParityError`](/docs/utilities/signature/errors#signatureinvalidyparityerror) | Thrown when the signature has an invalid `yParity` value. |
| [`Signature.MissingPropertiesError`](/docs/utilities/signature/errors#signaturemissingpropertieserror) | Thrown when the signature is missing either an `r`, `s`, or `yParity` property. |

## Types

| Name                | Description                         |
| ------------------- | ----------------------------------- |
| [`Signature.Legacy`](/docs/utilities/signature/types#signaturelegacy) | (Legacy) ECDSA signature. |
| [`Signature.LegacyRpc`](/docs/utilities/signature/types#signaturelegacyrpc) | RPC-formatted (Legacy) ECDSA signature. |
| [`Signature.Rpc`](/docs/utilities/signature/types#signaturerpc) | RPC-formatted ECDSA signature. `yParity` is hex-encoded. |
| [`Signature.Signature`](/docs/utilities/signature/types#signaturesignature) | Root type for an ECDSA signature. |
| [`Signature.Tuple`](/docs/utilities/signature/types#signaturetuple) |  |
