1.0.0 • Published 1 year ago

not-secret-stream v1.0.0

Weekly downloads
-
License
ISC
Repository
-
Last release
1 year ago

Not Secret Stream

An unencrypted interface compatible, drop-in replacement for SecretStream when you don't need the encryption and want to replicate hypercores (corestores) to/from the browser.

Some cryptographic primitives needed to implement noise encryption in the browser are not implemented in sodium-javascript preventing easy replication of hypercores in that environment, while dht-relay exists it is marked experimental and do not use in production. This is a simpler and explicitly unsafe alternative that allows replicating hypercores in the browser over websockets (ssl/tls) or webrtc (SRTP) using their standard encryption protocols.

YMMV.

Install

npm i -S not-secret-stream

Usage

const NotSecretStream = require('not-secret-stream')
const duplexThrough = require('duplex-through')
const Corestore = require('corestore')
const ram = require('random-access-memory')
const b4a = require('b4a')

const [a, b] = duplexThrough()

const fst = new NotSecretStream(a)
const snd = new NotSecretStream(b)

const storeA = new Corestore(ram)
const storeB = new Corestore(ram)

storeA.replicate(fst)
storeB.replicate(snd)

const primary = storeA.get({ name: 'test' })
await primary.ready()
const replica = storeB.get(primary.key)

await primary.append(b4a.from('hello, world!'))
const buf = await replica.get(0)
console.log(b4a.toString(buf, 'utf8')) // 'hello, world!'

API

const s = new NotSecretStream(rawStream, [options])

Make a new not secret stream instance that is interface compatible with SecretStream from @hyperswarm/secret-stream.

Options include:

{
  keyPair: { publicKey, secretKey }, // if you want to use your own keyPair for the "handshake", secretKey is not leaked but publicKey is,
  bits: 32 // the frame size of the underlying FramedStream, see https://github.com/holepunchto/framed-stream
}