# fast-srp-hap

> Secure Remote Password (SRP)

Latest version **2.0.4** (published 2021-10-07) · MIT license · 0 weekly downloads

## Install

```sh
npm install fast-srp-hap
pnpm add fast-srp-hap
yarn add fast-srp-hap
bun add fast-srp-hap
```

## Health

**Score 35/100 (D)** — status: abandoned.

Positive: has types; no vulnerabilities; high quality score.

Warnings: low downloads; no esm support.

Negative: abandoned.

## Facts

| | |
|---|---|
| Version | 2.0.4 |
| Published | 2021-10-07 |
| First published | 2016-11-02 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | bundled |
| Module format | CommonJS |
| Node | >=10.17.0 |
| Dependencies | 0 |
| Unpacked size | 103.1 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 13 |
| Author | Zarmack Tanen |
| Maintainers | oznu, northernman, supereg, khaost, ebaauw, donavanbecker, dustin.greif, nfarina |

## Links

- npm: https://www.npmjs.com/package/fast-srp-hap
- Repository: https://github.com/homebridge/fast-srp
- Homepage: https://github.com/homebridge/fast-srp#readme
- Issues: https://github.com/homebridge/fast-srp/issues
- npm.io page: https://npm.io/package/fast-srp-hap

## Recent versions

- 2.0.4 (latest) — 2021-10-07
- 2.0.3 — 2021-01-10
- 2.0.2 — 2020-04-12
- 2.0.1 — 2020-04-12
- 2.0.0 — 2020-04-12
- 1.2.0 — 2020-04-12
- 1.1.0 — 2020-04-12
- 1.0.3 — 2020-04-12
- 1.0.2 — 2020-04-12
- 1.0.1 — 2017-04-09
- 1.0.0 — 2016-11-02

## README

fast-srp-hap
===

![NPM-Version](https://badgen.net/npm/v/fast-srp-hap)
![NPM-Downloads](https://badgen.net/npm/dt/fast-srp-hap)
![Node-CI](https://github.com/homebridge/fast-srp/workflows/Node-CI/badge.svg)
[![Coverage Status](https://coveralls.io/repos/github/homebridge/fast-srp/badge.svg?branch=master)](https://coveralls.io/github/homebridge/fast-srp?branch=master)

Is a pure [NodeJS](https://nodejs.org/) implementation of the [SRP6a protocol](http://srp.stanford.edu/).

It's a derived work of [Jed Parson](http://jedparsons.com/)'s [node-srp](https://github.com/jedp/node-srp) and [Tom Wu](http://www-cs-students.stanford.edu/~tjw/)'s [jsbn](http://www-cs-students.stanford.edu/~tjw/jsbn/).

Full documentation can be found [here](https://developers.homebridge.io/fast-srp/modules.html).

Creating the Verifier
---

```ts
import { SRP } from 'fast-srp-hap';

/**
 * Computes the verifier of a user. Only needed to add the user to the auth system.
 *
 * @param {string} I Username to compute verifier
 * @param {string} P Password
 * @return {Promise<{salt: Buffer, verifier: Buffer}>}
 */
async function srp6a_create_user(I: string, P: string) {
  const salt = await SRP.genKey(32);
  
  return {
    // The salt is required for authenticating the user later
    salt,
    verifier: SRP.computeVerifier(SRP.params[4096], salt, Buffer.from(I), Buffer.from(P)),
  };
}

await srp6a_create_user('Zarmack Tanen', '*****').then(({salt, verifier}) => {
  console.log('SRP6a verifier and salt of Zarmack Tanen user is %s and %s',
    verifier.toString('hex'), salt.toString('hex'));
});
```

Server
---

```ts
import {SRP, SrpServer} from 'fast-srp-hap';

(async () => {
  // Get the user details from somewhere
  const user = {
    username: 'username', // Or a Buffer

    // If we have the plaintext password
    salt: await SRP.genKey(32),
    password: 'password', // Or a Buffer
    
    // If we have a saved verifier
    salt: Buffer.from('...'),
    verifier: Buffer.from('...'),
  };

  // Generate a secret key
  const secret = await SRP.genKey(32);

  const server = new SrpServer(SRP.params[3076], user, secret); // For Apple SRP use params.hap

  // ...
})();
```

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