# @panva/hkdf

> HKDF with no dependencies using runtime's native crypto

Latest version **1.2.1** (published 2024-07-03) · MIT license · 0 weekly downloads

## Install

```sh
npm install @panva/hkdf
pnpm add @panva/hkdf
yarn add @panva/hkdf
bun add @panva/hkdf
```

## Health

**Score 30/100 (F)** — status: abandoned.

Positive: has types; esm support; no vulnerabilities; has provenance.

Warnings: low downloads.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 1.2.1 |
| Published | 2024-07-03 |
| First published | 2021-10-29 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | bundled |
| Module format | ESM + CommonJS |
| Dependencies | 0 |
| Unpacked size | 12.5 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| Provenance | attested (GitHub Actions) |
| GitHub stars | 39 |
| Author | Filip Skokan |
| Maintainers | panva |
| Keywords | browser, cloudflare, deno, electron, hkdf, isomorphic, rfc5869, RFC 5869, universal, webcrypto, workers |

## Links

- npm: https://www.npmjs.com/package/@panva/hkdf
- Repository: https://github.com/panva/hkdf
- Issues: https://github.com/panva/hkdf/issues
- Funding: https://github.com/sponsors/panva
- npm.io page: https://npm.io/package/@panva/hkdf

## Alternatives

- [@gemini-wallet/core](https://npm.io/package/@gemini-wallet/core.md) — 515.6K weekly downloads
- [utility](https://npm.io/package/utility.md) — 416.6K weekly downloads
- [@primno/dpapi](https://npm.io/package/@primno/dpapi.md) — 7.2K weekly downloads
- [pi-readseek](https://npm.io/package/pi-readseek.md) — 3.7K weekly downloads
- [@emilia-protocol/verify](https://npm.io/package/@emilia-protocol/verify.md) — 1.1K weekly downloads

## Recent versions

- 1.2.1 (latest) — 2024-07-03
- 1.2.0 — 2024-06-18
- 1.1.1 — 2023-04-26
- 1.1.0 — 2023-04-26
- 1.0.4 — 2023-02-16
- 1.0.2 — 2022-05-02
- 1.0.1 — 2021-10-29
- 1.0.0 — 2021-10-29

## README

# hkdf

> HKDF with no dependencies using runtime's native crypto

HKDF is a simple key derivation function defined in [RFC 5869][].

## Documentation

▸ **hkdf**(`digest`, `ikm`, `salt`, `info`, `keylen`): `Promise`<`Uint8Array`\>

The given `ikm`, `salt` and `info` are used with the `digest` to derive a key of `keylen` bytes.

### Parameters

| Name | Type | Description |
| :------ | :------ | :------ |
| `digest` | ``"sha256"`` \| ``"sha384"`` \| ``"sha512"`` \| ``"sha1"`` | The digest algorithm to use. |
| `ikm` | `Uint8Array` \| `string` | The input keying material. It must be at least one byte in length. |
| `salt` | `Uint8Array` \| `string` | The salt value. Must be provided but can be zero-length. |
| `info` | `Uint8Array` \| `string` | Additional info value. Must be provided but can be zero-length, and cannot be more than 1024 bytes. |
| `keylen` | `number` | The length in bytes of the key to generate. Must be greater than 0 and no more than 255 times the digest size. |

### Returns

`Promise`<`Uint8Array`\>

### Example

**`example`** ESM import
```js
import hkdf from '@panva/hkdf'
```

**`example`** CJS import
```js
const { hkdf } = require('@panva/hkdf')
```

**`example`** Deno import
```js
import hkdf from 'https://deno.land/x/hkdf/index.ts'
```

**`example`** Usage
```js
const derivedKey = await hkdf(
  'sha256',
  'key',
  'salt',
  'info',
  64
)
```

## Supported Runtimes

The supported JavaScript runtimes include ones that

- are reasonably up to date ECMAScript
- support the utilized Web API globals and standard built-in objects
- These are
  - _(This is not an exhaustive list)_
  - Browsers
  - Cloudflare Workers
  - Deno
  - Electron
  - Netlify Edge Functions
  - Next.js Middlewares
  - Node.js
  - Vercel Edge Functions

[RFC 5869]: https://www.rfc-editor.org/rfc/rfc5869.html

---
_Source: https://npm.io/package/@panva/hkdf · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
