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

# IframeDeviceSignerKeyStorage

<Note>
  **This page has been updated for Wallets SDK V1.** If you are using the previous version,
  see the [previous version docs](/wallets/v0/overview) or the [V1 migration guide](/wallets/guides/migrate-to-v1).
</Note>

Defined in: [packages/wallets/src/utils/device-signers/IframeDeviceSignerKeyStorage.ts:39](https://github.com/Crossmint/crossmint-sdk/blob/main/packages/wallets/src/utils/device-signers/IframeDeviceSignerKeyStorage.ts#L39)

DeviceSignerKeyStorage backed by a hidden iframe.
All crypto operations are delegated to the iframe via postMessage RPC,
keeping key material isolated in the iframe's origin.

## Extends

* [`DeviceSignerKeyStorage`](./DeviceSignerKeyStorage)

## Constructors

### new IframeDeviceSignerKeyStorage()

> **new IframeDeviceSignerKeyStorage**(`apiKey`): `IframeDeviceSignerKeyStorage`

Defined in: [packages/wallets/src/utils/device-signers/IframeDeviceSignerKeyStorage.ts:46](https://github.com/Crossmint/crossmint-sdk/blob/main/packages/wallets/src/utils/device-signers/IframeDeviceSignerKeyStorage.ts#L46)

#### Parameters

| Parameter | Type     |
| --------- | -------- |
| `apiKey`  | `string` |

#### Returns

`IframeDeviceSignerKeyStorage`

#### Overrides

[`DeviceSignerKeyStorage`](./DeviceSignerKeyStorage).[`constructor`](./DeviceSignerKeyStorage#constructor)

## Methods

### deleteKey()

> **deleteKey**(`address`): `Promise`\<`void`>

Defined in: [packages/wallets/src/utils/device-signers/IframeDeviceSignerKeyStorage.ts:112](https://github.com/Crossmint/crossmint-sdk/blob/main/packages/wallets/src/utils/device-signers/IframeDeviceSignerKeyStorage.ts#L112)

Delete the key pair associated with the given wallet address.

#### Parameters

| Parameter | Type     | Description                                  |
| --------- | -------- | -------------------------------------------- |
| `address` | `string` | The wallet address whose key pair to remove. |

#### Returns

`Promise`\<`void`>

#### Overrides

[`DeviceSignerKeyStorage`](./DeviceSignerKeyStorage).[`deleteKey`](./DeviceSignerKeyStorage#deletekey)

***

### destroy()

> **destroy**(): `void`

Defined in: [packages/wallets/src/utils/device-signers/IframeDeviceSignerKeyStorage.ts:116](https://github.com/Crossmint/crossmint-sdk/blob/main/packages/wallets/src/utils/device-signers/IframeDeviceSignerKeyStorage.ts#L116)

#### Returns

`void`

***

### generateKey()

> **generateKey**(`params`): `Promise`\<`string`>

Defined in: [packages/wallets/src/utils/device-signers/IframeDeviceSignerKeyStorage.ts:67](https://github.com/Crossmint/crossmint-sdk/blob/main/packages/wallets/src/utils/device-signers/IframeDeviceSignerKeyStorage.ts#L67)

Generate a new P-256 key pair and persist it.

#### Parameters

| Parameter                         | Type                                                                                                 | Description                                                                                                                                                                                       |
| --------------------------------- | ---------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `params`                          | \{ `address`: `string`; `biometricExpirationTime`: `number`; `biometricPolicy`: `BiometricPolicy`; } | Key generation parameters.                                                                                                                                                                        |
| `params.address`?                 | `string`                                                                                             | Optional wallet address to associate the key with. If omitted, the key should be stored under a temporary identifier until [mapAddressToKey](./DeviceSignerKeyStorage#mapaddresstokey) is called. |
| `params.biometricExpirationTime`? | `number`                                                                                             | -                                                                                                                                                                                                 |
| `params.biometricPolicy`?         | `BiometricPolicy`                                                                                    | -                                                                                                                                                                                                 |

#### Returns

`Promise`\<`string`>

The uncompressed public key encoded as a base64 string.

#### Overrides

[`DeviceSignerKeyStorage`](./DeviceSignerKeyStorage).[`generateKey`](./DeviceSignerKeyStorage#generatekey)

***

### getDeviceName()

> **getDeviceName**(): `string`

Defined in: [packages/wallets/src/utils/device-signers/IframeDeviceSignerKeyStorage.ts:317](https://github.com/Crossmint/crossmint-sdk/blob/main/packages/wallets/src/utils/device-signers/IframeDeviceSignerKeyStorage.ts#L317)

Get a human-readable name for this device (e.g. "MacBook Pro", "iPhone 15").
Used to label device signers in the API for identification purposes.

#### Returns

`string`

A descriptive name for the current device.

#### Overrides

[`DeviceSignerKeyStorage`](./DeviceSignerKeyStorage).[`getDeviceName`](./DeviceSignerKeyStorage#getdevicename)

***

### getKey()

> **getKey**(`address`): `Promise`\<`string` | `null`>

Defined in: [packages/wallets/src/utils/device-signers/IframeDeviceSignerKeyStorage.ts:86](https://github.com/Crossmint/crossmint-sdk/blob/main/packages/wallets/src/utils/device-signers/IframeDeviceSignerKeyStorage.ts#L86)

Retrieve the public key for a given wallet address.

#### Parameters

| Parameter | Type     | Description                                     |
| --------- | -------- | ----------------------------------------------- |
| `address` | `string` | The wallet address whose public key to look up. |

#### Returns

`Promise`\<`string` | `null`>

The base64-encoded public key, or `null` if no key is found for the address.

#### Overrides

[`DeviceSignerKeyStorage`](./DeviceSignerKeyStorage).[`getKey`](./DeviceSignerKeyStorage#getkey)

***

### hasKey()

> **hasKey**(`publicKeyBase64`): `Promise`\<`boolean`>

Defined in: [packages/wallets/src/utils/device-signers/IframeDeviceSignerKeyStorage.ts:95](https://github.com/Crossmint/crossmint-sdk/blob/main/packages/wallets/src/utils/device-signers/IframeDeviceSignerKeyStorage.ts#L95)

Check if a key with the given public key exists on this device.

#### Parameters

| Parameter         | Type     | Description                                |
| ----------------- | -------- | ------------------------------------------ |
| `publicKeyBase64` | `string` | The base64-encoded public key to look for. |

#### Returns

`Promise`\<`boolean`>

`true` if the key exists on the device, `false` otherwise.

#### Overrides

[`DeviceSignerKeyStorage`](./DeviceSignerKeyStorage).[`hasKey`](./DeviceSignerKeyStorage#haskey)

***

### mapAddressToKey()

> **mapAddressToKey**(`address`, `publicKeyBase64`): `Promise`\<`void`>

Defined in: [packages/wallets/src/utils/device-signers/IframeDeviceSignerKeyStorage.ts:78](https://github.com/Crossmint/crossmint-sdk/blob/main/packages/wallets/src/utils/device-signers/IframeDeviceSignerKeyStorage.ts#L78)

Associate an already-generated key pair with a wallet address.
Used when the wallet address is not yet known at the time of key generation.

#### Parameters

| Parameter         | Type     | Description                                                                                    |
| ----------------- | -------- | ---------------------------------------------------------------------------------------------- |
| `address`         | `string` | The wallet address to map the key to.                                                          |
| `publicKeyBase64` | `string` | The base64-encoded public key returned by [generateKey](./DeviceSignerKeyStorage#generatekey). |

#### Returns

`Promise`\<`void`>

#### Overrides

[`DeviceSignerKeyStorage`](./DeviceSignerKeyStorage).[`mapAddressToKey`](./DeviceSignerKeyStorage#mapaddresstokey)

***

### setBiometricRequestHandler()

> **setBiometricRequestHandler**(`handler`): `void`

Defined in: [packages/wallets/src/utils/device-signers/IframeDeviceSignerKeyStorage.ts:59](https://github.com/Crossmint/crossmint-sdk/blob/main/packages/wallets/src/utils/device-signers/IframeDeviceSignerKeyStorage.ts#L59)

Set a handler that is called before each WebAuthn ceremony to obtain user activation.
The handler should show a UI prompt (e.g. PasskeyPrompt) and resolve when the user clicks.

#### Parameters

| Parameter | Type                                                                 |
| --------- | -------------------------------------------------------------------- |
| `handler` | [`BiometricRequestHandler`](../type-aliases/BiometricRequestHandler) |

#### Returns

`void`

***

### signMessage()

> **signMessage**(`address`, `message`): `Promise`\<\{ `r`: `string`; `s`: `string`; }>

Defined in: [packages/wallets/src/utils/device-signers/IframeDeviceSignerKeyStorage.ts:104](https://github.com/Crossmint/crossmint-sdk/blob/main/packages/wallets/src/utils/device-signers/IframeDeviceSignerKeyStorage.ts#L104)

Sign a message using the private key associated with the given wallet address.

#### Parameters

| Parameter | Type     | Description                                        |
| --------- | -------- | -------------------------------------------------- |
| `address` | `string` | The wallet address whose private key to sign with. |
| `message` | `string` | The message string to sign.                        |

#### Returns

`Promise`\<\{ `r`: `string`; `s`: `string`; }>

The ECDSA signature split into its `r` and `s` components, each as a hex string.

#### Overrides

[`DeviceSignerKeyStorage`](./DeviceSignerKeyStorage).[`signMessage`](./DeviceSignerKeyStorage#signmessage)
