1
0
mirror of https://github.com/danog/fast-srp.git synced 2024-11-30 04:19:18 +01:00
fast-srp/README.md

65 lines
1.7 KiB
Markdown
Raw Normal View History

fast-srp
===
2015-09-07 16:16:48 +02:00
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/).
Creating the Verifier
---
2015-09-10 10:59:14 +02:00
```ts
import * as srp6a from 'fast-srp-hap';
2015-09-07 16:26:55 +02:00
2015-09-07 16:33:11 +02:00
/**
* 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}>}
2015-09-07 16:33:11 +02:00
*/
async function srp6a_create_user(I: string, P: string) {
const salt = await srp6a.genKey(32);
return {
// The salt is required for authenticating the user later
salt,
verifier: srp6a.computeVerifier(srp6a.params[4096], salt, Buffer.from(I), Buffer.from(P)),
};
2015-09-07 16:26:55 +02:00
}
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'));
2015-09-07 16:26:55 +02:00
});
```
Server
---
```ts
import {Server, genKey, params} 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 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 genKey(32);
const server = new Server(params[3076], user, secret); // For Apple SRP use params.hap
// ...
})();
```