-
Notifications
You must be signed in to change notification settings - Fork 16
/
Copy pathutils.test.js
111 lines (78 loc) · 3.98 KB
/
utils.test.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
const assert = require('assert');
describe('utilities', () => {
describe('hkdf', () => {
const hkdf = require('../lib/utils').hkdf('sha256');
it('should pass Test Vector #1', (done) => {
const key = Buffer.from('0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b', 'hex');
const salt = Buffer.from('000102030405060708090a0b0c', 'hex');
const use = Buffer.from('f0f1f2f3f4f5f6f7f8f9', 'hex');
hkdf(key, salt, 42, use, (err, derived) => {
if (err) { return done(err); }
const expected = Buffer.from('3cb25f25faacd57a90434f64d0362f2a2d2d0a90cf1a5a4c5db02d56ecc4c5bf34007208d5b887185865', 'hex');
assert.ok(Buffer.compare(expected, derived));
done();
});
});
it('should pass Test Vector #2', (done) => {
const key = Buffer.from('000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f2021222324252627' +
'28292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f', 'hex');
const salt = Buffer.from('606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f8081828384858687' +
'88898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeaf', 'hex');
const use = Buffer.from('b0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7' +
'd8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff', 'hex');
hkdf(key, salt, 82, use, (err, derived) => {
if (err) { return done(err); }
const expected = Buffer.from('b11e398dc80327a1c8e7f78c596a49344f012eda2d4efad8a050cc4c19afa97c59045a99cac7827271' +
'cb41c65e590e09da3275600c2f09b8367793a9aca3db71cc30c58179ec3e87c14c01d5c1f3434f1d87', 'hex');
assert.ok(Buffer.compare(expected, derived));
done();
});
});
it('should pass Test Vector #3', (done) => {
const key = Buffer.from('0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b', 'hex');
const salt = Buffer.from('');
const use = Buffer.from('');
hkdf(key, salt, 42, use, (err, derived) => {
if (err) { return done(err); }
const expected = Buffer.from('8da4e775a563c18f715f802a063c5a31b8a11f5c5ee1879ec3454e5f3c738d2d9d201395faa4b61a96c8', 'hex');
assert.ok(Buffer.compare(expected, derived));
done();
});
});
});
describe('pae', () => {
const pae = require('../lib/utils').pae;
it('should encode no inputs', () => {
const encoded = pae();
const expected = '0000000000000000';
assert.equal(encoded.toString('hex'), expected);
});
it('should encode an empty string', () => {
const encoded = pae('');
const expected = '01000000000000000000000000000000';
assert.equal(encoded.toString('hex'), expected);
});
it('should encode empty strings', () => {
const encoded = pae('', '');
const expected = '020000000000000000000000000000000000000000000000';
assert.equal(encoded.toString('hex'), expected);
});
it('should encode a non-empty string', () => {
const encoded = pae('Paragon');
const expected = '0100000000000000070000000000000050617261676f6e';
assert.equal(encoded.toString('hex'), expected);
});
it('should encode non-empty strings', () => {
const encoded = pae('Paragon', 'Initiative');
const expected = '0200000000000000070000000000000050617261676f6e0a00000000000000496e6974696174697665';
assert.equal(encoded.toString('hex'), expected);
});
it('should ensure faked padding results in different prefixes', () => {
const padding = Buffer.alloc(7).fill(0);
const str = 'Paragon' + String.fromCharCode(10) + padding + 'Initiative';
const encoded = pae(str);
const expected = '0100000000000000190000000000000050617261676f6e0a00000000000000496e6974696174697665';
assert.equal(encoded.toString('hex'), expected);
});
});
});