Files: 21deb97a3ee7ca191aa07a8ae90da508fd57388b / test / index.js
2545 bytesRaw
1 | var tape = require('tape') |
2 | var ssbkeys = require('../') |
3 | var crypto = require('crypto') |
4 | var path = '/tmp/ssb-keys_'+Date.now() |
5 | |
6 | tape('create and load async', function (t) { |
7 | console.log(ssbkeys) |
8 | ssbkeys.create(path, function(err, k1) { |
9 | if (err) throw err |
10 | ssbkeys.load(path, function(err, k2) { |
11 | if (err) throw err |
12 | console.log(k1, k2) |
13 | t.equal(k1.id.toString('hex'), k2.id.toString('hex')) |
14 | t.equal(k1.private.toString('hex'), k2.private.toString('hex')) |
15 | t.equal(k1.public.toString('hex'), k2.public.toString('hex')) |
16 | t.end() |
17 | }) |
18 | }) |
19 | }) |
20 | |
21 | tape('create and load sync', function (t) { |
22 | var k1 = ssbkeys.createSync(path) |
23 | var k2 = ssbkeys.loadSync(path) |
24 | t.equal(k1.id.toString('hex'), k2.id.toString('hex')) |
25 | t.equal(k1.private.toString('hex'), k2.private.toString('hex')) |
26 | t.equal(k1.public.toString('hex'), k2.public.toString('hex')) |
27 | t.end() |
28 | }) |
29 | |
30 | tape('sign and verify a javascript object', function (t) { |
31 | |
32 | var obj = require('../package.json') |
33 | var hmac_key = crypto.randomBytes(32) |
34 | var hmac_key2 = crypto.randomBytes(32) |
35 | console.log(obj) |
36 | |
37 | var keys = ssbkeys.generate() |
38 | var sig = ssbkeys.signObj(keys.private, hmac_key, obj) |
39 | console.log(sig) |
40 | t.ok(sig) |
41 | //verify must be passed the key to correctly verify |
42 | t.notOk(ssbkeys.verifyObj(keys, sig)) |
43 | t.notOk(ssbkeys.verifyObj({public: keys.public}, sig)) |
44 | t.ok(ssbkeys.verifyObj(keys, hmac_key, sig)) |
45 | t.ok(ssbkeys.verifyObj({public: keys.public}, hmac_key, sig)) |
46 | //a different hmac_key fails to verify |
47 | t.notOk(ssbkeys.verifyObj(keys, hmac_key2, sig)) |
48 | t.notOk(ssbkeys.verifyObj({public: keys.public}, hmac_key2, sig)) |
49 | t.end() |
50 | |
51 | }) |
52 | |
53 | //allow sign and verify to also take a separate key |
54 | //so that we can create signatures that cannot be used in other places. |
55 | //(i.e. testnet) avoiding chosen protocol attacks. |
56 | tape('sign and verify a hmaced object javascript object', function (t) { |
57 | |
58 | var obj = require('../package.json') |
59 | |
60 | console.log(obj) |
61 | |
62 | var keys = ssbkeys.generate() |
63 | var sig = ssbkeys.signObj(keys.private, obj) |
64 | console.log(sig) |
65 | t.ok(sig) |
66 | t.ok(ssbkeys.verifyObj(keys, sig)) |
67 | t.ok(ssbkeys.verifyObj({public: keys.public}, sig)) |
68 | t.end() |
69 | |
70 | }) |
71 | |
72 | tape('seeded keys, ed25519', function (t) { |
73 | |
74 | var seed = crypto.randomBytes(32) |
75 | var k1 = ssbkeys.generate('ed25519', seed) |
76 | var k2 = ssbkeys.generate('ed25519', seed) |
77 | |
78 | t.deepEqual(k1, k2) |
79 | |
80 | t.end() |
81 | |
82 | }) |
83 | |
84 | tape('ed25519 id === "@" ++ pubkey', function (t) { |
85 | |
86 | var keys = ssbkeys.generate('ed25519') |
87 | t.equal(keys.id, '@' + keys.public) |
88 | |
89 | t.end() |
90 | |
91 | }) |
92 | |
93 | |
94 | |
95 | |
96 | |
97 | |
98 | |
99 | |
100 | |
101 |
Built with git-ssb-web