git ssb

0+

Dominic / ssb-peer-invites



Tree: 0e94992aa8bedac43906183f616bff699ec2484b

Files: 0e94992aa8bedac43906183f616bff699ec2484b / util.js

1074 bytesRaw
1var chloride = require('chloride')
2
3function box (data, key) {
4 if(!data) return
5 var b = new Buffer(JSON.stringify(data))
6 return chloride.crypto_secretbox_easy(b, key.slice(0, 24), key).toString('base64')
7}
8
9function unbox (ctxt, key) {
10 var b = new Buffer(ctxt, 'base64')
11 var ptxt = chloride.crypto_secretbox_open_easy(b, key.slice(0, 24), key)
12 if(!ptxt) return
13 try {
14 return JSON.parse(ptxt)
15 } catch(err) {
16 console.error(err)
17 }
18}
19
20
21function hash(s) {
22 return chloride.crypto_hash_sha256(
23 'string' == typeof s ? new Buffer(s, 'utf8') : s
24 )
25}
26
27exports.hash = hash
28exports.box = box
29exports.unbox = unbox
30exports.parse = function (str) {
31 if(!/^inv\:/.test(str)) throw new Error('invites must start with "inv:", got '+JSON.stringify(str))
32 var ary = str.substring(4).split(',')
33 return {
34 seed: ary[0],
35 invite: ary[1],
36 cap: ary[2],
37 pubs: ary.slice(3)
38 }
39}
40exports.stringify = function (invite) {
41 return 'inv:'+[
42 invite.seed,
43 invite.invite,
44 invite.cap || ''
45 ]
46 .concat(invite.pubs)
47 .join(',')
48}
49
50

Built with git-ssb-web