Commit 56bb6630cc8a69ba81b64ae16b943768e2708080
test receiving a message after switching keys
Dominic Tarr committed on 12/27/2018, 9:50:45 PMParent: 9e251a0ec3bb0d48caf9ec19c7e8d4552cd44e4a
Files changed
test/index.js | changed |
test/index.js | |||
---|---|---|---|
@@ -32,56 +32,96 @@ | |||
32 | 32 … | function scalarmult (pk,sk) { | |
33 | 33 … | return chloride.crypto_scalarmult(toBuffer(pk), toBuffer(sk)) | |
34 | 34 … | } | |
35 | 35 … | var alice_keys = generate(hash('alice_secret2')) | |
36 | -var bob_keys = generate(hash('bob_secret2')) | ||
36 … | +var bob_keys = generate(hash('bob_secret2.1')) | ||
37 … | +var bob_keys2 = generate(hash('bob_secret2.2')) | ||
37 | 38 … | ||
38 | 39 … | tape('create a private-msg-key', function (t) { | |
40 … | + //normally alice would publish a 'private-msg-key' message | ||
41 … | + //to advertise this key, but in this test bob is constructing | ||
42 … | + //messages manually, so it's not needed. | ||
43 … | + //in the future, have a way to call publish and look at the recipients | ||
44 … | + //and then choose the keys. | ||
39 | 45 … | alice.privateGroups.addCurvePair(alice_keys, function (err) { | |
40 | 46 … | if(err) throw err | |
41 | - alice.publish({ | ||
47 … | + | ||
48 … | + //bob doesn't call addCurvePair because bob is remote. | ||
49 … | + //(we are just adding his feed directly so we don't | ||
50 … | + // need to bother with replication) | ||
51 … | + | ||
52 … | + bob.publish({ | ||
42 | 53 … | type: 'private-msg-key', | |
43 | - key: alice_keys.public | ||
44 | - }, function (err, msg) { | ||
54 … | + key: bob_keys.public | ||
55 … | + }, function (err, data) { | ||
45 | 56 … | if(err) throw err | |
57 … | + t.ok(data.key) | ||
46 | 58 … | ||
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 ctxt = group_box.box(ptxt, nonce, keys) | ||
64 | - var _key = group_box.unboxKey(ctxt, nonce, keys, 8) | ||
65 | - t.ok(_key, 'message can be decrypted') | ||
66 | - bob.publish( | ||
67 | - ctxt.toString('base64')+'.box2', | ||
68 | - function (err, data) { | ||
59 … | + var content = { type: 'private', text: 'hello, alice' } | ||
60 … | + var ptxt = Buffer.from(JSON.stringify(content)) | ||
61 … | + var nonce = u.id2Buffer(data.key) | ||
62 … | + var keys = [bob_keys, alice_keys].map(function (key) { | ||
63 … | + return scalarmult(bob_keys.private, key.public) | ||
64 … | + }) | ||
65 … | + var ctxt = group_box.box(ptxt, nonce, keys) | ||
66 … | + var _key = group_box.unboxKey(ctxt, nonce, keys, 8) | ||
67 … | + t.ok(_key, 'message can be decrypted') | ||
68 … | + bob.publish( | ||
69 … | + ctxt.toString('base64')+'.box2', | ||
70 … | + function (err, data) { | ||
71 … | + if(err) throw err | ||
72 … | + t.ok(data) | ||
73 … | + alice.get({id: data.key, private: true}, function (err, msg) { | ||
69 | 74 … | if(err) throw err | |
70 | - t.ok(data) | ||
71 | - alice.get({id: data.key, private: true}, function (err, msg) { | ||
72 | - if(err) throw err | ||
73 | - t.deepEqual(msg.content, content) | ||
74 | - t.end() | ||
75 … | + t.deepEqual(msg.content, content) | ||
76 … | + t.end() | ||
77 … | + }) | ||
78 … | + } | ||
79 … | + ) | ||
80 … | + }) | ||
81 … | + }) | ||
82 … | +}) | ||
75 | 83 … | ||
76 | - }) | ||
77 | - } | ||
78 | - ) | ||
79 | - }) | ||
84 … | +tape('bob switches keys', function (t) { | ||
85 … | + | ||
86 … | + //bob doesn't call addCurvePair because bob is remote. | ||
87 … | + //(we are just adding his feed directly so we don't | ||
88 … | + // need to bother with replication) | ||
89 … | + bob.publish({ | ||
90 … | + type: 'private-msg-key', | ||
91 … | + key: bob_keys2.public | ||
92 … | + }, function (err, data) { | ||
93 … | + if(err) throw err | ||
94 … | + t.ok(data.key) | ||
95 … | + | ||
96 … | + var content = { type: 'private', text: 'hello again, alice!' } | ||
97 … | + var ptxt = Buffer.from(JSON.stringify(content)) | ||
98 … | + var nonce = u.id2Buffer(data.key) | ||
99 … | + var keys = [bob_keys2, alice_keys].map(function (key) { | ||
100 … | + return scalarmult(bob_keys2.private, key.public) | ||
80 | 101 … | }) | |
102 … | + var ctxt = group_box.box(ptxt, nonce, keys) | ||
103 … | + var _key = group_box.unboxKey(ctxt, nonce, keys, 8) | ||
104 … | + t.ok(_key, 'message can be decrypted') | ||
105 … | + bob.publish( | ||
106 … | + ctxt.toString('base64')+'.box2', | ||
107 … | + function (err, data) { | ||
108 … | + if(err) throw err | ||
109 … | + t.ok(data) | ||
110 … | + alice.get({id: data.key, private: true}, function (err, msg) { | ||
111 … | + if(err) throw err | ||
112 … | + console.log(msg) | ||
113 … | + t.deepEqual(msg.content, content) | ||
114 … | + t.end() | ||
115 … | + }) | ||
116 … | + } | ||
117 … | + ) | ||
81 | 118 … | }) | |
82 | 119 … | }) | |
83 | 120 … | ||
121 … | +//test that alice can decrypt messages after bob has switched | ||
122 … | +//keys again. | ||
123 … | + | ||
84 | 124 … | tape('cleanup', function (t) { | |
85 | 125 … | alice.close() | |
86 | 126 … | t.end() | |
87 | 127 … | }) |
Built with git-ssb-web