js-smp-peer2
Version:
<p align="center"> <a href="https://github.com/mhchia/js-smp-peer/actions?workflow=nodejs-test"><img alt="GitHub Actions status" src="https://github.com/mhchia/js-smp-peer/workflows/nodejs-test/badge.svg"></a> </p>
85 lines (63 loc) • 3.42 kB
Markdown
<p align="center">
<a href="https://github.com/mhchia/js-smp-peer/actions?workflow=nodejs-test"><img alt="GitHub Actions status" src="https://github.com/mhchia/js-smp-peer/workflows/nodejs-test/badge.svg"></a>
</p>
# js-smp-peer
`js-smp-peer` lets you run [SMP(Socialist Millionaire Problem) Protocol][smp_paper] with other users through network connections. Check out the [wiki page][smp_wiki] to know more about SMP, and also the [paper][smp_paper] to understand the protocol.
Advantages of using `js-smp-peer`:
- Privacy: With SMP Protocol, users can compare their **secrets** without leaking any information. SMP Protocol implementation can be found in [`js-smp`][js_smp].
- Connection establishment at ease: A peer-to-peer connection is established for each run of SMP Protocol. Users don't need to worry about the annoying NAT traversals and other issues. They are handled by [`PeerJS`][peerjs], which utilizes [WebRTC][webrtc].
## Setup
Install the library with npm
```bash
npm install js-smp-peer
```
## Components
### SMPPeer
`SMPPeer` is the core of `js-smp-peer`. It can initiate SMP requests and handle the requests from others.
### Peer server
A Peer server makes the peers capable of discovering each others and exchanging necessary data used to establish WebRTC connections. We use [`PeerServer`][peerjs_server] which is supported by [`PeerJS`][peerjs]. Check out [`PeerServer`][peerjs_server] for more information.
## Usage
### Connect to the default peer server and run SMP with a peer
```typescript
import SMPPeer from 'js-smp-peer';
async function main() {
// Secret is a plain string.
const secret: string = 'my-secret';
// Peer ID is the entity of you. It's a plain string as well.
const peerID: string = 'my-peer-id';
// Initialize a `SMPPeer`.
const peer = new SMPPeer(secret, peerID);
// Or you can omit `peerID`. The peer server will choose a uuid when connected to it.
// const peer = new SMPPeer(secret);
// Connect to the peer server, to contact or be contacted with the other peers.
await peer.connectToPeerServer();
// Run SMP with the peer whose id is "another-peer".
const anotherPeer = 'another-peer';
const result: boolean = await peer.runSMP(anotherPeer);
console.log(`Finished running SMP with peer ${anotherPeer}, result=${result}`);
}
main();
```
### Default peer server
By default, `SMPPeer` connects to the server specified in `defaultPeerServerConfig` in `src/config.ts`. The current default peer server at `peekabookpeerserver.mhchia.com:8000` is run with the following command. The command `peerjs` can be installed with `npm install peer -g`.
```bash
npx peerjs --port 8000 --key peerjs --sslkey ./certs/privkey.pem --sslcert certs/cert.pem --path /myapp --allow_discovery
```
### Use a custom peer server
You can connect to other peer servers by specifying a config when initializing `SMPPeer`.
```typescript
const customConfig = {
host: 'my-server'
port: 5566,
path: '/myapp',
secure: true,
};
// Connect to the custom peer server.
const peer = new SMPPeer(secret, peerID, customConfig);
```
[peerjs]: https://github.com/peers/peerjs
[peerjs_server]: https://github.com/peers/peerjs-server
[smp_wiki]: https://en.wikipedia.org/wiki/Socialist_millionaires
[smp_paper]: https://www.win.tue.nl/~berry/papers/dam.pdf
[js_smp]: https://github.com/mhchia/js-smp
[webrtc]: https://webrtc.org