A network swarm for creating secure P2P connections over Bittorrent DHT, DNS, and mDNS.
Uses discovery-swarm to find and connect peers. Connections use asymmetric encryption and Elliptic-curve Diffie-Hellman to establish a secure communication channel. Clients must know the public key of a peer ahead of time to initiate the connection.
Depends on native modules libsodium (via sodium-native) and libutp (via utp-native).
npm install swarm-peer-server
var swarm = require('swarm-peer-server')
swarm.listen({
publicKey: Buffer.from('...'),
secretKey: Buffer.from('...')
}, (socket, peerKey, info) => {
console.log('New authenticated connection')
socket.once('data', data => {
console.log('Received:', data.toString())
socket.destroy()
})
})
var swarm = require('swarm-peer-server')
var { socket } = await swarm.connect({
publicKey: Buffer.from('...'),
secretKey: Buffer.from('...'),
hostPublicKey: Buffer.from('...')
})
console.log('Established connection')
const data = Buffer.from('hello world')
socket.write(data)
examples/echo.js # CLI echo server
Create a new swarm server. Options include:
{
publicKey: crypto.randomBytes(32), // server public key
secretKey: crypto.randomBytes(64), // server secret key
convert: false, // convert signatures to authentication encryption [1]
}
[1] https://download.libsodium.org/doc/advanced/ed25519-curve25519.html
For full list of options take a look at discovery-swarm or the TypeScript definitions.
Create a new swarm server. Options include:
{
hostPublicKey: crypto.randomBytes(32), // host/server public key
publicKey: crypto.randomBytes(32), // client public key
secretKey: crypto.randomBytes(64), // client secret key
convert: false, // convert signatures to authentication encryption
}
MIT