@@ -15,8 +15,9 @@ var inputs = [
1515 [ '123456789abcdef123456789abcdef123456789abcdef123456789ab' , 'ascii' ] ,
1616 [ '0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcde' , 'ascii' ] ,
1717 [ '0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef' , 'ascii' ] ,
18- [ 'foobarbaz' , 'ascii' ]
19- ] ;
18+ [ 'foobarbaz' , 'ascii' ] ,
19+ typeof Uint16Array === 'function' ? [ new Uint16Array ( [ 1 , 2 , 3 ] ) ] : null
20+ ] . filter ( Boolean ) ;
2021
2122tape ( "hash is the same as node's crypto" , function ( t ) {
2223 inputs . forEach ( function ( v ) {
@@ -35,7 +36,7 @@ tape('call update multiple times', function (t) {
3536 var sha1hash = crypto . createHash ( 'sha1' ) ;
3637
3738 for ( var i = 0 ; i < v [ 0 ] . length ; i = ( i + 1 ) * 2 ) {
38- var s = v [ 0 ] . substring ( i , ( i + 1 ) * 2 ) ;
39+ var s = v [ 0 ] . slice ( i , ( i + 1 ) * 2 ) ;
3940 hash . update ( s , v [ 1 ] ) ;
4041 sha1hash . update ( s , v [ 1 ] ) ;
4142 }
@@ -74,7 +75,7 @@ tape('hex encoding', function (t) {
7475 var sha1hash = crypto . createHash ( 'sha1' ) ;
7576
7677 for ( var i = 0 ; i < v [ 0 ] . length ; i = ( i + 1 ) * 2 ) {
77- var s = v [ 0 ] . substring ( i , ( i + 1 ) * 2 ) ;
78+ var s = v [ 0 ] . slice ( i , ( i + 1 ) * 2 ) ;
7879 hash . update ( Buffer . from ( s , 'ascii' ) . toString ( 'hex' ) , 'hex' ) ;
7980 sha1hash . update ( Buffer . from ( s , 'ascii' ) . toString ( 'hex' ) , 'hex' ) ;
8081 }
@@ -88,6 +89,29 @@ tape('hex encoding', function (t) {
8889 t . end ( ) ;
8990} ) ;
9091
92+ tape ( 'throws on invalid input' , function ( t ) {
93+ var invalid = [
94+ { } , // non-arrayish
95+ { length : 20 } , // undefined values
96+ [ NaN ] , // non-numbers
97+ [ [ ] ] , // non-numbers
98+ [ 1 , 1.5 ] , // non-integers
99+ [ 1 , 256 ] , // out of bounds
100+ [ - 1 , 0 ] // out of bounds
101+ ] ;
102+
103+ invalid . forEach ( function ( input ) {
104+ var hash = new Sha1 ( ) ;
105+
106+ t [ 'throws' ] ( function ( ) {
107+ hash . update ( input ) ;
108+ hash . digest ( 'hex' ) ;
109+ } ) ;
110+ } ) ;
111+
112+ t . end ( ) ;
113+ } ) ;
114+
91115tape ( 'call digest for more than MAX_UINT32 bits of data' , function ( t ) {
92116 var sha1hash = crypto . createHash ( 'sha1' ) ;
93117 var hash = new Sha1 ( ) ;
0 commit comments