@@ -10,35 +10,75 @@ vectors.forEach(function (vector) {
1010 // eslint-disable-next-line no-param-reassign
1111 vector . ripemd160 = vector . rmd160 ;
1212} ) ;
13- var createHash = require ( '../browser' ) ;
14-
15- algorithms . forEach ( function ( algorithm ) {
16- test ( 'test ' + algorithm + ' against test vectors' , function ( t ) {
17- vectors . forEach ( function ( obj , i ) {
18- var input = Buffer . from ( obj . input , 'base64' ) ;
19- var node = obj [ algorithm ] ;
20- var js = createHash ( algorithm ) . update ( input ) . digest ( 'hex' ) ;
21- t . equal ( js , node , algorithm + '(testVector[' + i + ']) == ' + node ) ;
22- } ) ;
13+ var createHashOld = require ( '../browser.old.js' ) ;
14+ var createHashAuto = require ( '../browser.js' ) ;
15+
16+ var implementations = [ createHashOld ] ;
17+ if ( createHashAuto !== createHashOld ) { implementations . push ( createHashAuto ) ; }
2318
24- encodings . forEach ( function ( encoding ) {
19+ implementations . forEach ( function ( createHash ) {
20+ algorithms . forEach ( function ( algorithm ) {
21+ test ( 'test ' + algorithm + ' against test vectors' , function ( t ) {
2522 vectors . forEach ( function ( obj , i ) {
26- var input = Buffer . from ( obj . input , 'base64' ) . toString ( encoding ) ;
23+ var input = Buffer . from ( obj . input , 'base64' ) ;
2724 var node = obj [ algorithm ] ;
28- var js = createHash ( algorithm ) . update ( input , encoding ) . digest ( 'hex' ) ;
29- t . equal ( js , node , algorithm + '(testVector[' + i + '], ' + encoding + ') == ' + node ) ;
25+ var js = createHash ( algorithm ) . update ( input ) . digest ( 'hex' ) ;
26+ t . equal ( js , node , algorithm + '(testVector[' + i + ']) == ' + node ) ;
27+ } ) ;
28+
29+ encodings . forEach ( function ( encoding ) {
30+ vectors . forEach ( function ( obj , i ) {
31+ var input = Buffer . from ( obj . input , 'base64' ) . toString ( encoding ) ;
32+ var node = obj [ algorithm ] ;
33+ var js = createHash ( algorithm ) . update ( input , encoding ) . digest ( 'hex' ) ;
34+ t . equal ( js , node , algorithm + '(testVector[' + i + '], ' + encoding + ') == ' + node ) ;
35+ } ) ;
36+ } ) ;
37+
38+ vectors . forEach ( function ( obj , i ) {
39+ var input = Buffer . from ( obj . input , 'base64' ) ;
40+ var node = obj [ algorithm ] ;
41+ var hash = createHash ( algorithm ) ;
42+ hash . end ( input ) ;
43+ var js = hash . read ( ) . toString ( 'hex' ) ;
44+ t . equal ( js , node , algorithm + '(testVector[' + i + ']) == ' + node ) ;
3045 } ) ;
31- } ) ;
3246
33- vectors . forEach ( function ( obj , i ) {
34- var input = Buffer . from ( obj . input , 'base64' ) ;
35- var node = obj [ algorithm ] ;
36- var hash = createHash ( algorithm ) ;
37- hash . end ( input ) ;
38- var js = hash . read ( ) . toString ( 'hex' ) ;
39- t . equal ( js , node , algorithm + '(testVector[' + i + ']) == ' + node ) ;
47+ t . end ( ) ;
4048 } ) ;
49+ } ) ;
50+ } ) ;
4151
52+ var createHashNode = require ( 'crypto' ) . createHash ;
53+ var randomBytes = require ( 'crypto' ) . randomBytes ;
54+
55+ function crossTest ( createHashTest , createHashBase , algs ) {
56+ var data = randomBytes ( 32 ) ;
57+ test ( 'test against base implementation' , function ( t ) {
58+ algs . forEach ( function ( algorithm ) {
59+ var a = createHashTest ( algorithm ) . update ( data ) . digest ( 'hex' ) ;
60+ var b ;
61+ try {
62+ b = createHashBase ( algorithm ) . update ( data ) . digest ( 'hex' ) ;
63+ } catch ( err ) { }
64+ var label = algorithm + '(' + data . toString ( 'hex' ) + ')' ;
65+ if ( b ) {
66+ t . equal ( a , b , label ) ;
67+ } else {
68+ t . skip ( label ) ; // Node.js version doesn't support it
69+ }
70+ } ) ;
4271 t . end ( ) ;
4372 } ) ;
44- } ) ;
73+ }
74+
75+ var baseHashes = [ 'sha1' , 'sha224' , 'sha256' , 'sha384' , 'sha512' , 'ripemd160' , 'rmd160' ] ;
76+ var extraHashes = [ 'sha512-224' , 'sha512-256' , 'sha3-224' , 'sha3-256' , 'sha3-384' , 'sha3-512' , 'blake2b512' , 'blake2s256' ] ;
77+
78+ crossTest ( createHashOld , createHashNode , baseHashes ) ;
79+
80+ // Only new version supports additional hashes
81+ if ( createHashAuto !== createHashOld ) {
82+ crossTest ( createHashAuto , createHashNode , baseHashes ) ;
83+ crossTest ( createHashAuto , createHashNode , extraHashes ) ;
84+ }
0 commit comments