0.0.7 • Published 3 years ago

@hyperswarm/kat v0.0.7

Weekly downloads
-
License
MIT
Repository
-
Last release
3 years ago

@hyperswarm/kat

Key Address Translation - for Hyperswarm.

The Hyperswarm KAT protocol translates Noise public keys into network IPs and also provides modern STUN approaches to penetrating most network firewalls.

Note, that the API is still under development so subject to changes.

The protocol consists of primary abstractions, Gateways and Clients.

Gateways

A Gateway is a simple UDP server, running on a public network.

The purpose of a Gateway in the KAT protocol is to act as a way for clients, identified by a Noise keypair, behind commodity firewalls, to receive the first part of a Noise handshake, from other peers also behind commodity firewalls.

After relaying the initial exchange, a Gateway can also help provide some simple network diagnostics, that can help each peer choose what kind of network holepunching technique to use.

Normally a client would use a series of Gateways to announce itself. This helps provide better security and redundancy.

Clients

Clients interact with a gateway using a UDP-based protocol.

A Client can choose to announce a Noise keypair to a Gateway, by proving to a gateway that it owns a specific keypair using a Noise handshake. After announcing a Gateway will relay introductions to other Clients that wish to connect.

API

Note that the API is still experimental and subject to change.

const { Client } = require('hyperpunch')

const c = new Client([
  'bootstrap1.hyperdht.org',
  'bootstrap2.hyperdht.org'
])

// to join the swarm and accept connections on a public key:
await c.join(keyPair)

c.on('connection', function (noiseStream) {
  // emitted when a new connection is accepted
  // noiseStream is a NoiseSecretStream instance
})

// to connect to a public key to
const noiseStream = c.connect(publicKey, localKeyPair)

noiseStream.on('open', function () {
  console.log('stream is fully open')
})

noiseStream.write(Buffer.from('hello world'))