> ## Documentation Index
> Fetch the complete documentation index at: https://voltaire.tevm.sh/llms.txt
> Use this file to discover all available pages before exploring further.

# primitives/Signature

> Auto-generated API documentation

[**@tevm/voltaire**](../index.mdx)

***

[@tevm/voltaire](../index.mdx) / primitives/Signature

# primitives/Signature

## Classes

### InvalidAlgorithmError

Defined in: [src/primitives/Signature/errors.js:103](https://github.com/evmts/voltaire/blob/bd6ec34405c15ad8cd51d11579d495dc53813482/src/primitives/Signature/errors.js#L103)

Error for invalid signature algorithm

#### Example

```typescript theme={null}
throw new InvalidAlgorithmError(
  'DER encoding only supported for ECDSA signatures',
  {
    value: algorithm,
    expected: 'secp256k1 or p256',
    code: 'SIGNATURE_INVALID_ALGORITHM',
    docsPath: '/primitives/signature/to-der#error-handling'
  }
)
```

#### Extends

* [`InvalidSignatureError`](../index/index.mdx#invalidsignatureerror)

#### Constructors

##### Constructor

> **new InvalidAlgorithmError**(`message`, `options?`): [`InvalidAlgorithmError`](#invalidalgorithmerror)

Defined in: [src/primitives/Signature/errors.js:114](https://github.com/evmts/voltaire/blob/bd6ec34405c15ad8cd51d11579d495dc53813482/src/primitives/Signature/errors.js#L114)

###### Parameters

###### message

`string`

###### options?

###### cause?

`Error`

###### code?

`string`

###### context?

`Record`\<`string`, `unknown`>

###### docsPath?

`string`

###### expected?

`string`

###### value?

`unknown`

###### Returns

[`InvalidAlgorithmError`](#invalidalgorithmerror)

###### Overrides

[`InvalidSignatureError`](../index/index.mdx#invalidsignatureerror).[`constructor`](../index/index.mdx#constructor-12)

#### Properties

##### cause?

> `optional` **cause**: `Error`

Defined in: [src/primitives/errors/AbstractError.ts:56](https://github.com/evmts/voltaire/blob/bd6ec34405c15ad8cd51d11579d495dc53813482/src/primitives/errors/AbstractError.ts#L56)

Root cause of this error (for error chaining)

###### Inherited from

[`InvalidSignatureError`](../index/index.mdx#invalidsignatureerror).[`cause`](../index/index.mdx#cause-12)

##### code

> **code**: `string`

Defined in: [src/primitives/errors/AbstractError.ts:39](https://github.com/evmts/voltaire/blob/bd6ec34405c15ad8cd51d11579d495dc53813482/src/primitives/errors/AbstractError.ts#L39)

Machine-readable error code for programmatic handling

###### Example

```ts theme={null}
'INVALID_FORMAT', 'INVALID_LENGTH'
```

###### Inherited from

[`InvalidSignatureError`](../index/index.mdx#invalidsignatureerror).[`code`](../index/index.mdx#code-12)

##### context?

> `optional` **context**: `Record`\<`string`, `unknown`>

Defined in: [src/primitives/errors/AbstractError.ts:45](https://github.com/evmts/voltaire/blob/bd6ec34405c15ad8cd51d11579d495dc53813482/src/primitives/errors/AbstractError.ts#L45)

Additional context metadata for debugging

###### Example

```ts theme={null}
{ value: '0x123', expected: '20 bytes' }
```

###### Inherited from

[`InvalidSignatureError`](../index/index.mdx#invalidsignatureerror).[`context`](../index/index.mdx#context-12)

##### docsPath?

> `optional` **docsPath**: `string`

Defined in: [src/primitives/errors/AbstractError.ts:51](https://github.com/evmts/voltaire/blob/bd6ec34405c15ad8cd51d11579d495dc53813482/src/primitives/errors/AbstractError.ts#L51)

Path to documentation for this error

###### Example

```ts theme={null}
'/primitives/address/from-hex#error-handling'
```

###### Inherited from

[`InvalidSignatureError`](../index/index.mdx#invalidsignatureerror).[`docsPath`](../index/index.mdx#docspath-12)

##### name

> **name**: `string`

Defined in: [src/primitives/Signature/errors.js:125](https://github.com/evmts/voltaire/blob/bd6ec34405c15ad8cd51d11579d495dc53813482/src/primitives/Signature/errors.js#L125)

###### Inherited from

`InvalidSignatureError.name`

#### Methods

##### getErrorChain()

> **getErrorChain**(): `string`

Defined in: [src/primitives/errors/AbstractError.ts:94](https://github.com/evmts/voltaire/blob/bd6ec34405c15ad8cd51d11579d495dc53813482/src/primitives/errors/AbstractError.ts#L94)

Get full error chain as string for logging

###### Returns

`string`

###### Inherited from

[`InvalidSignatureError`](../index/index.mdx#invalidsignatureerror).[`getErrorChain`](../index/index.mdx#geterrorchain-24)

##### toJSON()

> **toJSON**(): `Record`\<`string`, `unknown`>

Defined in: [src/primitives/errors/AbstractError.ts:110](https://github.com/evmts/voltaire/blob/bd6ec34405c15ad8cd51d11579d495dc53813482/src/primitives/errors/AbstractError.ts#L110)

Serialize error to JSON for logging/telemetry

###### Returns

`Record`\<`string`, `unknown`>

###### Inherited from

[`InvalidSignatureError`](../index/index.mdx#invalidsignatureerror).[`toJSON`](../index/index.mdx#tojson-24)

***

### InvalidDERError

Defined in: [src/primitives/Signature/errors.js:187](https://github.com/evmts/voltaire/blob/bd6ec34405c15ad8cd51d11579d495dc53813482/src/primitives/Signature/errors.js#L187)

Error for invalid DER encoding

#### Example

```typescript theme={null}
throw new InvalidDERError(
  'Expected SEQUENCE tag (0x30)',
  {
    value: tag,
    expected: '0x30',
    code: 'SIGNATURE_INVALID_DER',
    docsPath: '/primitives/signature/from-der#error-handling'
  }
)
```

#### Extends

* [`InvalidFormatError`](../index/index.mdx#invalidformaterror)

#### Constructors

##### Constructor

> **new InvalidDERError**(`message`, `options?`): [`InvalidDERError`](#invaliddererror)

Defined in: [src/primitives/Signature/errors.js:198](https://github.com/evmts/voltaire/blob/bd6ec34405c15ad8cd51d11579d495dc53813482/src/primitives/Signature/errors.js#L198)

###### Parameters

###### message

`string`

###### options?

###### cause?

`Error`

###### code?

`string`

###### context?

`Record`\<`string`, `unknown`>

###### docsPath?

`string`

###### expected?

`string`

###### value?

`unknown`

###### Returns

[`InvalidDERError`](#invaliddererror)

###### Overrides

[`InvalidFormatError`](../index/index.mdx#invalidformaterror).[`constructor`](../index/index.mdx#constructor-7)

#### Properties

##### cause?

> `optional` **cause**: `Error`

Defined in: [src/primitives/errors/AbstractError.ts:56](https://github.com/evmts/voltaire/blob/bd6ec34405c15ad8cd51d11579d495dc53813482/src/primitives/errors/AbstractError.ts#L56)

Root cause of this error (for error chaining)

###### Inherited from

[`InvalidFormatError`](../index/index.mdx#invalidformaterror).[`cause`](../index/index.mdx#cause-7)

##### code

> **code**: `string`

Defined in: [src/primitives/errors/AbstractError.ts:39](https://github.com/evmts/voltaire/blob/bd6ec34405c15ad8cd51d11579d495dc53813482/src/primitives/errors/AbstractError.ts#L39)

Machine-readable error code for programmatic handling

###### Example

```ts theme={null}
'INVALID_FORMAT', 'INVALID_LENGTH'
```

###### Inherited from

[`InvalidFormatError`](../index/index.mdx#invalidformaterror).[`code`](../index/index.mdx#code-7)

##### context?

> `optional` **context**: `Record`\<`string`, `unknown`>

Defined in: [src/primitives/errors/AbstractError.ts:45](https://github.com/evmts/voltaire/blob/bd6ec34405c15ad8cd51d11579d495dc53813482/src/primitives/errors/AbstractError.ts#L45)

Additional context metadata for debugging

###### Example

```ts theme={null}
{ value: '0x123', expected: '20 bytes' }
```

###### Inherited from

[`InvalidFormatError`](../index/index.mdx#invalidformaterror).[`context`](../index/index.mdx#context-7)

##### docsPath?

> `optional` **docsPath**: `string`

Defined in: [src/primitives/errors/AbstractError.ts:51](https://github.com/evmts/voltaire/blob/bd6ec34405c15ad8cd51d11579d495dc53813482/src/primitives/errors/AbstractError.ts#L51)

Path to documentation for this error

###### Example

```ts theme={null}
'/primitives/address/from-hex#error-handling'
```

###### Inherited from

[`InvalidFormatError`](../index/index.mdx#invalidformaterror).[`docsPath`](../index/index.mdx#docspath-7)

##### expected

> **expected**: `string`

Defined in: [src/primitives/errors/ValidationError.ts:19](https://github.com/evmts/voltaire/blob/bd6ec34405c15ad8cd51d11579d495dc53813482/src/primitives/errors/ValidationError.ts#L19)

###### Inherited from

[`InvalidFormatError`](../index/index.mdx#invalidformaterror).[`expected`](../index/index.mdx#expected-3)

##### name

> **name**: `string`

Defined in: [src/primitives/Signature/errors.js:208](https://github.com/evmts/voltaire/blob/bd6ec34405c15ad8cd51d11579d495dc53813482/src/primitives/Signature/errors.js#L208)

###### Inherited from

`InvalidFormatError.name`

##### value

> **value**: `unknown`

Defined in: [src/primitives/errors/ValidationError.ts:18](https://github.com/evmts/voltaire/blob/bd6ec34405c15ad8cd51d11579d495dc53813482/src/primitives/errors/ValidationError.ts#L18)

###### Inherited from

[`InvalidFormatError`](../index/index.mdx#invalidformaterror).[`value`](../index/index.mdx#value-3)

#### Methods

##### getErrorChain()

> **getErrorChain**(): `string`

Defined in: [src/primitives/errors/AbstractError.ts:94](https://github.com/evmts/voltaire/blob/bd6ec34405c15ad8cd51d11579d495dc53813482/src/primitives/errors/AbstractError.ts#L94)

Get full error chain as string for logging

###### Returns

`string`

###### Inherited from

[`InvalidFormatError`](../index/index.mdx#invalidformaterror).[`getErrorChain`](../index/index.mdx#geterrorchain-14)

##### toJSON()

> **toJSON**(): `Record`\<`string`, `unknown`>

Defined in: [src/primitives/errors/AbstractError.ts:110](https://github.com/evmts/voltaire/blob/bd6ec34405c15ad8cd51d11579d495dc53813482/src/primitives/errors/AbstractError.ts#L110)

Serialize error to JSON for logging/telemetry

###### Returns

`Record`\<`string`, `unknown`>

###### Inherited from

[`InvalidFormatError`](../index/index.mdx#invalidformaterror).[`toJSON`](../index/index.mdx#tojson-14)

***

### InvalidSignatureFormatError

Defined in: [src/primitives/Signature/errors.js:63](https://github.com/evmts/voltaire/blob/bd6ec34405c15ad8cd51d11579d495dc53813482/src/primitives/Signature/errors.js#L63)

Error for invalid signature format

#### Example

```typescript theme={null}
throw new InvalidSignatureFormatError(
  'Unsupported signature value type',
  {
    value: typeof input,
    expected: 'Uint8Array or signature object',
    code: 'SIGNATURE_INVALID_FORMAT',
    docsPath: '/primitives/signature/from#error-handling'
  }
)
```

#### Extends

* [`InvalidFormatError`](../index/index.mdx#invalidformaterror)

#### Constructors

##### Constructor

> **new InvalidSignatureFormatError**(`message`, `options?`): [`InvalidSignatureFormatError`](#invalidsignatureformaterror)

Defined in: [src/primitives/Signature/errors.js:74](https://github.com/evmts/voltaire/blob/bd6ec34405c15ad8cd51d11579d495dc53813482/src/primitives/Signature/errors.js#L74)

###### Parameters

###### message

`string`

###### options?

###### cause?

`Error`

###### code?

`string`

###### context?

`Record`\<`string`, `unknown`>

###### docsPath?

`string`

###### expected?

`string`

###### value?

`unknown`

###### Returns

[`InvalidSignatureFormatError`](#invalidsignatureformaterror)

###### Overrides

[`InvalidFormatError`](../index/index.mdx#invalidformaterror).[`constructor`](../index/index.mdx#constructor-7)

#### Properties

##### cause?

> `optional` **cause**: `Error`

Defined in: [src/primitives/errors/AbstractError.ts:56](https://github.com/evmts/voltaire/blob/bd6ec34405c15ad8cd51d11579d495dc53813482/src/primitives/errors/AbstractError.ts#L56)

Root cause of this error (for error chaining)

###### Inherited from

[`InvalidFormatError`](../index/index.mdx#invalidformaterror).[`cause`](../index/index.mdx#cause-7)

##### code

> **code**: `string`

Defined in: [src/primitives/errors/AbstractError.ts:39](https://github.com/evmts/voltaire/blob/bd6ec34405c15ad8cd51d11579d495dc53813482/src/primitives/errors/AbstractError.ts#L39)

Machine-readable error code for programmatic handling

###### Example

```ts theme={null}
'INVALID_FORMAT', 'INVALID_LENGTH'
```

###### Inherited from

[`InvalidFormatError`](../index/index.mdx#invalidformaterror).[`code`](../index/index.mdx#code-7)

##### context?

> `optional` **context**: `Record`\<`string`, `unknown`>

Defined in: [src/primitives/errors/AbstractError.ts:45](https://github.com/evmts/voltaire/blob/bd6ec34405c15ad8cd51d11579d495dc53813482/src/primitives/errors/AbstractError.ts#L45)

Additional context metadata for debugging

###### Example

```ts theme={null}
{ value: '0x123', expected: '20 bytes' }
```

###### Inherited from

[`InvalidFormatError`](../index/index.mdx#invalidformaterror).[`context`](../index/index.mdx#context-7)

##### docsPath?

> `optional` **docsPath**: `string`

Defined in: [src/primitives/errors/AbstractError.ts:51](https://github.com/evmts/voltaire/blob/bd6ec34405c15ad8cd51d11579d495dc53813482/src/primitives/errors/AbstractError.ts#L51)

Path to documentation for this error

###### Example

```ts theme={null}
'/primitives/address/from-hex#error-handling'
```

###### Inherited from

[`InvalidFormatError`](../index/index.mdx#invalidformaterror).[`docsPath`](../index/index.mdx#docspath-7)

##### expected

> **expected**: `string`

Defined in: [src/primitives/errors/ValidationError.ts:19](https://github.com/evmts/voltaire/blob/bd6ec34405c15ad8cd51d11579d495dc53813482/src/primitives/errors/ValidationError.ts#L19)

###### Inherited from

[`InvalidFormatError`](../index/index.mdx#invalidformaterror).[`expected`](../index/index.mdx#expected-3)

##### name

> **name**: `string`

Defined in: [src/primitives/Signature/errors.js:83](https://github.com/evmts/voltaire/blob/bd6ec34405c15ad8cd51d11579d495dc53813482/src/primitives/Signature/errors.js#L83)

###### Inherited from

`InvalidFormatError.name`

##### value

> **value**: `unknown`

Defined in: [src/primitives/errors/ValidationError.ts:18](https://github.com/evmts/voltaire/blob/bd6ec34405c15ad8cd51d11579d495dc53813482/src/primitives/errors/ValidationError.ts#L18)

###### Inherited from

[`InvalidFormatError`](../index/index.mdx#invalidformaterror).[`value`](../index/index.mdx#value-3)

#### Methods

##### getErrorChain()

> **getErrorChain**(): `string`

Defined in: [src/primitives/errors/AbstractError.ts:94](https://github.com/evmts/voltaire/blob/bd6ec34405c15ad8cd51d11579d495dc53813482/src/primitives/errors/AbstractError.ts#L94)

Get full error chain as string for logging

###### Returns

`string`

###### Inherited from

[`InvalidFormatError`](../index/index.mdx#invalidformaterror).[`getErrorChain`](../index/index.mdx#geterrorchain-14)

##### toJSON()

> **toJSON**(): `Record`\<`string`, `unknown`>

Defined in: [src/primitives/errors/AbstractError.ts:110](https://github.com/evmts/voltaire/blob/bd6ec34405c15ad8cd51d11579d495dc53813482/src/primitives/errors/AbstractError.ts#L110)

Serialize error to JSON for logging/telemetry

###### Returns

`Record`\<`string`, `unknown`>

###### Inherited from

[`InvalidFormatError`](../index/index.mdx#invalidformaterror).[`toJSON`](../index/index.mdx#tojson-14)

***

### InvalidSignatureLengthError

Defined in: [src/primitives/Signature/errors.js:23](https://github.com/evmts/voltaire/blob/bd6ec34405c15ad8cd51d11579d495dc53813482/src/primitives/Signature/errors.js#L23)

Error for invalid signature length

#### Example

```typescript theme={null}
throw new InvalidSignatureLengthError(
  'Compact signature must be 64 bytes',
  {
    value: sig.length,
    expected: '64 bytes',
    code: 'SIGNATURE_INVALID_LENGTH',
    docsPath: '/primitives/signature/from-compact#error-handling'
  }
)
```

#### Extends

* [`InvalidLengthError`](../index/index.mdx#invalidlengtherror)

#### Constructors

##### Constructor

> **new InvalidSignatureLengthError**(`message`, `options?`): [`InvalidSignatureLengthError`](#invalidsignaturelengtherror)

Defined in: [src/primitives/Signature/errors.js:34](https://github.com/evmts/voltaire/blob/bd6ec34405c15ad8cd51d11579d495dc53813482/src/primitives/Signature/errors.js#L34)

###### Parameters

###### message

`string`

###### options?

###### cause?

`Error`

###### code?

`string`

###### context?

`Record`\<`string`, `unknown`>

###### docsPath?

`string`

###### expected?

`string`

###### value?

`unknown`

###### Returns

[`InvalidSignatureLengthError`](#invalidsignaturelengtherror)

###### Overrides

[`InvalidLengthError`](../index/index.mdx#invalidlengtherror).[`constructor`](../index/index.mdx#constructor-8)

#### Properties

##### cause?

> `optional` **cause**: `Error`

Defined in: [src/primitives/errors/AbstractError.ts:56](https://github.com/evmts/voltaire/blob/bd6ec34405c15ad8cd51d11579d495dc53813482/src/primitives/errors/AbstractError.ts#L56)

Root cause of this error (for error chaining)

###### Inherited from

[`InvalidLengthError`](../index/index.mdx#invalidlengtherror).[`cause`](../index/index.mdx#cause-8)

##### code

> **code**: `string`

Defined in: [src/primitives/errors/AbstractError.ts:39](https://github.com/evmts/voltaire/blob/bd6ec34405c15ad8cd51d11579d495dc53813482/src/primitives/errors/AbstractError.ts#L39)

Machine-readable error code for programmatic handling

###### Example

```ts theme={null}
'INVALID_FORMAT', 'INVALID_LENGTH'
```

###### Inherited from

[`InvalidLengthError`](../index/index.mdx#invalidlengtherror).[`code`](../index/index.mdx#code-8)

##### context?

> `optional` **context**: `Record`\<`string`, `unknown`>

Defined in: [src/primitives/errors/AbstractError.ts:45](https://github.com/evmts/voltaire/blob/bd6ec34405c15ad8cd51d11579d495dc53813482/src/primitives/errors/AbstractError.ts#L45)

Additional context metadata for debugging

###### Example

```ts theme={null}
{ value: '0x123', expected: '20 bytes' }
```

###### Inherited from

[`InvalidLengthError`](../index/index.mdx#invalidlengtherror).[`context`](../index/index.mdx#context-8)

##### docsPath?

> `optional` **docsPath**: `string`

Defined in: [src/primitives/errors/AbstractError.ts:51](https://github.com/evmts/voltaire/blob/bd6ec34405c15ad8cd51d11579d495dc53813482/src/primitives/errors/AbstractError.ts#L51)

Path to documentation for this error

###### Example

```ts theme={null}
'/primitives/address/from-hex#error-handling'
```

###### Inherited from

[`InvalidLengthError`](../index/index.mdx#invalidlengtherror).[`docsPath`](../index/index.mdx#docspath-8)

##### expected

> **expected**: `string`

Defined in: [src/primitives/errors/ValidationError.ts:19](https://github.com/evmts/voltaire/blob/bd6ec34405c15ad8cd51d11579d495dc53813482/src/primitives/errors/ValidationError.ts#L19)

###### Inherited from

[`InvalidLengthError`](../index/index.mdx#invalidlengtherror).[`expected`](../index/index.mdx#expected-4)

##### name

> **name**: `string`

Defined in: [src/primitives/Signature/errors.js:43](https://github.com/evmts/voltaire/blob/bd6ec34405c15ad8cd51d11579d495dc53813482/src/primitives/Signature/errors.js#L43)

###### Inherited from

`InvalidLengthError.name`

##### value

> **value**: `unknown`

Defined in: [src/primitives/errors/ValidationError.ts:18](https://github.com/evmts/voltaire/blob/bd6ec34405c15ad8cd51d11579d495dc53813482/src/primitives/errors/ValidationError.ts#L18)

###### Inherited from

[`InvalidLengthError`](../index/index.mdx#invalidlengtherror).[`value`](../index/index.mdx#value-4)

#### Methods

##### getErrorChain()

> **getErrorChain**(): `string`

Defined in: [src/primitives/errors/AbstractError.ts:94](https://github.com/evmts/voltaire/blob/bd6ec34405c15ad8cd51d11579d495dc53813482/src/primitives/errors/AbstractError.ts#L94)

Get full error chain as string for logging

###### Returns

`string`

###### Inherited from

[`InvalidLengthError`](../index/index.mdx#invalidlengtherror).[`getErrorChain`](../index/index.mdx#geterrorchain-16)

##### toJSON()

> **toJSON**(): `Record`\<`string`, `unknown`>

Defined in: [src/primitives/errors/AbstractError.ts:110](https://github.com/evmts/voltaire/blob/bd6ec34405c15ad8cd51d11579d495dc53813482/src/primitives/errors/AbstractError.ts#L110)

Serialize error to JSON for logging/telemetry

###### Returns

`Record`\<`string`, `unknown`>

###### Inherited from

[`InvalidLengthError`](../index/index.mdx#invalidlengtherror).[`toJSON`](../index/index.mdx#tojson-16)

***

### NonCanonicalSignatureError

Defined in: [src/primitives/Signature/errors.js:145](https://github.com/evmts/voltaire/blob/bd6ec34405c15ad8cd51d11579d495dc53813482/src/primitives/Signature/errors.js#L145)

Error for non-canonical signature

#### Example

```typescript theme={null}
throw new NonCanonicalSignatureError(
  's value is not in canonical form',
  {
    value: s,
    expected: 's < n/2',
    code: 'SIGNATURE_NON_CANONICAL',
    docsPath: '/primitives/signature/canonical#error-handling'
  }
)
```

#### Extends

* [`InvalidSignatureError`](../index/index.mdx#invalidsignatureerror)

#### Constructors

##### Constructor

> **new NonCanonicalSignatureError**(`message`, `options?`): [`NonCanonicalSignatureError`](#noncanonicalsignatureerror)

Defined in: [src/primitives/Signature/errors.js:156](https://github.com/evmts/voltaire/blob/bd6ec34405c15ad8cd51d11579d495dc53813482/src/primitives/Signature/errors.js#L156)

###### Parameters

###### message

`string`

###### options?

###### cause?

`Error`

###### code?

`string`

###### context?

`Record`\<`string`, `unknown`>

###### docsPath?

`string`

###### expected?

`string`

###### value?

`unknown`

###### Returns

[`NonCanonicalSignatureError`](#noncanonicalsignatureerror)

###### Overrides

[`InvalidSignatureError`](../index/index.mdx#invalidsignatureerror).[`constructor`](../index/index.mdx#constructor-12)

#### Properties

##### cause?

> `optional` **cause**: `Error`

Defined in: [src/primitives/errors/AbstractError.ts:56](https://github.com/evmts/voltaire/blob/bd6ec34405c15ad8cd51d11579d495dc53813482/src/primitives/errors/AbstractError.ts#L56)

Root cause of this error (for error chaining)

###### Inherited from

[`InvalidSignatureError`](../index/index.mdx#invalidsignatureerror).[`cause`](../index/index.mdx#cause-12)

##### code

> **code**: `string`

Defined in: [src/primitives/errors/AbstractError.ts:39](https://github.com/evmts/voltaire/blob/bd6ec34405c15ad8cd51d11579d495dc53813482/src/primitives/errors/AbstractError.ts#L39)

Machine-readable error code for programmatic handling

###### Example

```ts theme={null}
'INVALID_FORMAT', 'INVALID_LENGTH'
```

###### Inherited from

[`InvalidSignatureError`](../index/index.mdx#invalidsignatureerror).[`code`](../index/index.mdx#code-12)

##### context?

> `optional` **context**: `Record`\<`string`, `unknown`>

Defined in: [src/primitives/errors/AbstractError.ts:45](https://github.com/evmts/voltaire/blob/bd6ec34405c15ad8cd51d11579d495dc53813482/src/primitives/errors/AbstractError.ts#L45)

Additional context metadata for debugging

###### Example

```ts theme={null}
{ value: '0x123', expected: '20 bytes' }
```

###### Inherited from

[`InvalidSignatureError`](../index/index.mdx#invalidsignatureerror).[`context`](../index/index.mdx#context-12)

##### docsPath?

> `optional` **docsPath**: `string`

Defined in: [src/primitives/errors/AbstractError.ts:51](https://github.com/evmts/voltaire/blob/bd6ec34405c15ad8cd51d11579d495dc53813482/src/primitives/errors/AbstractError.ts#L51)

Path to documentation for this error

###### Example

```ts theme={null}
'/primitives/address/from-hex#error-handling'
```

###### Inherited from

[`InvalidSignatureError`](../index/index.mdx#invalidsignatureerror).[`docsPath`](../index/index.mdx#docspath-12)

##### name

> **name**: `string`

Defined in: [src/primitives/Signature/errors.js:167](https://github.com/evmts/voltaire/blob/bd6ec34405c15ad8cd51d11579d495dc53813482/src/primitives/Signature/errors.js#L167)

###### Inherited from

`InvalidSignatureError.name`

#### Methods

##### getErrorChain()

> **getErrorChain**(): `string`

Defined in: [src/primitives/errors/AbstractError.ts:94](https://github.com/evmts/voltaire/blob/bd6ec34405c15ad8cd51d11579d495dc53813482/src/primitives/errors/AbstractError.ts#L94)

Get full error chain as string for logging

###### Returns

`string`

###### Inherited from

[`InvalidSignatureError`](../index/index.mdx#invalidsignatureerror).[`getErrorChain`](../index/index.mdx#geterrorchain-24)

##### toJSON()

> **toJSON**(): `Record`\<`string`, `unknown`>

Defined in: [src/primitives/errors/AbstractError.ts:110](https://github.com/evmts/voltaire/blob/bd6ec34405c15ad8cd51d11579d495dc53813482/src/primitives/errors/AbstractError.ts#L110)

Serialize error to JSON for logging/telemetry

###### Returns

`Record`\<`string`, `unknown`>

###### Inherited from

[`InvalidSignatureError`](../index/index.mdx#invalidsignatureerror).[`toJSON`](../index/index.mdx#tojson-24)

## Type Aliases

### SignatureAlgorithm

> **SignatureAlgorithm** = `"secp256k1"` | `"p256"` | `"ed25519"`

Defined in: [src/primitives/Signature/SignatureType.ts:6](https://github.com/evmts/voltaire/blob/bd6ec34405c15ad8cd51d11579d495dc53813482/src/primitives/Signature/SignatureType.ts#L6)

Algorithm types supported by the Signature primitive

***

### SignatureType

> **SignatureType** = `Uint8Array` & `object`

Defined in: [src/primitives/Signature/SignatureType.ts:17](https://github.com/evmts/voltaire/blob/bd6ec34405c15ad8cd51d11579d495dc53813482/src/primitives/Signature/SignatureType.ts#L17)

Unified signature type with algorithm tagging

Structure:

* For ECDSA (secp256k1, p256): r (32 bytes) + s (32 bytes) + optional v (1 byte for secp256k1)
* For Ed25519: signature (64 bytes)

Algorithm is tracked in metadata, not in the bytes

#### Type Declaration

##### \[brand]

> `readonly` **\[brand]**: `"Signature"`

##### algorithm

> `readonly` **algorithm**: [`SignatureAlgorithm`](#signaturealgorithm)

##### v?

> `readonly` `optional` **v**: `number`

## Variables

### COMPONENT\_SIZE

> `const` **COMPONENT\_SIZE**: `32` = `32`

Defined in: [src/primitives/Signature/constants.js:15](https://github.com/evmts/voltaire/blob/bd6ec34405c15ad8cd51d11579d495dc53813482/src/primitives/Signature/constants.js#L15)

Size of r or s component in bytes

***

### ECDSA\_SIZE

> `const` **ECDSA\_SIZE**: `64` = `64`

Defined in: [src/primitives/Signature/constants.js:6](https://github.com/evmts/voltaire/blob/bd6ec34405c15ad8cd51d11579d495dc53813482/src/primitives/Signature/constants.js#L6)

Size of ECDSA signature (r + s) in bytes

***

### ECDSA\_WITH\_V\_SIZE

> `const` **ECDSA\_WITH\_V\_SIZE**: `65` = `65`

Defined in: [src/primitives/Signature/constants.js:9](https://github.com/evmts/voltaire/blob/bd6ec34405c15ad8cd51d11579d495dc53813482/src/primitives/Signature/constants.js#L9)

Size of ECDSA signature with recovery ID (r + s + v) in bytes

***

### ED25519\_SIZE

> `const` **ED25519\_SIZE**: `64` = `64`

Defined in: [src/primitives/Signature/constants.js:12](https://github.com/evmts/voltaire/blob/bd6ec34405c15ad8cd51d11579d495dc53813482/src/primitives/Signature/constants.js#L12)

Size of Ed25519 signature in bytes

***

### RECOVERY\_ID\_MAX

> `const` **RECOVERY\_ID\_MAX**: `28` = `28`

Defined in: [src/primitives/Signature/constants.js:19](https://github.com/evmts/voltaire/blob/bd6ec34405c15ad8cd51d11579d495dc53813482/src/primitives/Signature/constants.js#L19)

***

### RECOVERY\_ID\_MIN

> `const` **RECOVERY\_ID\_MIN**: `27` = `27`

Defined in: [src/primitives/Signature/constants.js:18](https://github.com/evmts/voltaire/blob/bd6ec34405c15ad8cd51d11579d495dc53813482/src/primitives/Signature/constants.js#L18)

Ethereum recovery ID values

***

### Signature

> `const` **Signature**: `object`

Defined in: [src/primitives/Signature/index.ts:69](https://github.com/evmts/voltaire/blob/bd6ec34405c15ad8cd51d11579d495dc53813482/src/primitives/Signature/index.ts#L69)

#### Type Declaration

##### equals()

> **equals**: (`a`, `b`) => `boolean`

Check if two signatures are equal

###### Parameters

###### a

[`SignatureType`](#signaturetype)

First signature

###### b

[`SignatureType`](#signaturetype)

Second signature

###### Returns

`boolean`

True if signatures are equal

###### Example

```typescript theme={null}
const isEqual = Signature.equals(sig1, sig2);
```

##### from()

> **from**: (`value`) => [`SignatureType`](#signaturetype)

Create Signature from various input types (universal constructor)

###### Parameters

###### value

Signature data

`Uint8Array`\<`ArrayBufferLike`> | \{ `algorithm?`: [`SignatureAlgorithm`](#signaturealgorithm); `r`: `Uint8Array`; `s`: `Uint8Array`; `v?`: `number`; } | \{ `algorithm`: `"ed25519"`; `signature`: `Uint8Array`; }

###### Returns

[`SignatureType`](#signaturetype)

Signature

###### Throws

If value format is unsupported or invalid

###### Throws

If signature length is invalid

###### Example

```typescript theme={null}
// From compact bytes (64 bytes, defaults to secp256k1)
const sig1 = Signature.from(bytes64);

// From object with r, s, v
const sig2 = Signature.from({ r, s, v: 27, algorithm: 'secp256k1' });

// From Ed25519
const sig3 = Signature.from({ signature: bytes64, algorithm: 'ed25519' });
```

##### fromBytes()

> **fromBytes**: (`bytes`, `algorithmOrV?`) => [`SignatureType`](#signaturetype)

Create Signature from raw bytes

Wrapper around fromCompact with clearer semantics for byte input.

Formats supported:

* 64 bytes: ECDSA r+s (with optional EIP-2098 yParity in bit 255) or Ed25519 signature
* 65 bytes: ECDSA r+s+v (secp256k1 only)

###### Parameters

###### bytes

`Uint8Array`\<`ArrayBufferLike`>

Signature bytes

###### algorithmOrV?

Algorithm or explicit v value

`number` | [`SignatureAlgorithm`](#signaturealgorithm)

###### Returns

[`SignatureType`](#signaturetype)

Signature

###### Throws

If bytes length is invalid

###### Example

```typescript theme={null}
// 64 bytes - defaults to secp256k1
const sig1 = Signature.fromBytes(bytes64);

// 65 bytes with v
const sig2 = Signature.fromBytes(bytes65);

// Explicit algorithm
const sig3 = Signature.fromBytes(bytes64, 'ed25519');

// Explicit v value (overrides EIP-2098 encoding)
const sig4 = Signature.fromBytes(bytes64, 0);
```

##### fromCompact()

> **fromCompact**: (`bytes`, `algorithmOrV`) => [`SignatureType`](#signaturetype)

Create Signature from compact format (EIP-2098: supports yParity in bit 255 of s)

###### Parameters

###### bytes

`Uint8Array`\<`ArrayBufferLike`>

Compact signature bytes (64 or 65 bytes)

###### algorithmOrV

Algorithm or explicit v value

`number` | [`SignatureAlgorithm`](#signaturealgorithm)

###### Returns

[`SignatureType`](#signaturetype)

Signature

###### Throws

If bytes length is invalid

###### Example

```typescript theme={null}
// EIP-2098: Extract yParity from bit 255 of s (64 bytes)
const sig1 = Signature.fromCompact(bytes64, 'secp256k1');

// Explicit v value (64 bytes)
const sig2 = Signature.fromCompact(bytes64, 0);

// Legacy: 65 bytes with v at end
const sig3 = Signature.fromCompact(bytes65, 'secp256k1');

// Ed25519 (64 bytes)
const sig4 = Signature.fromCompact(bytes64, 'ed25519');
```

##### fromDER()

> **fromDER**: (`der`, `algorithm`, `v?`) => [`SignatureType`](#signaturetype)

Create Signature from DER-encoded ECDSA signature

###### Parameters

###### der

`Uint8Array`\<`ArrayBufferLike`>

DER-encoded signature

###### algorithm

[`SignatureAlgorithm`](#signaturealgorithm)

Algorithm (secp256k1 or p256)

###### v?

`number`

Optional recovery ID for secp256k1

###### Returns

[`SignatureType`](#signaturetype)

Signature

###### Throws

If DER encoding is invalid

###### Example

```typescript theme={null}
const sig = Signature.fromDER(derBytes, 'secp256k1', 27);
```

##### fromEd25519()

> **fromEd25519**: (`signature`) => [`SignatureType`](#signaturetype)

Create Signature from Ed25519 signature

###### Parameters

###### signature

`Uint8Array`\<`ArrayBufferLike`>

Ed25519 signature (64 bytes)

###### Returns

[`SignatureType`](#signaturetype)

Signature

###### Throws

If signature is not 64 bytes

###### Example

```typescript theme={null}
const sig = Signature.fromEd25519(signature);
```

##### fromHex()

> **fromHex**: (`value`, `algorithm?`) => [`SignatureType`](#signaturetype)

Create Signature from hex string

Formats supported:

* 128 hex chars (64 bytes): ECDSA r+s or Ed25519 signature
* 130 hex chars (65 bytes): ECDSA r+s+v

###### Parameters

###### value

`string`

Hex string (with or without 0x prefix)

###### algorithm?

[`SignatureAlgorithm`](#signaturealgorithm) = `"secp256k1"`

Signature algorithm

###### Returns

[`SignatureType`](#signaturetype)

Signature

###### Throws

If value is not a string

###### Throws

If hex length is invalid

###### Example

```typescript theme={null}
// 128 hex chars (64 bytes) - defaults to secp256k1
const sig1 = Signature.fromHex("0x1234...");

// 130 hex chars (65 bytes) - includes v
const sig2 = Signature.fromHex("0x1234...ab");

// Ed25519 (128 hex chars)
const sig3 = Signature.fromHex("0x1234...", "ed25519");

// P256 (128 hex chars)
const sig4 = Signature.fromHex("0x1234...", "p256");
```

##### fromP256()

> **fromP256**: (`r`, `s`) => [`SignatureType`](#signaturetype)

Create Signature from P-256 ECDSA signature

###### Parameters

###### r

`Uint8Array`\<`ArrayBufferLike`>

r component (32 bytes)

###### s

`Uint8Array`\<`ArrayBufferLike`>

s component (32 bytes)

###### Returns

[`SignatureType`](#signaturetype)

Signature

###### Example

```typescript theme={null}
const sig = Signature.fromP256(rBytes, sBytes);
```

##### fromRpc()

> **fromRpc**: (`rpc`) => [`SignatureType`](#signaturetype)

Create Signature from RPC format

###### Parameters

###### rpc

RPC format signature

###### r

`string`

###### s

`string`

###### v?

`string` | `number`

###### yParity?

`string` | `number`

###### Returns

[`SignatureType`](#signaturetype)

Signature

###### Example

```javascript theme={null}
import * as Signature from './primitives/Signature/index.js';
const sig = Signature.fromRpc({
  r: '0x...',
  s: '0x...',
  yParity: '0x0'
});
```

##### fromSecp256k1()

> **fromSecp256k1**: (`r`, `s`, `v?`) => [`SignatureType`](#signaturetype)

Create Signature from secp256k1 ECDSA signature

###### Parameters

###### r

`Uint8Array`\<`ArrayBufferLike`>

r component (32 bytes)

###### s

`Uint8Array`\<`ArrayBufferLike`>

s component (32 bytes)

###### v?

`number`

Optional recovery ID (27 or 28 for Ethereum)

###### Returns

[`SignatureType`](#signaturetype)

Signature

###### Example

```typescript theme={null}
const sig = Signature.fromSecp256k1(rBytes, sBytes, 27);
```

##### fromTuple()

> **fromTuple**: (`tuple`, `chainId?`) => [`SignatureType`](#signaturetype)

Create Signature from tuple format \[yParity, r, s]

###### Parameters

###### tuple

\[`number`, `Uint8Array`\<`ArrayBufferLike`>, `Uint8Array`\<`ArrayBufferLike`>]

Tuple \[yParity, r, s]

###### chainId?

`number`

Optional chain ID for EIP-155 v encoding

###### Returns

[`SignatureType`](#signaturetype)

Signature

###### Example

```javascript theme={null}
import * as Signature from './primitives/Signature/index.js';
const sig = Signature.fromTuple([0, r, s]);
// With chain ID for EIP-155
const sig155 = Signature.fromTuple([0, r, s], 1);
```

##### getAlgorithm()

> **getAlgorithm**: (`signature`) => [`SignatureAlgorithm`](#signaturealgorithm)

Get the algorithm of a signature

###### Parameters

###### signature

[`SignatureType`](#signaturetype)

Signature to check

###### Returns

[`SignatureAlgorithm`](#signaturealgorithm)

Signature algorithm

###### Example

```typescript theme={null}
const algorithm = Signature.getAlgorithm(sig);
// "secp256k1" | "p256" | "ed25519"
```

##### getR()

> **getR**: (`signature`) => [`HashType`](../index/namespaces/HashType.mdx#hashtype)

Get r component from ECDSA signature

###### Parameters

###### signature

[`SignatureType`](#signaturetype)

Signature

###### Returns

[`HashType`](../index/namespaces/HashType.mdx#hashtype)

r component (32 bytes, HashType)

###### Throws

If signature is not ECDSA

###### Example

```typescript theme={null}
const r = Signature.getR(sig);
```

##### getS()

> **getS**: (`signature`) => [`HashType`](../index/namespaces/HashType.mdx#hashtype)

Get s component from ECDSA signature

###### Parameters

###### signature

[`SignatureType`](#signaturetype)

Signature

###### Returns

[`HashType`](../index/namespaces/HashType.mdx#hashtype)

s component (32 bytes, HashType)

###### Throws

If signature is not ECDSA

###### Example

```typescript theme={null}
const s = Signature.getS(sig);
```

##### getV()

> **getV**: (`signature`) => `number` | `undefined`

Get v (recovery ID) from secp256k1 signature

###### Parameters

###### signature

[`SignatureType`](#signaturetype)

Signature

###### Returns

`number` | `undefined`

Recovery ID (27 or 28) or undefined

###### Throws

If signature is not secp256k1

###### Example

```typescript theme={null}
const v = Signature.getV(sig);
```

##### is()

> **is**: (`value`) => `value is SignatureType`

Check if value is a SignatureType

###### Parameters

###### value

`unknown`

Value to check

###### Returns

`value is SignatureType`

True if value is a SignatureType

###### Example

```typescript theme={null}
if (Signature.is(value)) {
  console.log(value.algorithm);
}
```

##### isCanonical()

> **isCanonical**: (`signature`) => `boolean`

Check if ECDSA signature has canonical s-value (s is less than or equal to n/2)

For secp256k1 and p256, a signature is canonical if s is at most curve\_order / 2
This prevents signature malleability.

###### Parameters

###### signature

[`SignatureType`](#signaturetype)

Signature to check

###### Returns

`boolean`

True if signature is canonical or Ed25519

###### Example

```typescript theme={null}
if (!Signature.isCanonical(sig)) {
  sig = Signature.normalize(sig);
}
```

##### normalize()

> **normalize**: (`signature`) => [`SignatureType`](#signaturetype)

Normalize ECDSA signature to canonical form (s = n - s if s > n/2)

###### Parameters

###### signature

[`SignatureType`](#signaturetype)

Signature to normalize

###### Returns

[`SignatureType`](#signaturetype)

Normalized signature

###### Example

```typescript theme={null}
const normalized = Signature.normalize(sig);
```

##### toBytes()

> **toBytes**: (`signature`) => `Uint8Array`\<`ArrayBufferLike`>

Convert Signature to raw bytes (without metadata)

###### Parameters

###### signature

[`SignatureType`](#signaturetype)

Signature to convert

###### Returns

`Uint8Array`\<`ArrayBufferLike`>

Raw signature bytes

###### Example

```typescript theme={null}
const bytes = Signature.toBytes(sig);
// Returns r + s (64 bytes) for ECDSA or signature (64 bytes) for Ed25519
```

##### toCompact()

> **toCompact**: (`signature`) => `Uint8Array`\<`ArrayBufferLike`>

Convert Signature to compact format (EIP-2098: yParity encoded in bit 255 of s)

###### Parameters

###### signature

[`SignatureType`](#signaturetype)

Signature to convert

###### Returns

`Uint8Array`\<`ArrayBufferLike`>

Compact signature (64 bytes with yParity in bit 255 of s)

###### Example

```typescript theme={null}
const compact = Signature.toCompact(sig);
// Returns r + s (64 bytes) with yParity encoded in bit 255 of s (EIP-2098)
```

##### toDER()

> **toDER**: (`signature`) => `Uint8Array`\<`ArrayBufferLike`>

Convert ECDSA signature to DER encoding

###### Parameters

###### signature

[`SignatureType`](#signaturetype)

Signature to convert

###### Returns

`Uint8Array`\<`ArrayBufferLike`>

DER-encoded signature

###### Throws

If signature is not ECDSA (secp256k1 or p256)

###### Example

```typescript theme={null}
const der = Signature.toDER(sig);
// Returns DER-encoded SEQUENCE of r and s integers
```

##### toHex()

> **toHex**: (`signature`, `includeV?`) => `string`

Convert Signature to hex string

Formats:

* ECDSA without v: 128 hex chars (64 bytes: r + s)
* ECDSA with v: 130 hex chars (65 bytes: r + s + v)
* Ed25519: 128 hex chars (64 bytes)

###### Parameters

###### signature

[`SignatureType`](#signaturetype)

Signature to convert

###### includeV?

`boolean` = `true`

Include v byte for secp256k1 (if present)

###### Returns

`string`

Hex string with 0x prefix

###### Example

```typescript theme={null}
const hex = Signature.toHex(sig);
// Returns "0x..." (130 chars with v, 128 chars without)

// Exclude v even if present
const hexNoV = Signature.toHex(sig, false);
// Returns "0x..." (128 chars)
```

##### toRpc()

> **toRpc**: (`signature`) => `object`

Convert Signature to RPC format (r, s, yParity as hex strings)

###### Parameters

###### signature

[`SignatureType`](#signaturetype)

Signature to convert

###### Returns

`object`

RPC format signature

###### r

> **r**: `string`

###### s

> **s**: `string`

###### v?

> `optional` **v**: `string`

###### yParity

> **yParity**: `string`

###### Throws

If signature is not secp256k1

###### Example

```javascript theme={null}
import * as Signature from './primitives/Signature/index.js';
const sig = Signature.fromSecp256k1(r, s, 27);
const rpc = Signature.toRpc(sig);
// { r: '0x...', s: '0x...', yParity: '0x0', v: '0x1b' }
```

##### toTuple()

> **toTuple**: (`signature`) => \[`number`, `Uint8Array`\<`ArrayBufferLike`>, `Uint8Array`\<`ArrayBufferLike`>]

Convert Signature to tuple format \[yParity, r, s] for transaction envelopes

###### Parameters

###### signature

[`SignatureType`](#signaturetype)

Signature to convert

###### Returns

\[`number`, `Uint8Array`\<`ArrayBufferLike`>, `Uint8Array`\<`ArrayBufferLike`>]

Tuple \[yParity, r, s]

###### Throws

If signature is not secp256k1 or has no v value

###### Example

```javascript theme={null}
import * as Signature from './primitives/Signature/index.js';
const sig = Signature.fromSecp256k1(r, s, 27);
const [yParity, r, s] = Signature.toTuple(sig);
```

##### verify()

> **verify**: (`signature`, `_message`, `_publicKey`) => `boolean`

Verify signature against message and public key

Note: This is a placeholder. Actual verification requires crypto implementations.
Use this in conjunction with crypto library functions.

###### Parameters

###### signature

[`SignatureType`](#signaturetype)

Signature to verify

###### \_message

`Uint8Array`\<`ArrayBufferLike`>

Message that was signed

###### \_publicKey

`Uint8Array`\<`ArrayBufferLike`>

Public key to verify against

###### Returns

`boolean`

True if signature is valid

###### Throws

If algorithm-specific verification is not available

###### Example

```typescript theme={null}
const isValid = Signature.verify(sig, message, publicKey);
```

## Functions

### equals()

> **equals**(`a`, `b`): `boolean`

Defined in: [src/primitives/Signature/equals.js:13](https://github.com/evmts/voltaire/blob/bd6ec34405c15ad8cd51d11579d495dc53813482/src/primitives/Signature/equals.js#L13)

Check if two signatures are equal

#### Parameters

##### a

[`SignatureType`](#signaturetype)

First signature

##### b

[`SignatureType`](#signaturetype)

Second signature

#### Returns

`boolean`

True if signatures are equal

#### Example

```typescript theme={null}
const isEqual = Signature.equals(sig1, sig2);
```

***

### from()

> **from**(`value`): [`SignatureType`](#signaturetype)

Defined in: [src/primitives/Signature/from.js:29](https://github.com/evmts/voltaire/blob/bd6ec34405c15ad8cd51d11579d495dc53813482/src/primitives/Signature/from.js#L29)

Create Signature from various input types (universal constructor)

#### Parameters

##### value

Signature data

`Uint8Array`\<`ArrayBufferLike`> | \{ `algorithm?`: [`SignatureAlgorithm`](#signaturealgorithm); `r`: `Uint8Array`; `s`: `Uint8Array`; `v?`: `number`; } | \{ `algorithm`: `"ed25519"`; `signature`: `Uint8Array`; }

#### Returns

[`SignatureType`](#signaturetype)

Signature

#### Throws

If value format is unsupported or invalid

#### Throws

If signature length is invalid

#### Example

```typescript theme={null}
// From compact bytes (64 bytes, defaults to secp256k1)
const sig1 = Signature.from(bytes64);

// From object with r, s, v
const sig2 = Signature.from({ r, s, v: 27, algorithm: 'secp256k1' });

// From Ed25519
const sig3 = Signature.from({ signature: bytes64, algorithm: 'ed25519' });
```

***

### fromBytes()

> **fromBytes**(`bytes`, `algorithmOrV?`): [`SignatureType`](#signaturetype)

Defined in: [src/primitives/Signature/fromBytes.js:32](https://github.com/evmts/voltaire/blob/bd6ec34405c15ad8cd51d11579d495dc53813482/src/primitives/Signature/fromBytes.js#L32)

Create Signature from raw bytes

Wrapper around fromCompact with clearer semantics for byte input.

Formats supported:

* 64 bytes: ECDSA r+s (with optional EIP-2098 yParity in bit 255) or Ed25519 signature
* 65 bytes: ECDSA r+s+v (secp256k1 only)

#### Parameters

##### bytes

`Uint8Array`\<`ArrayBufferLike`>

Signature bytes

##### algorithmOrV?

Algorithm or explicit v value

`number` | [`SignatureAlgorithm`](#signaturealgorithm)

#### Returns

[`SignatureType`](#signaturetype)

Signature

#### Throws

If bytes length is invalid

#### Example

```typescript theme={null}
// 64 bytes - defaults to secp256k1
const sig1 = Signature.fromBytes(bytes64);

// 65 bytes with v
const sig2 = Signature.fromBytes(bytes65);

// Explicit algorithm
const sig3 = Signature.fromBytes(bytes64, 'ed25519');

// Explicit v value (overrides EIP-2098 encoding)
const sig4 = Signature.fromBytes(bytes64, 0);
```

***

### fromCompact()

> **fromCompact**(`bytes`, `algorithmOrV`): [`SignatureType`](#signaturetype)

Defined in: [src/primitives/Signature/fromCompact.js:35](https://github.com/evmts/voltaire/blob/bd6ec34405c15ad8cd51d11579d495dc53813482/src/primitives/Signature/fromCompact.js#L35)

Create Signature from compact format (EIP-2098: supports yParity in bit 255 of s)

#### Parameters

##### bytes

`Uint8Array`\<`ArrayBufferLike`>

Compact signature bytes (64 or 65 bytes)

##### algorithmOrV

Algorithm or explicit v value

`number` | [`SignatureAlgorithm`](#signaturealgorithm)

#### Returns

[`SignatureType`](#signaturetype)

Signature

#### Throws

If bytes length is invalid

#### Example

```typescript theme={null}
// EIP-2098: Extract yParity from bit 255 of s (64 bytes)
const sig1 = Signature.fromCompact(bytes64, 'secp256k1');

// Explicit v value (64 bytes)
const sig2 = Signature.fromCompact(bytes64, 0);

// Legacy: 65 bytes with v at end
const sig3 = Signature.fromCompact(bytes65, 'secp256k1');

// Ed25519 (64 bytes)
const sig4 = Signature.fromCompact(bytes64, 'ed25519');
```

***

### fromDER()

> **fromDER**(`der`, `algorithm`, `v?`): [`SignatureType`](#signaturetype)

Defined in: [src/primitives/Signature/fromDER.js:20](https://github.com/evmts/voltaire/blob/bd6ec34405c15ad8cd51d11579d495dc53813482/src/primitives/Signature/fromDER.js#L20)

Create Signature from DER-encoded ECDSA signature

#### Parameters

##### der

`Uint8Array`\<`ArrayBufferLike`>

DER-encoded signature

##### algorithm

[`SignatureAlgorithm`](#signaturealgorithm)

Algorithm (secp256k1 or p256)

##### v?

`number`

Optional recovery ID for secp256k1

#### Returns

[`SignatureType`](#signaturetype)

Signature

#### Throws

If DER encoding is invalid

#### Example

```typescript theme={null}
const sig = Signature.fromDER(derBytes, 'secp256k1', 27);
```

***

### fromEd25519()

> **fromEd25519**(`signature`): [`SignatureType`](#signaturetype)

Defined in: [src/primitives/Signature/fromEd25519.js:16](https://github.com/evmts/voltaire/blob/bd6ec34405c15ad8cd51d11579d495dc53813482/src/primitives/Signature/fromEd25519.js#L16)

Create Signature from Ed25519 signature

#### Parameters

##### signature

`Uint8Array`\<`ArrayBufferLike`>

Ed25519 signature (64 bytes)

#### Returns

[`SignatureType`](#signaturetype)

Signature

#### Throws

If signature is not 64 bytes

#### Example

```typescript theme={null}
const sig = Signature.fromEd25519(signature);
```

***

### fromHex()

> **fromHex**(`value`, `algorithm?`): [`SignatureType`](#signaturetype)

Defined in: [src/primitives/Signature/fromHex.js:36](https://github.com/evmts/voltaire/blob/bd6ec34405c15ad8cd51d11579d495dc53813482/src/primitives/Signature/fromHex.js#L36)

Create Signature from hex string

Formats supported:

* 128 hex chars (64 bytes): ECDSA r+s or Ed25519 signature
* 130 hex chars (65 bytes): ECDSA r+s+v

#### Parameters

##### value

`string`

Hex string (with or without 0x prefix)

##### algorithm?

[`SignatureAlgorithm`](#signaturealgorithm) = `"secp256k1"`

Signature algorithm

#### Returns

[`SignatureType`](#signaturetype)

Signature

#### Throws

If value is not a string

#### Throws

If hex length is invalid

#### Example

```typescript theme={null}
// 128 hex chars (64 bytes) - defaults to secp256k1
const sig1 = Signature.fromHex("0x1234...");

// 130 hex chars (65 bytes) - includes v
const sig2 = Signature.fromHex("0x1234...ab");

// Ed25519 (128 hex chars)
const sig3 = Signature.fromHex("0x1234...", "ed25519");

// P256 (128 hex chars)
const sig4 = Signature.fromHex("0x1234...", "p256");
```

***

### fromP256()

> **fromP256**(`r`, `s`): [`SignatureType`](#signaturetype)

Defined in: [src/primitives/Signature/fromP256.js:16](https://github.com/evmts/voltaire/blob/bd6ec34405c15ad8cd51d11579d495dc53813482/src/primitives/Signature/fromP256.js#L16)

Create Signature from P-256 ECDSA signature

#### Parameters

##### r

`Uint8Array`\<`ArrayBufferLike`>

r component (32 bytes)

##### s

`Uint8Array`\<`ArrayBufferLike`>

s component (32 bytes)

#### Returns

[`SignatureType`](#signaturetype)

Signature

#### Example

```typescript theme={null}
const sig = Signature.fromP256(rBytes, sBytes);
```

***

### fromRpc()

> **fromRpc**(`rpc`): [`SignatureType`](#signaturetype)

Defined in: [src/primitives/Signature/fromRpc.js:19](https://github.com/evmts/voltaire/blob/bd6ec34405c15ad8cd51d11579d495dc53813482/src/primitives/Signature/fromRpc.js#L19)

Create Signature from RPC format

#### Parameters

##### rpc

RPC format signature

###### r

`string`

###### s

`string`

###### v?

`string` | `number`

###### yParity?

`string` | `number`

#### Returns

[`SignatureType`](#signaturetype)

Signature

#### Example

```javascript theme={null}
import * as Signature from './primitives/Signature/index.js';
const sig = Signature.fromRpc({
  r: '0x...',
  s: '0x...',
  yParity: '0x0'
});
```

***

### fromSecp256k1()

> **fromSecp256k1**(`r`, `s`, `v?`): [`SignatureType`](#signaturetype)

Defined in: [src/primitives/Signature/fromSecp256k1.js:17](https://github.com/evmts/voltaire/blob/bd6ec34405c15ad8cd51d11579d495dc53813482/src/primitives/Signature/fromSecp256k1.js#L17)

Create Signature from secp256k1 ECDSA signature

#### Parameters

##### r

`Uint8Array`\<`ArrayBufferLike`>

r component (32 bytes)

##### s

`Uint8Array`\<`ArrayBufferLike`>

s component (32 bytes)

##### v?

`number`

Optional recovery ID (27 or 28 for Ethereum)

#### Returns

[`SignatureType`](#signaturetype)

Signature

#### Example

```typescript theme={null}
const sig = Signature.fromSecp256k1(rBytes, sBytes, 27);
```

***

### fromTuple()

> **fromTuple**(`tuple`, `chainId?`): [`SignatureType`](#signaturetype)

Defined in: [src/primitives/Signature/fromTuple.js:18](https://github.com/evmts/voltaire/blob/bd6ec34405c15ad8cd51d11579d495dc53813482/src/primitives/Signature/fromTuple.js#L18)

Create Signature from tuple format \[yParity, r, s]

#### Parameters

##### tuple

\[`number`, `Uint8Array`\<`ArrayBufferLike`>, `Uint8Array`\<`ArrayBufferLike`>]

Tuple \[yParity, r, s]

##### chainId?

`number`

Optional chain ID for EIP-155 v encoding

#### Returns

[`SignatureType`](#signaturetype)

Signature

#### Example

```javascript theme={null}
import * as Signature from './primitives/Signature/index.js';
const sig = Signature.fromTuple([0, r, s]);
// With chain ID for EIP-155
const sig155 = Signature.fromTuple([0, r, s], 1);
```

***

### getAlgorithm()

> **getAlgorithm**(`signature`): [`SignatureAlgorithm`](#signaturealgorithm)

Defined in: [src/primitives/Signature/getAlgorithm.js:13](https://github.com/evmts/voltaire/blob/bd6ec34405c15ad8cd51d11579d495dc53813482/src/primitives/Signature/getAlgorithm.js#L13)

Get the algorithm of a signature

#### Parameters

##### signature

[`SignatureType`](#signaturetype)

Signature to check

#### Returns

[`SignatureAlgorithm`](#signaturealgorithm)

Signature algorithm

#### Example

```typescript theme={null}
const algorithm = Signature.getAlgorithm(sig);
// "secp256k1" | "p256" | "ed25519"
```

***

### getR()

> **getR**(`signature`): [`HashType`](../index/namespaces/HashType.mdx#hashtype)

Defined in: [src/primitives/Signature/getR.js:16](https://github.com/evmts/voltaire/blob/bd6ec34405c15ad8cd51d11579d495dc53813482/src/primitives/Signature/getR.js#L16)

Get r component from ECDSA signature

#### Parameters

##### signature

[`SignatureType`](#signaturetype)

Signature

#### Returns

[`HashType`](../index/namespaces/HashType.mdx#hashtype)

r component (32 bytes, HashType)

#### Throws

If signature is not ECDSA

#### Example

```typescript theme={null}
const r = Signature.getR(sig);
```

***

### getS()

> **getS**(`signature`): [`HashType`](../index/namespaces/HashType.mdx#hashtype)

Defined in: [src/primitives/Signature/getS.js:16](https://github.com/evmts/voltaire/blob/bd6ec34405c15ad8cd51d11579d495dc53813482/src/primitives/Signature/getS.js#L16)

Get s component from ECDSA signature

#### Parameters

##### signature

[`SignatureType`](#signaturetype)

Signature

#### Returns

[`HashType`](../index/namespaces/HashType.mdx#hashtype)

s component (32 bytes, HashType)

#### Throws

If signature is not ECDSA

#### Example

```typescript theme={null}
const s = Signature.getS(sig);
```

***

### getV()

> **getV**(`signature`): `number` | `undefined`

Defined in: [src/primitives/Signature/getV.js:15](https://github.com/evmts/voltaire/blob/bd6ec34405c15ad8cd51d11579d495dc53813482/src/primitives/Signature/getV.js#L15)

Get v (recovery ID) from secp256k1 signature

#### Parameters

##### signature

[`SignatureType`](#signaturetype)

Signature

#### Returns

`number` | `undefined`

Recovery ID (27 or 28) or undefined

#### Throws

If signature is not secp256k1

#### Example

```typescript theme={null}
const v = Signature.getV(sig);
```

***

### is()

> **is**(`value`): `value is SignatureType`

Defined in: [src/primitives/Signature/is.js:14](https://github.com/evmts/voltaire/blob/bd6ec34405c15ad8cd51d11579d495dc53813482/src/primitives/Signature/is.js#L14)

Check if value is a SignatureType

#### Parameters

##### value

`unknown`

Value to check

#### Returns

`value is SignatureType`

True if value is a SignatureType

#### Example

```typescript theme={null}
if (Signature.is(value)) {
  console.log(value.algorithm);
}
```

***

### isCanonical()

> **isCanonical**(`signature`): `boolean`

Defined in: [src/primitives/Signature/isCanonical.js:19](https://github.com/evmts/voltaire/blob/bd6ec34405c15ad8cd51d11579d495dc53813482/src/primitives/Signature/isCanonical.js#L19)

Check if ECDSA signature has canonical s-value (s is less than or equal to n/2)

For secp256k1 and p256, a signature is canonical if s is at most curve\_order / 2
This prevents signature malleability.

#### Parameters

##### signature

[`SignatureType`](#signaturetype)

Signature to check

#### Returns

`boolean`

True if signature is canonical or Ed25519

#### Example

```typescript theme={null}
if (!Signature.isCanonical(sig)) {
  sig = Signature.normalize(sig);
}
```

***

### normalize()

> **normalize**(`signature`): [`SignatureType`](#signaturetype)

Defined in: [src/primitives/Signature/normalize.js:19](https://github.com/evmts/voltaire/blob/bd6ec34405c15ad8cd51d11579d495dc53813482/src/primitives/Signature/normalize.js#L19)

Normalize ECDSA signature to canonical form (s = n - s if s > n/2)

#### Parameters

##### signature

[`SignatureType`](#signaturetype)

Signature to normalize

#### Returns

[`SignatureType`](#signaturetype)

Normalized signature

#### Example

```typescript theme={null}
const normalized = Signature.normalize(sig);
```

***

### toBytes()

> **toBytes**(`signature`): `Uint8Array`\<`ArrayBufferLike`>

Defined in: [src/primitives/Signature/toBytes.js:13](https://github.com/evmts/voltaire/blob/bd6ec34405c15ad8cd51d11579d495dc53813482/src/primitives/Signature/toBytes.js#L13)

Convert Signature to raw bytes (without metadata)

#### Parameters

##### signature

[`SignatureType`](#signaturetype)

Signature to convert

#### Returns

`Uint8Array`\<`ArrayBufferLike`>

Raw signature bytes

#### Example

```typescript theme={null}
const bytes = Signature.toBytes(sig);
// Returns r + s (64 bytes) for ECDSA or signature (64 bytes) for Ed25519
```

***

### toCompact()

> **toCompact**(`signature`): `Uint8Array`\<`ArrayBufferLike`>

Defined in: [src/primitives/Signature/toCompact.js:13](https://github.com/evmts/voltaire/blob/bd6ec34405c15ad8cd51d11579d495dc53813482/src/primitives/Signature/toCompact.js#L13)

Convert Signature to compact format (EIP-2098: yParity encoded in bit 255 of s)

#### Parameters

##### signature

[`SignatureType`](#signaturetype)

Signature to convert

#### Returns

`Uint8Array`\<`ArrayBufferLike`>

Compact signature (64 bytes with yParity in bit 255 of s)

#### Example

```typescript theme={null}
const compact = Signature.toCompact(sig);
// Returns r + s (64 bytes) with yParity encoded in bit 255 of s (EIP-2098)
```

***

### toDER()

> **toDER**(`signature`): `Uint8Array`\<`ArrayBufferLike`>

Defined in: [src/primitives/Signature/toDER.js:17](https://github.com/evmts/voltaire/blob/bd6ec34405c15ad8cd51d11579d495dc53813482/src/primitives/Signature/toDER.js#L17)

Convert ECDSA signature to DER encoding

#### Parameters

##### signature

[`SignatureType`](#signaturetype)

Signature to convert

#### Returns

`Uint8Array`\<`ArrayBufferLike`>

DER-encoded signature

#### Throws

If signature is not ECDSA (secp256k1 or p256)

#### Example

```typescript theme={null}
const der = Signature.toDER(sig);
// Returns DER-encoded SEQUENCE of r and s integers
```

***

### toHex()

> **toHex**(`signature`, `includeV?`): `string`

Defined in: [src/primitives/Signature/toHex.js:23](https://github.com/evmts/voltaire/blob/bd6ec34405c15ad8cd51d11579d495dc53813482/src/primitives/Signature/toHex.js#L23)

Convert Signature to hex string

Formats:

* ECDSA without v: 128 hex chars (64 bytes: r + s)
* ECDSA with v: 130 hex chars (65 bytes: r + s + v)
* Ed25519: 128 hex chars (64 bytes)

#### Parameters

##### signature

[`SignatureType`](#signaturetype)

Signature to convert

##### includeV?

`boolean` = `true`

Include v byte for secp256k1 (if present)

#### Returns

`string`

Hex string with 0x prefix

#### Example

```typescript theme={null}
const hex = Signature.toHex(sig);
// Returns "0x..." (130 chars with v, 128 chars without)

// Exclude v even if present
const hexNoV = Signature.toHex(sig, false);
// Returns "0x..." (128 chars)
```

***

### toRpc()

> **toRpc**(`signature`): `object`

Defined in: [src/primitives/Signature/toRpc.js:20](https://github.com/evmts/voltaire/blob/bd6ec34405c15ad8cd51d11579d495dc53813482/src/primitives/Signature/toRpc.js#L20)

Convert Signature to RPC format (r, s, yParity as hex strings)

#### Parameters

##### signature

[`SignatureType`](#signaturetype)

Signature to convert

#### Returns

`object`

RPC format signature

##### r

> **r**: `string`

##### s

> **s**: `string`

##### v?

> `optional` **v**: `string`

##### yParity

> **yParity**: `string`

#### Throws

If signature is not secp256k1

#### Example

```javascript theme={null}
import * as Signature from './primitives/Signature/index.js';
const sig = Signature.fromSecp256k1(r, s, 27);
const rpc = Signature.toRpc(sig);
// { r: '0x...', s: '0x...', yParity: '0x0', v: '0x1b' }
```

***

### toTuple()

> **toTuple**(`signature`): \[`number`, `Uint8Array`\<`ArrayBufferLike`>, `Uint8Array`\<`ArrayBufferLike`>]

Defined in: [src/primitives/Signature/toTuple.js:19](https://github.com/evmts/voltaire/blob/bd6ec34405c15ad8cd51d11579d495dc53813482/src/primitives/Signature/toTuple.js#L19)

Convert Signature to tuple format \[yParity, r, s] for transaction envelopes

#### Parameters

##### signature

[`SignatureType`](#signaturetype)

Signature to convert

#### Returns

\[`number`, `Uint8Array`\<`ArrayBufferLike`>, `Uint8Array`\<`ArrayBufferLike`>]

Tuple \[yParity, r, s]

#### Throws

If signature is not secp256k1 or has no v value

#### Example

```javascript theme={null}
import * as Signature from './primitives/Signature/index.js';
const sig = Signature.fromSecp256k1(r, s, 27);
const [yParity, r, s] = Signature.toTuple(sig);
```

***

### verify()

> **verify**(`signature`, `_message`, `_publicKey`): `boolean`

Defined in: [src/primitives/Signature/verify.js:20](https://github.com/evmts/voltaire/blob/bd6ec34405c15ad8cd51d11579d495dc53813482/src/primitives/Signature/verify.js#L20)

Verify signature against message and public key

Note: This is a placeholder. Actual verification requires crypto implementations.
Use this in conjunction with crypto library functions.

#### Parameters

##### signature

[`SignatureType`](#signaturetype)

Signature to verify

##### \_message

`Uint8Array`\<`ArrayBufferLike`>

Message that was signed

##### \_publicKey

`Uint8Array`\<`ArrayBufferLike`>

Public key to verify against

#### Returns

`boolean`

True if signature is valid

#### Throws

If algorithm-specific verification is not available

#### Example

```typescript theme={null}
const isValid = Signature.verify(sig, message, publicKey);
```

## References

### default

Renames and re-exports [Signature](#signature)
