UNPKG

3.56 kBJavaScriptView Raw
1var test = require('tape')
2var blake2b = require('.')
3var vectors = require('./test-vectors.json')
4
5setup()
6test('wait for ready', function (assert) {
7 blake2b.ready(function () {
8 assert.end()
9 })
10})
11setup()
12
13function setup () {
14 test('vectors', function (assert) {
15 vectors.forEach(function (v) {
16 var out = new Uint8Array(v.outlen)
17 var input = hexWrite(new Uint8Array(v.input.length / 2), v.input)
18 var key = v.key.length === 0 ? null : hexWrite(new Uint8Array(v.key.length / 2), v.key)
19 var salt = v.salt.length === 0 ? null : hexWrite(new Uint8Array(v.salt.length / 2), v.salt)
20 var personal = v.personal.length === 0 ? null : hexWrite(new Uint8Array(v.personal.length / 2), v.personal)
21
22 var expected = Buffer.from(hexWrite(new Uint8Array(v.out.length / 2), v.out))
23 var actual = Buffer.from(blake2b(out.length, key, salt, personal, true).update(input).digest(out))
24
25 assert.deepEquals(actual, expected)
26 })
27 assert.end()
28 })
29
30 test('works with buffers', function (assert) {
31 var vector = vectors.slice(-1)[0]
32
33 var out = Buffer.allocUnsafe(vector.outlen)
34 var input = Buffer.from(vector.input, 'hex')
35 var key = Buffer.from(vector.key, 'hex')
36 var salt = Buffer.from(vector.salt, 'hex')
37 var personal = Buffer.from(vector.personal, 'hex')
38
39 var expected = Buffer.from(vector.out, 'hex')
40 var actual = blake2b(out.length, key, salt, personal).update(input).digest(out)
41
42 assert.deepEquals(actual, expected)
43 assert.end()
44 })
45
46 test('streaming', function (t) {
47 var isntance = blake2b(blake2b.BYTES)
48 var buf = new Buffer('Hej, Verden')
49
50 for (var i = 0; i < 10; i++) isntance.update(buf)
51
52 var out = Buffer.alloc(blake2b.BYTES)
53 isntance.digest(out)
54
55 t.same(out.toString('hex'), 'cbc20f347f5dfe37dc13231cbf7eaa4ec48e585ec055a96839b213f62bd8ce00', 'streaming hash')
56 t.end()
57 })
58
59 test('streaming with key', function (t) {
60 var key = Buffer.alloc(blake2b.KEYBYTES)
61 key.fill('lo')
62
63 var instance = blake2b(blake2b.BYTES, key)
64 var buf = new Buffer('Hej, Verden')
65
66 for (var i = 0; i < 10; i++) instance.update(buf)
67
68 var out = Buffer.alloc(blake2b.BYTES)
69 instance.digest(out)
70
71 t.same(out.toString('hex'), '405f14acbeeb30396b8030f78e6a84bab0acf08cb1376aa200a500f669f675dc', 'streaming keyed hash')
72 t.end()
73 })
74
75 test('streaming with hash length', function (t) {
76 var isntance = blake2b(blake2b.BYTES_MIN)
77 var buf = new Buffer('Hej, Verden')
78
79 for (var i = 0; i < 10; i++) isntance.update(buf)
80
81 var out = Buffer.alloc(blake2b.BYTES_MIN)
82 isntance.digest(out)
83
84 t.same(out.toString('hex'), 'decacdcc3c61948c79d9f8dee5b6aa99', 'streaming short hash')
85 t.end()
86 })
87
88 test('streaming with key and hash length', function (t) {
89 var key = Buffer.alloc(blake2b.KEYBYTES)
90 key.fill('lo')
91
92 var instance = blake2b(blake2b.BYTES_MIN, key)
93 var buf = new Buffer('Hej, Verden')
94
95 for (var i = 0; i < 10; i++) instance.update(buf)
96
97 var out = Buffer.alloc(blake2b.BYTES_MIN)
98 instance.digest(out)
99
100 t.same(out.toString('hex'), 'fb43f0ab6872cbfd39ec4f8a1bc6fb37', 'streaming short keyed hash')
101 t.end()
102 })
103}
104
105function hexWrite (buf, string) {
106 // must be an even number of digits
107 var strLen = string.length
108 if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')
109
110 for (var i = 0; i < strLen / 2; ++i) {
111 var parsed = parseInt(string.substr(i * 2, 2), 16)
112 if (Number.isNaN(parsed)) throw new Error('Invalid byte')
113 buf[i] = parsed
114 }
115 return buf
116}