git ssb

1+

Dominic / ssb-private-groups



Tree: f8b540f929cf4de61e694622166b3a1e1505f22a

Files: f8b540f929cf4de61e694622166b3a1e1505f22a / test / index.js

2403 bytesRaw
1var chloride = require('chloride')
2var tape = require('tape')
3var group_box = require('group-box')
4var u = require('../util')
5var ssbKeys = require('ssb-keys')
6var Scuttlebot = require('ssb-server')
7 .use(require('../'))
8
9function hash (s) {
10 return chloride.crypto_hash_sha256(Buffer.from(s, 'utf8'))
11}
12
13var alice = Scuttlebot({
14 temp: true,
15 keys: ssbKeys.generate(null, hash('alice_secret1'))
16})
17
18var bob = alice.createFeed(ssbKeys.generate(null, hash('bob_secret1')))
19
20function generate (seed) {
21 var keys = chloride.crypto_box_seed_keypair(seed)
22 return {
23 public: keys.publicKey.toString('base64')+'.curve25519',
24 private: keys.secretKey.toString('base64')
25 }
26}
27
28function toBuffer(s) {
29 return Buffer.isBuffer(s) ? s : Buffer.from(s, 'base64')
30}
31
32function scalarmult (pk,sk) {
33 return chloride.crypto_scalarmult(toBuffer(pk), toBuffer(sk))
34}
35var alice_keys = generate(hash('alice_secret2'))
36var bob_keys = generate(hash('bob_secret2'))
37
38tape('create a private-msg-key', function (t) {
39 alice.privateGroups.addCurvePair(alice_keys, function (err) {
40 if(err) throw err
41 alice.publish({
42 type: 'private-msg-key',
43 key: alice_keys.public
44 }, function (err, msg) {
45 if(err) throw err
46
47 //bob doesn't call addCurvePair because bob is remote.
48 //(we are just adding his feed directly so we don't
49 // need to bother with replication)
50 bob.publish({
51 type: 'private-msg-key',
52 key: bob_keys.public
53 }, function (err, data) {
54 if(err) throw err
55 t.ok(data.key)
56
57 var content = { type: 'private', text: 'hello, alice' }
58 var ptxt = Buffer.from(JSON.stringify(content))
59 var nonce = u.id2Buffer(data.key)
60 var keys = [bob_keys, alice_keys].map(function (key) {
61 return scalarmult(bob_keys.private, key.public)
62 })
63 var _key = group_box.unboxKey(ctxt, nonce, keys, 8)
64 t.ok(_key, 'message can be decrypted')
65 bob.publish(
66 ctxt.toString('base64')+'.box2',
67 function (err, data) {
68 if(err) throw err
69 t.ok(data)
70 alice.get({id: data.key, private: true}, function (err, msg) {
71 if(err) throw err
72 t.deepEqual(msg.content, content)
73 t.end()
74
75 })
76 }
77 )
78 })
79 })
80 })
81})
82
83tape('cleanup', function (t) {
84 alice.close()
85 t.end()
86})
87
88

Built with git-ssb-web