Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/mhchia/js-smp-peer
js-smp(https://github.com/mhchia/js-smp) with networking
https://github.com/mhchia/js-smp-peer
Last synced: 20 days ago
JSON representation
js-smp(https://github.com/mhchia/js-smp) with networking
- Host: GitHub
- URL: https://github.com/mhchia/js-smp-peer
- Owner: mhchia
- License: mit
- Created: 2020-05-28T05:49:51.000Z (over 4 years ago)
- Default Branch: master
- Last Pushed: 2023-01-06T07:14:29.000Z (almost 2 years ago)
- Last Synced: 2024-10-13T15:03:46.916Z (about 1 month ago)
- Language: TypeScript
- Homepage:
- Size: 842 KB
- Stars: 3
- Watchers: 3
- Forks: 1
- Open Issues: 15
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# 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