identity-swarm
v1.0.1
Published
a p2p, distributed keyring
Downloads
1
Readme
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.json
now, 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 cannpm run generate-keys
to create a new keypair in test/keys.json.opts.hubs
- array of signalhub hubs to useopts.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 dev
navigate to localhost:8000 to see the results of the tests
license
BSD