@@ -9,6 +9,10 @@ var tape = require('tape');
9
9
var satisfies = require ( 'semver' ) . satisfies ;
10
10
var Buffer = require ( 'safe-buffer' ) . Buffer ;
11
11
12
+ var node = require ( 'crypto' ) ;
13
+ var js = require ( '../browser' ) ;
14
+ var browserImpl = require ( '../lib/sync-browser' ) ;
15
+
12
16
var pVersionMajor = parseInt ( process . version . split ( '.' ) [ 0 ] . slice ( 1 ) , 10 ) ;
13
17
/* istanbul ignore next */
14
18
if ( pVersionMajor !== 4 || process . browser ) {
@@ -212,7 +216,67 @@ function runTests(name, compat) {
212
216
} ) ;
213
217
}
214
218
215
- var js = require ( '../browser' ) ;
219
+ tape ( 'does not return all zeroes for any algorithm' , function ( t ) {
220
+ var algos2 = [
221
+ // 'sha3-512',
222
+ // 'sha3-256',
223
+ // 'SHA3-384',
224
+ // 'blake2b512',
225
+ 'Sha256' ,
226
+ 'ShA256' ,
227
+ 'Sha512' ,
228
+ 'sha512-256' ,
229
+ 'SHA512' ,
230
+ 'SHA1' ,
231
+ 's-h-a-1' ,
232
+ 'sha-1' ,
233
+ 'RMD160' ,
234
+ 'RIPEMD-160' ,
235
+ 'ripemd-160'
236
+ ] ;
237
+ algos2 . forEach ( function ( algo ) {
238
+ var throwCount = 0 ;
239
+ var impls = { __proto__ : null , node : node . pbkdf2Sync , lib : js . pbkdf2Sync , browser : browserImpl } ;
240
+ var results = { __proto__ : null } ;
241
+ for ( var implName in impls ) { // eslint-disable-line no-restricted-syntax
242
+ var pbkdf2Sync = impls [ implName ] ;
243
+ try {
244
+ var key = pbkdf2Sync ( 'secret' , 'salt' , 100000 , 64 , algo ) . toString ( 'hex' ) ;
245
+ results [ implName ] = key ;
246
+ t . doesNotMatch ( key , / ^ 0 + $ / , implName + ' does not return all zeros for ' + algo ) ;
247
+ } catch ( e ) {
248
+ throwCount += 1 ;
249
+ t . ok ( e , implName + ' throws for ' + algo ) ;
250
+ t . comment ( e ) ;
251
+ }
252
+ }
253
+
254
+ if ( throwCount === 0 ) {
255
+ t . equal ( throwCount , 0 , 'all implementations return a value for ' + algo ) ;
256
+ t . equal (
257
+ results . node ,
258
+ results . lib ,
259
+ 'node and js pbkdf2Sync should return the same value for ' + algo
260
+ ) ;
261
+
262
+ t . equal (
263
+ results . node ,
264
+ results . browser ,
265
+ 'node and browser pbkdf2Sync should return the same value for ' + algo
266
+ ) ;
267
+ } else {
268
+ t . equal (
269
+ throwCount ,
270
+ 3 ,
271
+ 'all implementations throw for ' + algo ,
272
+ { todo : throwCount === 1 && algo === 'sha512-256' && 'sha.js does not yet support sha512-256' }
273
+ ) ;
274
+ }
275
+ } ) ;
276
+
277
+ t . end ( ) ;
278
+ } ) ;
279
+
216
280
runTests ( 'JavaScript pbkdf2' , js ) ;
217
281
218
282
var assign = require ( 'object.assign' ) ;
@@ -221,7 +285,7 @@ var assign = require('object.assign');
221
285
if ( ! process . browser ) {
222
286
/* eslint global-require: 0 */
223
287
var browser = assign ( { } , js ) ;
224
- browser . pbkdf2Sync = require ( '../lib/sync-browser' ) ;
288
+ browser . pbkdf2Sync = browserImpl ;
225
289
runTests ( 'browser pbkdf2' , {
226
290
pbkdf2 : browser . pbkdf2 ,
227
291
pbkdf2Sync : require ( '../lib/sync-browser' )
0 commit comments