1 |
3a515b92
|
cagy
|
'use strict';
|
2 |
|
|
/* global describe it */
|
3 |
|
|
|
4 |
|
|
var assert = require('assert');
|
5 |
|
|
var hash = require('../');
|
6 |
|
|
|
7 |
|
|
describe('Hmac', function() {
|
8 |
|
|
describe('mixed test vector', function() {
|
9 |
|
|
test({
|
10 |
|
|
name: 'nist 1',
|
11 |
|
|
key: '00010203 04050607 08090A0B 0C0D0E0F' +
|
12 |
|
|
'10111213 14151617 18191A1B 1C1D1E1F 20212223 24252627' +
|
13 |
|
|
'28292A2B 2C2D2E2F 30313233 34353637 38393A3B 3C3D3E3F',
|
14 |
|
|
msg: 'Sample message for keylen=blocklen',
|
15 |
|
|
res: '8bb9a1db9806f20df7f77b82138c7914d174d59e13dc4d0169c9057b133e1d62'
|
16 |
|
|
});
|
17 |
|
|
test({
|
18 |
|
|
name: 'nist 2',
|
19 |
|
|
key: '00010203 04050607' +
|
20 |
|
|
'08090A0B 0C0D0E0F 10111213 14151617 18191A1B 1C1D1E1F',
|
21 |
|
|
msg: 'Sample message for keylen<blocklen',
|
22 |
|
|
res: 'a28cf43130ee696a98f14a37678b56bcfcbdd9e5cf69717fecf5480f0ebdf790'
|
23 |
|
|
});
|
24 |
|
|
test({
|
25 |
|
|
name: 'nist 3',
|
26 |
|
|
key: '00010203' +
|
27 |
|
|
'04050607 08090A0B 0C0D0E0F 10111213 14151617 18191A1B' +
|
28 |
|
|
'1C1D1E1F 20212223 24252627 28292A2B 2C2D2E2F 30313233' +
|
29 |
|
|
'34353637 38393A3B 3C3D3E3F 40414243 44454647 48494A4B' +
|
30 |
|
|
'4C4D4E4F 50515253 54555657 58595A5B 5C5D5E5F 60616263',
|
31 |
|
|
msg: 'Sample message for keylen=blocklen',
|
32 |
|
|
res: 'bdccb6c72ddeadb500ae768386cb38cc41c63dbb0878ddb9c7a38a431b78378d'
|
33 |
|
|
});
|
34 |
|
|
test({
|
35 |
|
|
name: 'nist 4',
|
36 |
|
|
key: '00' +
|
37 |
|
|
'01020304 05060708 090A0B0C 0D0E0F10 11121314 15161718' +
|
38 |
|
|
'191A1B1C 1D1E1F20 21222324 25262728 292A2B2C 2D2E2F30',
|
39 |
|
|
msg: 'Sample message for keylen<blocklen, with truncated tag',
|
40 |
|
|
res: '27a8b157839efeac98df070b331d593618ddb985d403c0c786d23b5d132e57c7'
|
41 |
|
|
});
|
42 |
|
|
test({
|
43 |
|
|
name: 'regression 1',
|
44 |
|
|
key: '48f38d0c6a344959cc94502b7b5e8dffb6a5f41795d9066fc9a649557167ee2f',
|
45 |
|
|
msg: '1d495eef7761b65dccd0a983d2d7204fea28b5c81f1758046e062eb043755ea1',
|
46 |
|
|
msgEnc: 'hex',
|
47 |
|
|
res: 'cf5ad5984f9e43917aa9087380dac46e410ddc8a7731859c84e9d0f31bd43655'
|
48 |
|
|
});
|
49 |
|
|
|
50 |
|
|
function test(opt) {
|
51 |
|
|
it('should not fail at ' + opt.name, function() {
|
52 |
|
|
var h = hash.hmac(hash.sha256, opt.key, 'hex');
|
53 |
|
|
assert.equal(h.update(opt.msg, opt.msgEnc).digest('hex'), opt.res);
|
54 |
|
|
h = hash.hmac(hash.sha256, opt.key, 'hex');
|
55 |
|
|
assert.equal(h
|
56 |
|
|
.update(opt.msg.slice(0, 10), opt.msgEnc)
|
57 |
|
|
.update(opt.msg.slice(10), opt.msgEnc)
|
58 |
|
|
.digest('hex'), opt.res);
|
59 |
|
|
});
|
60 |
|
|
}
|
61 |
|
|
});
|
62 |
|
|
});
|