identity-swarm v1.0.1
identity-swarm
a p2p, distributed keyring around a swarmlog
users can add their public key, and associate it with an arbitrary JSON payload, which is signed and verified on read/write
usage
first generate some ed25519 keys:
$ node -pe "JSON.stringify(require('ssb-keys').generate())" > keys.jsonnow, make a new keyring:
var idswarm = require('identity-swarm')
var keypair = require('keypair')
var keyring = idswarm({
  keys: require('./keys.json'),
  db: requrie('memdb')(),
  hubs: [ 'https://signalhub.mafintosh.com' ]
}, (identity) => {
	console.log('i see a new identity!', identity)
})
keyring.add(keypair(), 'RSA-SHA256', {handle: 'mminsky'})
// > i see a new identity! {pubkey: ..} api
keyring(opts, newIdentityCb)
make a new keyring. available options:
- opts.keys: ed25519 keys of the form- {public, private}. if you are starting a new keyring, you can- npm run generate-keysto create a new keypair in test/keys.json.
- opts.hubs- array of signalhub hubs to use
- opts.db- a leveldb instance (use level-browserify in the browser)
newIdentityCb will be called whenever a new, verified identity comes over the log.
keyring.add(keypair, keytype, payload, cb)
posts keypair.public to the keyring
keytype is a string referring to the algo. for now, only 'RSA-SHA256' has been tested.
payload can be arbitrary json.  payload is signed with keypair.private. the private key is NOT posted to the keyring!
cb(err, res) (optional) is called when the keypair is added to the log.
background
see hyperchat/#10
there are an increasing number of p2p conent sharing schemes out there
scuttlebutt is particularly interesting, as it provides a distributed, unforgeable feed of messages. scuttlebutt allows for identity discovery within social networks, and can help provide an added layer of social proof when you're deciding to trust a new key
however, one still might want to address a message to someone outside of their social network, and for that we need a global key discovery.
this project works as a distributed, shared keyring, to which anyone can append their public key, and associate it with arbitrary other information, stored as a json payload.
developing
test/test.js contains tests and specs. to develop,
npm run devnavigate to localhost:8000 to see the results of the tests
license
BSD