1
0
mirror of https://github.com/danog/fast-srp.git synced 2024-11-26 20:04:49 +01:00
Go to file
dependabot[bot] 63c666f70c
Bump minimist from 1.2.5 to 1.2.8
Bumps [minimist](https://github.com/minimistjs/minimist) from 1.2.5 to 1.2.8.
- [Changelog](https://github.com/minimistjs/minimist/blob/main/CHANGELOG.md)
- [Commits](https://github.com/minimistjs/minimist/compare/v1.2.5...v1.2.8)

---
updated-dependencies:
- dependency-name: minimist
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-05-11 08:07:58 +00:00
.github/workflows Add CodeQL 2021-01-10 16:38:24 +01:00
docs Update docs 2021-03-09 12:33:57 +01:00
jsbn Setting up ESLint 2020-04-12 19:39:50 +02:00
src Updated linting rules to latest name changes 2021-01-10 18:07:29 +01:00
.eslintrc Updated linting rules to latest name changes 2021-01-10 18:07:29 +01:00
.gitignore Adding nyc coveralls for test coverage 2020-04-26 18:21:45 +02:00
LICENSE Initial import 2015-09-07 15:23:26 +02:00
package-lock.json Bump minimist from 1.2.5 to 1.2.8 2023-05-11 08:07:58 +00:00
package.json Change target 2021-08-04 15:22:24 +02:00
README.md Regenerate docs 2021-01-10 18:00:26 +01:00
SRP Design.md Correct a mistake 2015-09-07 16:04:32 +02:00
tsconfig.json Change target 2021-08-04 15:22:24 +02:00
typedoc.json Bump dev dependencies 2021-01-10 17:58:51 +01:00

fast-srp-hap

NPM-Version NPM-Downloads Node-CI Coverage Status

Is a pure NodeJS implementation of the SRP6a protocol.

It's a derived work of Jed Parson's node-srp and Tom Wu's jsbn.

Full documentation can be found here.

Creating the Verifier

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

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

  // ...
})();