@@ -19,7 +19,7 @@ module.exports = function (createHmac, exports) {
19
19
} )
20
20
}
21
21
22
- exports . pbkdf2Sync = function ( password , salt , iterations , keylen ) {
22
+ exports . pbkdf2Sync = function ( key , salt , iterations , keylen ) {
23
23
if ( 'number' !== typeof iterations )
24
24
throw new TypeError ( 'Iterations not a number' )
25
25
if ( iterations < 0 )
@@ -29,6 +29,17 @@ module.exports = function (createHmac, exports) {
29
29
if ( keylen < 0 )
30
30
throw new TypeError ( 'Bad key length' )
31
31
32
+ //stretch key to the correct length that hmac wants it,
33
+ //otherwise this will happen every time hmac is called
34
+ //twice per iteration.
35
+ var key = ! Buffer . isBuffer ( key ) ? new Buffer ( key ) : key
36
+
37
+ if ( key . length > blocksize ) {
38
+ key = createHash ( alg ) . update ( key ) . digest ( )
39
+ } else if ( key . length < blocksize ) {
40
+ key = Buffer . concat ( [ key , zeroBuffer ] , blocksize )
41
+ }
42
+
32
43
var HMAC ;
33
44
var cplen , p = 0 , i = 1 , itmp = new Buffer ( 4 ) , digtmp ;
34
45
var out = new Buffer ( keylen ) ;
@@ -47,14 +58,14 @@ module.exports = function (createHmac, exports) {
47
58
itmp [ 2 ] = ( i >> 8 ) & 0xff ;
48
59
itmp [ 3 ] = i & 0xff ;
49
60
50
- HMAC = createHmac ( 'sha1' , password ) ;
61
+ HMAC = createHmac ( 'sha1' , key ) ;
51
62
HMAC . update ( salt )
52
63
HMAC . update ( itmp ) ;
53
64
digtmp = HMAC . digest ( ) ;
54
65
digtmp . copy ( out , p , 0 , cplen ) ;
55
66
56
67
for ( var j = 1 ; j < iterations ; j ++ ) {
57
- HMAC = createHmac ( 'sha1' , password ) ;
68
+ HMAC = createHmac ( 'sha1' , key ) ;
58
69
HMAC . update ( digtmp ) ;
59
70
digtmp = HMAC . digest ( ) ;
60
71
for ( var k = 0 ; k < cplen ; k ++ ) {
0 commit comments