@hyperdivision/pin-peer

Verify a secure connection using a manual PIN

Usage no npm install needed!

<script type="module">
  import hyperdivisionPinPeer from 'https://cdn.skypack.dev/@hyperdivision/pin-peer';
</script>

README

pin-peer

Verify a secure connection using a manual PIN

Usage

const pin = require('pin-peer')

var outOfBandPin // this would normally be communicated somehow

const t = transport()
const i = pin.initiator(transportStreamA, function (verify) {
  return verify(null, outOfBandPin)
})

const r = pin.responder(transportStreamB)
r.once('pin', (pin) => {
  outOfBandPin = pin
})

// Hook up transportStreamA and transportStreamB

API

const initiatorStream = pin.initiator(rawStream, onverifypin(verify(err, enteredPin)), prolouge = '')

If the pin is incorrect the initiatorStream is closed immediately.

enteredPin must be a Base32 encoded string. prolouge can be an arbitrary string that was used to find the other peer. This doesn't add security to the encryption key, but does ensure both parties have the same view of how anything that happened prior to the noise handshake.

const bool = initiatorStream.secure

Boolean indicating whether the secure handshake has completed

initiatorStream.once('secure', function () {})

Emitted once the handshaking has completed

const responderStream = pin.responder(rawStream, prolouge = '')

If the initiator did not accept the pin the responderStream is closed immediately. prolouge can be an arbitrary string that was used to find the other peer. This doesn't add security to the encryption key, but does ensure both parties have the same view of how anything that happened prior to the noise handshake.

responderStream.once('pin', pinStr)

Emitted when the pin is ready

const pinStr = responderStream.pin

null until the pin is ready. Encoded as a Base32 string

Install

npm install pin-peer

License

ISC