# Keystore.encrypt

Encrypts a private key as a [JSON keystore](https://ethereum.org/en/developers/docs/data-structures-and-encoding/web3-secret-storage/) using a derived key.

Supports the following key derivation functions (KDFs): - [`Keystore.pbkdf2`](/api/Keystore/pbkdf2) - [`Keystore.scrypt`](/api/Keystore/scrypt)

## Imports

:::code-group
```ts [Named]
import { Keystore } from 'ox'
```

```ts [Entrypoint]
import * as Keystore from 'ox/Keystore'
```
:::

## Examples

```ts twoslash
import { Keystore, Secp256k1 } from 'ox'

// Generate a random private key.
const privateKey = Secp256k1.randomPrivateKey()

// Derive key from password.
const [key, opts] = Keystore.pbkdf2({
  password: 'testpassword'
})

// Encrypt the private key.
const encrypted = Keystore.encrypt(privateKey, key, opts)
// @log: {
// @log:   "crypto": {
// @log:     "cipher": "aes-128-ctr",
// @log:     "ciphertext": "...",
// @log:     "cipherparams": {
// @log:       "iv": "...",
// @log:     },
// @log:     "kdf": "pbkdf2",
// @log:     "kdfparams": {
// @log:       "salt": "...",
// @log:       "dklen": 32,
// @log:       "prf": "hmac-sha256",
// @log:       "c": 262144,
// @log:     },
// @log:     "mac": "...",
// @log:   },
// @log:   "id": "...",
// @log:   "version": 3,
// @log: }
```

## Definition

```ts
function encrypt(
  privateKey: Bytes.Bytes | Hex.Hex,
  key: Key,
  options: encrypt.Options,
): Keystore
```

**Source:** [src/core/Keystore.ts](https://github.com/wevm/ox/blob/main/src/core/Keystore.ts#L580)

## Parameters

### privateKey

* **Type:** `Bytes.Bytes | Hex.Hex`

Private key to encrypt.

### key

* **Type:** [`Key`](/api/Keystore/types#keystorekey)

Key to use for encryption.

### options

* **Type:** `encrypt.Options`

Encryption options.

#### options.c

* **Type:** `number`

#### options.dklen

* **Type:** `number`

#### options.id

* **Type:** `string`
* **Optional**

UUID.

#### options.n

* **Type:** `number`

#### options.p

* **Type:** `number`

#### options.prf

* **Type:** `"hmac-sha256"`

#### options.r

* **Type:** `number`

#### options.salt

* **Type:** `string`

## Return Type

Encrypted keystore.

[`Keystore.Keystore`](/api/Keystore/types#keystorekeystore)
