@@ -6,6 +6,12 @@ var Buffer = require('safe-buffer').Buffer;
6
6
7
7
var Sha1 = require ( '../' ) . sha1 ;
8
8
9
+ var nodeSupportsUint16 = false ;
10
+ try {
11
+ crypto . createHash ( 'sha1' ) . update ( new Uint16Array ( ) ) ;
12
+ nodeSupportsUint16 = true ;
13
+ } catch ( err ) { }
14
+
9
15
var inputs = [
10
16
[ '' , 'ascii' ] ,
11
17
[ 'abc' , 'ascii' ] ,
@@ -15,8 +21,10 @@ var inputs = [
15
21
[ '123456789abcdef123456789abcdef123456789abcdef123456789ab' , 'ascii' ] ,
16
22
[ '0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcde' , 'ascii' ] ,
17
23
[ '0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef' , 'ascii' ] ,
18
- [ 'foobarbaz' , 'ascii' ]
19
- ] ;
24
+ [ 'foobarbaz' , 'ascii' ] ,
25
+ [ Buffer . from ( 'buffer' ) ] ,
26
+ nodeSupportsUint16 ? [ new Uint16Array ( [ 1 , 2 , 3 ] ) ] : null
27
+ ] . filter ( Boolean ) ;
20
28
21
29
tape ( "hash is the same as node's crypto" , function ( t ) {
22
30
inputs . forEach ( function ( v ) {
@@ -35,7 +43,7 @@ tape('call update multiple times', function (t) {
35
43
var sha1hash = crypto . createHash ( 'sha1' ) ;
36
44
37
45
for ( var i = 0 ; i < v [ 0 ] . length ; i = ( i + 1 ) * 2 ) {
38
- var s = v [ 0 ] . substring ( i , ( i + 1 ) * 2 ) ;
46
+ var s = v [ 0 ] . slice ( i , ( i + 1 ) * 2 ) ;
39
47
hash . update ( s , v [ 1 ] ) ;
40
48
sha1hash . update ( s , v [ 1 ] ) ;
41
49
}
@@ -74,7 +82,7 @@ tape('hex encoding', function (t) {
74
82
var sha1hash = crypto . createHash ( 'sha1' ) ;
75
83
76
84
for ( var i = 0 ; i < v [ 0 ] . length ; i = ( i + 1 ) * 2 ) {
77
- var s = v [ 0 ] . substring ( i , ( i + 1 ) * 2 ) ;
85
+ var s = v [ 0 ] . slice ( i , ( i + 1 ) * 2 ) ;
78
86
hash . update ( Buffer . from ( s , 'ascii' ) . toString ( 'hex' ) , 'hex' ) ;
79
87
sha1hash . update ( Buffer . from ( s , 'ascii' ) . toString ( 'hex' ) , 'hex' ) ;
80
88
}
@@ -88,6 +96,29 @@ tape('hex encoding', function (t) {
88
96
t . end ( ) ;
89
97
} ) ;
90
98
99
+ tape ( 'throws on invalid input' , function ( t ) {
100
+ var invalid = [
101
+ { } , // non-arrayish
102
+ { length : 20 } , // undefined values
103
+ [ NaN ] , // non-numbers
104
+ [ [ ] ] , // non-numbers
105
+ [ 1 , 1.5 ] , // non-integers
106
+ [ 1 , 256 ] , // out of bounds
107
+ [ - 1 , 0 ] // out of bounds
108
+ ] ;
109
+
110
+ invalid . forEach ( function ( input ) {
111
+ var hash = new Sha1 ( ) ;
112
+
113
+ t [ 'throws' ] ( function ( ) {
114
+ hash . update ( input ) ;
115
+ hash . digest ( 'hex' ) ;
116
+ } ) ;
117
+ } ) ;
118
+
119
+ t . end ( ) ;
120
+ } ) ;
121
+
91
122
tape ( 'call digest for more than MAX_UINT32 bits of data' , function ( t ) {
92
123
var sha1hash = crypto . createHash ( 'sha1' ) ;
93
124
var hash = new Sha1 ( ) ;
0 commit comments