https://github.com/elsehow/identity-swarm
a keyring around a hyperlog
https://github.com/elsehow/identity-swarm
Last synced: 9 months ago
JSON representation
a keyring around a hyperlog
- Host: GitHub
- URL: https://github.com/elsehow/identity-swarm
- Owner: elsehow
- License: bsd-2-clause
- Created: 2016-03-18T17:49:38.000Z (about 10 years ago)
- Default Branch: master
- Last Pushed: 2016-04-03T20:14:33.000Z (about 10 years ago)
- Last Synced: 2025-06-29T05:41:56.972Z (12 months ago)
- Language: JavaScript
- Homepage:
- Size: 1.97 MB
- Stars: 2
- Watchers: 2
- Forks: 0
- Open Issues: 3
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# identity-swarm
a p2p, distributed keyring around a [swarmlog][0]
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:
```javascript
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-keys` to create a new keypair in test/keys.json.
* `opts.hubs` - array of [signalhub][1] hubs to use
* `opts.db` - a [leveldb][2] instance (use [level-browserify][3] 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](https://github.com/elsehow/hyperchat2/issues/10)
there are an [increasing](https://github.com/moose-team/friends/)
[number](https://github.com/haadcode/orbit)
of p2p conent sharing schemes out there
[scuttlebutt](https://scuttlebot.io) 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
[0]: https://github.com/substack/swarmlog
[1]: https://npmjs.com/package/signalhub
[2]: https://npmjs.com/package/levelup
[3]: https://npmjs.com/package/level-browserify