# Signature

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`](/api/Signature/toHex):

```ts twoslash
import { Signature } from 'ox'

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`](/api/Signature/fromHex):

```ts twoslash
import { Signature } from 'ox'

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

## Functions

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

## Errors

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

## Types

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