Files: f8b540f929cf4de61e694622166b3a1e1505f22a / test / index.js
2403 bytesRaw
1 | var chloride = require('chloride') |
2 | var tape = require('tape') |
3 | var group_box = require('group-box') |
4 | var u = require('../util') |
5 | var ssbKeys = require('ssb-keys') |
6 | var Scuttlebot = require('ssb-server') |
7 | .use(require('../')) |
8 | |
9 | function hash (s) { |
10 | return chloride.crypto_hash_sha256(Buffer.from(s, 'utf8')) |
11 | } |
12 | |
13 | var alice = Scuttlebot({ |
14 | temp: true, |
15 | keys: ssbKeys.generate(null, hash('alice_secret1')) |
16 | }) |
17 | |
18 | var bob = alice.createFeed(ssbKeys.generate(null, hash('bob_secret1'))) |
19 | |
20 | function 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 | |
28 | function toBuffer(s) { |
29 | return Buffer.isBuffer(s) ? s : Buffer.from(s, 'base64') |
30 | } |
31 | |
32 | function scalarmult (pk,sk) { |
33 | return chloride.crypto_scalarmult(toBuffer(pk), toBuffer(sk)) |
34 | } |
35 | var alice_keys = generate(hash('alice_secret2')) |
36 | var bob_keys = generate(hash('bob_secret2')) |
37 | |
38 | tape('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 | |
83 | tape('cleanup', function (t) { |
84 | alice.close() |
85 | t.end() |
86 | }) |
87 | |
88 |
Built with git-ssb-web